15

由于我已迁移到 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, boolean) (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] 在 void 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] 在 void 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)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)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)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)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

还有什么我需要改变的吗?

4

8 回答 8

19

我有同样的问题,我切换到不支持的渲染脚本版本

在项目中

renderscriptTargetApi 17
renderscriptSupportModeEnabled false

在使用 renderscript 的类中

import android.renderscript.RenderScript

代替

import androidx.renderscript.RenderScript

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

于 2018-10-19T10:28:21.433 回答
7

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

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

编辑:这是我配置的build.gradle

    renderscriptTargetApi 18
    renderscriptSupportModeEnabled true
于 2019-10-29T16:49:43.500 回答
4

在我的 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;
于 2020-02-15T20:56:34.817 回答
4

我能够通过更改buildToolsVersionto29.0.2renderscriptTargetApito的版本来解决问题29

android {
    // ...
    buildToolsVersion '29.0.2'
    defaultConfig {
        // ...
        renderscriptTargetApi 29
        renderscriptSupportModeEnabled true
    }
    // ...
}
于 2019-11-08T05:04:24.987 回答
3

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

-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
于 2021-04-13T14:30:00.633 回答
2

标记的答案确实使它工作,但正如@Zee 提到的,似乎不支持的常规渲染脚本删除了 64 位兼容性。现在,当我尝试发布我的应用程序时,我从 Google Play 控制台收到了一条警告消息。所以我想如果我们还在使用渲染脚本,我们将不得不继续使用支持版本,而不是暂时迁移到 AndroidX。

于 2019-06-20T20:56:53.763 回答
0

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

buildToolsVersion '29.0.3'
于 2020-09-09T23:54:03.290 回答
0
android {
    //...
    defaultConfig {
        //...

        renderscriptTargetApi 21
        renderscriptSupportModeEnabled true
    }
}
于 2021-08-07T11:52:54.780 回答