渲染脚本被AndroidX破坏了吗?

时间:2018-10-12 14:35:11

标签: android renderscript android-renderscript

由于我已迁移到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

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

8 个答案:

答案 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
    }
}