我正试图像在wrap.sh中一样通过这里脚本启动我的应用程序,但是当把我的wrap.sh放在正确的位置时,它不会绑定在我的apk中。
下面是相关的build.gradle文件:
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
sourceSets.main {
res.srcDirs "res"
assets.srcDirs '../../Resources/data/app', '../../Resources/data/content'
jniLibs.srcDirs "jni"
java.srcDirs "javasrc"
manifest.srcFile "AndroidManifest.xml"
}
buildTypes {
sanitize_debug {
initWith buildTypes.debug
minifyEnabled false
useProguard false
sourceSets.main {
jniLibs.srcDirs += "jni/sanitizer/libs"
}
[...]
tasks.whenTaskAdded { task ->
if (task.name == 'generateSanitize_debugBuildConfig') {
task.dependsOn createWrapScriptAddDir
}
}
static def writeWrapScriptToFullyCompileJavaApp(wrapFile, abi) {
if(abi == "armeabi" || abi == "armeabi-v7a")
abi = "arm"
if(abi == "arm64-v8a")
abi = "aarch64"
if (abi == "x86")
abi = "i686"
wrapFile.withWriter { writer ->
writer.write('#!/system/bin/sh\n')
writer.write('HERE="$(cd "$(dirname "$0")" && pwd)"\n')
writer.write('export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1,detect_container_overflow=0\n')
//writer.write('export ASAN_ACTIVATION_OPTIONS=include_if_exists=/data/local/tmp/asan.options.b\n')
writer.write("export LD_PRELOAD=\$HERE/libclang_rt.asan-${abi}-android.so\n")
writer.write('\$@\n')
}
}
task createWrapScriptAddDir(dependsOn: copyASANLibs) {
for (String abi : rootProject.ext.abiFilters) {
def dir = new File("jni/sanitizer/libs/" + abi)
dir.mkdirs()
def wrapFile = new File(dir, "wrap.sh")
writeWrapScriptToFullyCompileJavaApp(wrapFile, abi)
println "write file " + wrapFile.path
}
}我在apk中得到的lib文件夹只包含我的so文件(正确地从它们各自的"jni/sanitizer/libs/abi“文件夹复制到apk中的lib文件夹),而不是我的wrap.sh文件。
我确实在我的android文件夹视图(和我的磁盘上)中看到了我的wrap.sh文件,但是在apk中没有。
(我正试图在android中使用杀菌剂构建我的so文件,就像在这里中那样)
发布于 2018-04-23 14:12:47
所以我找到了一个解决方案(描述了这里)。解决方法是将脚本放在"resources/targetArchitecture“文件夹中,然后将其捆绑在apk中。
https://stackoverflow.com/questions/49052788
复制相似问题