AndroidX破坏了渲染脚本



由于我已经迁移到androidx,所以无法运行Renderscript。我得到以下异常:

2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]JNI在应用程序中检测到错误:JNI调用NewGlobalRef时出现挂起的异常java.lang.ClassNotFoundException:找不到类路径上的"android.support.v8.renderscript.renderscript":DexPathList[[zip文件"/data/app/pl.qus.xenap2-xHJAddeg9oM-uGSxlvMp7A=/base.apk"],本机库目录=[/data/app/pl.ku.xenap2-x HJAddeg9 oM-uGSMxlvMp7A==/lib/arm64,/data/app/pl.qus.xenamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk/lib/arm64-v8a,/system/lib64,/system/vender/lib64]]2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.Classdalvik.system.BaseDexClassLoader.findClass(java.lang.String)(BaseDexClassLoader.java:93)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.Classjava.lang.CClassLoader.loadClass(java.lang.String,boolean)(ClassLoader.java:379)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.Classjava.lang.CClassLoader.loadClass(java.lang.String)(ClassLoader.java:312)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.String java.lang.Runtime.nativeLoad(java.lang.Sstring,java.lang.ClassLoader,java.lang.String)(Runtime.java:-2)2018-10-1216:27:58.328 27195-27195/pl.qus.xenoamp2 A/合子64:java.lang.String上的java_vm_ext.cc:504]java.lang.Runtime.doLoad(java.lang.String,java.lang.ClassLoader)(Runtime.java:1099)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.Runtime.loadLibrary0(java.lang.ClassLoader,java.lang.String)(Runtime.java:1014)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]java.lang.System.loadLibrary(java.lang.String)(System.java:1657)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504],位于androidx.renderscript.renderscriptandroidx.renderscript.renderscript.internalCreate(android.content.Context,int,androidx.renderscript.renderscript$ContextType,int)(RenderScript.java:1408)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]androidx.renderscript.renderscriptandroidx.renderscript.renderscript.create(android.content.Context,int,androidx.renderscript.renderscript$ContextType,int)(RenderScript.java:1599)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]androidx.renderscript.renderscriptandroidx.renderscript.renderscript.create(android.content.Context,androidx.renderscript.renderscript$ContextType,int)(RenderScript.java:1549)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]androidx.renderscript.renderscriptandroidx.renderscript.renderscript.create(android.content.Context,androidx.renderscript.renderscript$ContextType)(RenderScript.java:1525)2018-10-12 16:27:58.32827195-27195/pl.qus.xenoamp2 A/合子64:java_vm_ext.cc:504]androidx.renderscript.renderscriptandroidx.renderscript.renderscript.create(android.content.Context)(RenderScript.java:1512)

我在gradle:中有常用条目

renderscriptTargetApi 18
renderscriptSupportModeEnabled true

还有什么需要我改的吗?

我遇到了同样的问题,我切换到了不支持renderscript 的版本

项目内等级

renderscriptTargetApi 17
renderscriptSupportModeEnabled false

在使用renderscript 的类中

import android.renderscript.RenderScript

而不是

import androidx.renderscript.RenderScript

它为我做了工作,但我不喜欢这个解决方案,要完成

构建工具(确切地说是预构建的librsjni_androidx.so)存在问题,现在已在版本29.02中修复。

我已经通过将compile sdk升级到API 29并将构建工具升级到29.0.2来验证这一点。

编辑:这是我在build.gradle:中配置的内容

renderscriptTargetApi 18
renderscriptSupportModeEnabled true

我能够通过将buildToolsVersion的版本更改为29.0.2并将renderscriptTargetApi的版本改为29:来解决问题

android {
// ...
buildToolsVersion '29.0.2'
defaultConfig {
// ...
renderscriptTargetApi 29
renderscriptSupportModeEnabled true
}
// ...
}

在我的gradle模块文件中,我有:

renderscriptTargetApi 19
renderscriptSupportModeEnabled true

而且,在迁移到AndroidX之前,我有以下导入:

import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.Matrix4f;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicBlur;
import android.support.v8.renderscript.ScriptIntrinsicColorMatrix;
import android.support.v8.renderscript.ScriptIntrinsicConvolve3x3;

迁移到AndroidX后,就像文档中所说的那样:

我在gradle模块文件中保留了相同的语句,但我升级到buildToolsVersion 29.0.2,compileSdkVersion升级到28

我将以前的导入更改为下面的导入,一切都正常。

import androidx.renderscript.Matrix4f;
import androidx.renderscript.RenderScript;
import androidx.renderscript.Allocation;
import androidx.renderscript.Element;
import androidx.renderscript.ScriptIntrinsicBlur;
import androidx.renderscript.ScriptIntrinsicColorMatrix;
import androidx.renderscript.ScriptIntrinsicConvolve3x3;

我通过添加proguard修复了:我在这里得到了谷歌支持者的回答

-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }

标记的答案确实使其工作,但正如@Zee所提到的,似乎不支持的常规renderscript删除了64位兼容性。现在,我在尝试发布我的应用程序时收到了来自Google Play控制台的警告消息。所以我想,如果我们仍在使用renderscript,我们将不得不保留支持版本,暂时不迁移到AndroidX。

android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}

我也遇到了同样的问题。唯一对我有效的是(在尝试了其中的一些之后),更新到了最新的构建工具版本(29.0.3),当这些问题最初发布时,我不确定它是否存在:

buildToolsVersion '29.0.3'

最新更新