首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用android打包"wrap.sh“shell脚本

如何用android打包"wrap.sh“shell脚本
EN

Stack Overflow用户
提问于 2018-03-01 15:14:47
回答 1查看 2.2K关注 0票数 1

我正试图像在wrap.sh中一样通过这里脚本启动我的应用程序,但是当把我的wrap.sh放在正确的位置时,它不会绑定在我的apk中。

下面是相关的build.gradle文件:

代码语言:javascript
复制
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文件,就像在这里中那样)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 14:12:47

所以我找到了一个解决方案(描述了这里)。解决方法是将脚本放在"resources/targetArchitecture“文件夹中,然后将其捆绑在apk中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49052788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档