minifiedEnabled 导致渲染脚本崩溃 >Kitkat

minifiedEnabled leads to renderscript crash >Kitkat

最新版本的 renderscriptSupport 将 renderscript 修复回版本 11。我在适当的设备和模拟器上测试了这些。但是,生产后每个人 运行 KitKat 或更低版本都崩溃了。

defaultConfig {
    applicationId "com.photoembroidery.tat.olsennoise"
    minSdkVersion 11
    targetSdkVersion 24
    versionCode 9
    versionName "1.6bRS"

    renderscriptTargetApi 23
    renderscriptSupportModeEnabled true
}

它的内置脚本是:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

为版本启用了缩小,并且任何签名的 APK 都崩溃了。而当我更改为:

buildTypes {
    release {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

已签名的 APK 不再在 Kitkat 设备上崩溃。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.photoembroidery.tat.olsennoise/com.photoembroidery.tat.olsennoise.OlsenNoise}: android.support.v8.renderscript.m: Error loading RS jni library: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.photoembroidery.tat.olsennoise-1/lib/arm/librsjni.so" Support lib API: 2301
Caused by: android.support.v8.renderscript.m: Error loading RS jni library: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.photoembroidery.tat.olsennoise-1/lib/arm/librsjni.so" Support lib API: 2301

和:

java.lang.NoSuchMethodError: no static or non-static method "Landroid/support/v8/renderscript/RenderScript;.nDeviceDestroy(J)V"

还有什么我可能遗漏的吗?是缩小版吧?有没有办法安全地让大部分脚本的最小化工作(额外的膨胀不是很棒)?

2016 年 12 月问题仍然存在,但 proguard 规则有效:

-keep class com.photoembroidery.tat.olsennoise.** {*;}
-keep class android.support.v8.renderscript.** {*;}

停止在 KitKat 上崩溃。

使用AndroidX你需要

-keep class androidx.renderscript.** { *; }