由于我已迁移到androidx,因此无法运行Renderscript。我收到以下异常:
2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64: java_vm_ext.cc:504]应用程序中JNI检测到错误:JNI 调用NewGlobalRef并带有未决异常 java.lang.ClassNotFoundException:找不到类 路径上的“ android.support.v8.renderscript.RenderScript”: DexPathList [[zip文件 “ /data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk"],nativeLibraryDirectories=[/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/lib/arm64, /data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk!/lib/arm64-v8a, / system / lib64,/ system / vendor / lib64]] 2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, 布尔值)(ClassLoader.java:379)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader,java.lang.String)(Runtime.java:-2)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64: java_vm_ext.cc:504],位于java.lang.String java.lang.Runtime.doLoad(java.lang.String,java.lang.ClassLoader) (Runtime.java:1099)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]无效 java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.String)(Runtime.java:1014)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64: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 / zygote64: java_vm_ext.cc:504],位于androidx.renderscript.RenderScript androidx.renderscript.RenderScript.internalCreate(android.content.Context, int,androidx.renderscript.RenderScript $ ContextType,int) (RenderScript.java:1408)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context, int,androidx.renderscript.RenderScript $ ContextType,int) (RenderScript.java:1599)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context, androidx.renderscript.RenderScript $ ContextType,int) (RenderScript.java:1549)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context, androidx.renderscript.RenderScript $ ContextType) (RenderScript.java:1525)2018-10-12 16:27:58.328 27195-27195 / pl.qus.xenoamp2 A / zygote64:java_vm_ext.cc:504]在 androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context) (RenderScript.java:1512)
我在gradle中有通常的条目:
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
我还有什么需要改变的吗?
答案 0 :(得分:7)
我遇到了同样的问题,我切换到了不支持的renderscript版本
在项目gradle中
renderscriptTargetApi 17
renderscriptSupportModeEnabled false
在使用renderscript的类中
import android.renderscript.RenderScript
代替
import androidx.renderscript.RenderScript
它为我完成了工作,但我不喜欢此解决方案,
答案 1 :(得分:3)
构建工具(确切地说是预构建的librsjni_androidx.so)存在问题,现已在版本 29.0.2 中修复。
我已通过将sdk编译升级为API 29并将构建工具升级为29.0.2对此进行了验证。
编辑:
这是我在build.gradle
中配置的:
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
答案 2 :(得分:3)
我的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;
答案 3 :(得分:0)
带标记的答案确实可以使它工作,但是正如@Zee所提到的,似乎不支持的常规渲染脚本似乎删除了64位兼容性。现在,当我尝试发布我的应用时,我从Google Play控制台收到一条警告消息。因此,我想如果我们仍在使用renderscript,我们将不得不保留支持版本,并且暂时不要迁移到AndroidX。
答案 4 :(得分:0)
我能够通过将buildToolsVersion
的版本更改为29.0.2
并将renderscriptTargetApi
的版本更改为29
来解决该问题:
android {
// ...
buildToolsVersion '29.0.2'
defaultConfig {
// ...
renderscriptTargetApi 29
renderscriptSupportModeEnabled true
}
// ...
}
答案 5 :(得分:0)
我有同样的问题。 (对其中的一部分进行尝试之后)对我唯一有用的是更新到最新的构建工具版本(29.0.3),我不确定在最初发布这些问题时该版本是否存在:
buildToolsVersion '29.0.3'
答案 6 :(得分:0)
我通过添加 proguard 来修复: 我从谷歌支持者那里得到答复 here
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
答案 7 :(得分:0)
android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}