[英]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 在應用程序中檢測到錯誤:JNI NewGlobalRef 被調用並帶有未決異常 java.lang.ClassNotFound在路徑上找到類“android.support.v8.renderscript.RenderScript”: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] 在 java.lang.Class dalexvik.ClassLoader.BaseD .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.類 java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379) 2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote6 4: 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] 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] 在 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] at androidx.androidxRenderScript。 .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
還有什么我需要改變的嗎?
我遇到了同樣的問題,我切換到了非支持版本的渲染腳本
在項目gradle中
renderscriptTargetApi 17
renderscriptSupportModeEnabled false
在使用渲染腳本的類中
import android.renderscript.RenderScript
代替
import androidx.renderscript.RenderScript
它為我完成了工作,但我不喜歡這個解決方案,待完成
構建工具(確切地說是預構建的 librsjni_androidx.so)存在問題,現在已在29.0.2版中修復。
我已經通過將 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;
標記的答案確實使它起作用,但正如@Zee 所提到的,似乎不支持的常規渲染腳本刪除了 64 位兼容性。 現在,當我嘗試發布我的應用程序時,我從 Google Play 控制台收到了一條警告消息。 所以我想如果我們還在使用 renderscript,我們將不得不繼續使用支持版本,暫時不要遷移到 AndroidX。
我通過添加 proguard 來修復:我從谷歌支持者那里得到了答案
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
我有同樣的問題。 唯一對我有用的(在嘗試了其中的一些之后)是更新到最新的構建工具版本(29.0.3),我不確定這些問題最初發布時是否存在:
buildToolsVersion '29.0.3'
android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.