Как упаковать сценарий оболочки wrap.sh с помощью Android Studio

Я пытаюсь запустить свое приложение с помощью скрипта 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
    }
}

и моя результирующая папка lib в моем apk содержит только мои файлы so (которые правильно скопированы из соответствующей папки «jni/sanitizer/libs/abi» в папку lib в apk), а не мой файл wrap.sh.

Я действительно вижу свой файл wrap.sh в представлении папок студии Android (и на моем диске), но в apk его нет.

(Я пытаюсь создать в студии Android свой файл so с дезинфицирующим средством, как в здесь )


person downstroy    schedule 01.03.2018    source источник
comment
Похоже, за 7 месяцев никто не нашел решения: stackoverflow.com/questions/44935575/   -  person downstroy    schedule 02.03.2018
comment
У меня та же проблема, не могу включить wrap.sh в APK. Удалось ли вам найти решение?   -  person sixones    schedule 16.04.2018
comment
К сожалению, пока нет. Через несколько недель снова попробую использовать дезинфицирующее средство. Может быть, тогда я найду решение...   -  person downstroy    schedule 17.04.2018


Ответы (1)


Итак, я нашел решение (описано здесь) . Обходной путь заключается в том, чтобы поместить скрипт в папку «resources/targetArchitecture», которую затем можно объединить в apk.

person downstroy    schedule 23.04.2018