Renderscript не работает с 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.ClassNotFoundException: найти класс "android.support.v8.renderscript.RenderScript" по пути: DexPathList[[zip-файл "/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk"],nativeLibraryDirectories=[/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/lib/arm64, /data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk!/v8/64/lib/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. Класс 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] в 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
Что-нибудь еще, что я должен изменить?
8 ответов
У меня была та же проблема, я переключился на не поддерживающую версию Renderscript
В проекте Gradle
renderscriptTargetApi 17
renderscriptSupportModeEnabled false
И в классе, который использует Renderscript
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
В моем файле модуля 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;
Мне удалось решить проблему, изменив версию buildToolsVersion
к 29.0.2
а также renderscriptTargetApi
к 29
:
android {
// ...
buildToolsVersion '29.0.2'
defaultConfig {
// ...
renderscriptTargetApi 29
renderscriptSupportModeEnabled true
}
// ...
}
Я исправил, добавив прогард: я получил ответ от сторонника Google здесь
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# RenderScript to be safe on "native callback" side
-keep class androidx.renderscript.** { *; }
Отмеченный ответ действительно заставляет его работать, но, как упоминал @Zee, кажется, что неподдерживаемый обычный скрипт рендеринга удаляет 64-битную совместимость. Теперь я получил предупреждающее сообщение от консоли Google Play об этом при попытке опубликовать свое приложение. Поэтому я думаю, что если мы все еще будем использовать Renderscript, нам придется придерживаться версии поддержки и пока не переходить на AndroidX.
android {
//...
defaultConfig {
//...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}
У меня такая же проблема. Единственное, что сработало для меня (после попытки некоторых из них), это обновление до последней версии инструментов сборки (29.0.3), которая, я не уверен, существовала, когда этот вопрос был первоначально опубликован:
buildToolsVersion '29.0.3'