Renderscript 破坏了 AndroidX?
Renderscript broken with AndroidX?
自从我迁移到 androidx 后,我无法制作 Renderscript 运行。我收到以下异常:
2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:
java_vm_ext.cc:504] JNI DETECTED ERROR IN APPLICATION: JNI
NewGlobalRef called with pending exception
java.lang.ClassNotFoundException: Didn't find class
"android.support.v8.renderscript.RenderScript" on path:
DexPathList[[zip file
"/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] at
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] at
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] at
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] at
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] at 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] at 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] at 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] at 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] at
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] at
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] at
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] at
androidx.renderscript.RenderScript
androidx.renderscript.RenderScript.create(android.content.Context)
(RenderScript.java:1512)
我在 gradle 中有常用条目:
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
我还需要更改什么吗?
我有同样的问题,我切换到不支持的 renderscript 版本
在项目中gradle
renderscriptTargetApi 17
renderscriptSupportModeEnabled false
并在 class 中使用 renderscript
import android.renderscript.RenderScript
而不是
import androidx.renderscript.RenderScript
它为我完成了工作,但我不喜欢这个解决方案,待完成
标记的答案确实使它起作用,但正如@Zee 提到的,non-support 常规渲染脚本似乎删除了 64 位兼容性。现在,当我尝试发布我的应用程序时,我从 Google Play 控制台收到了一条警告消息。所以我想如果我们还在使用 renderscript,我们将不得不继续使用支持版本,而不是暂时迁移到 AndroidX。
构建工具(确切地说是预构建 librsjni_androidx.so)存在问题,现已在版本 29.0.2 中修复。
我已经通过将编译 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;
我遇到了同样的问题。唯一对我有用的东西(在尝试了其中一些之后)是更新到最新的构建工具版本 (29.0.3),我不确定这些问题最初发布时是否存在:
buildToolsVersion '29.0.3'
我通过添加 proguard 来修复:
我得到了 google 支持者 here
的答复
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}
自从我迁移到 androidx 后,我无法制作 Renderscript 运行。我收到以下异常:
2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64: java_vm_ext.cc:504] JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception java.lang.ClassNotFoundException: Didn't find class "android.support.v8.renderscript.RenderScript" on path: DexPathList[[zip file "/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] at 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] at 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] at 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] at 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] at 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] at 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] at 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] at 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] at 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] at 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] at 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] at androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context) (RenderScript.java:1512)
我在 gradle 中有常用条目:
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
我还需要更改什么吗?
我有同样的问题,我切换到不支持的 renderscript 版本
在项目中gradle
renderscriptTargetApi 17
renderscriptSupportModeEnabled false
并在 class 中使用 renderscript
import android.renderscript.RenderScript
而不是
import androidx.renderscript.RenderScript
它为我完成了工作,但我不喜欢这个解决方案,待完成
标记的答案确实使它起作用,但正如@Zee 提到的,non-support 常规渲染脚本似乎删除了 64 位兼容性。现在,当我尝试发布我的应用程序时,我从 Google Play 控制台收到了一条警告消息。所以我想如果我们还在使用 renderscript,我们将不得不继续使用支持版本,而不是暂时迁移到 AndroidX。
构建工具(确切地说是预构建 librsjni_androidx.so)存在问题,现已在版本 29.0.2 中修复。
我已经通过将编译 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;
我遇到了同样的问题。唯一对我有用的东西(在尝试了其中一些之后)是更新到最新的构建工具版本 (29.0.3),我不确定这些问题最初发布时是否存在:
buildToolsVersion '29.0.3'
我通过添加 proguard 来修复: 我得到了 google 支持者 here
的答复-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}