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'
Другие вопросы по тегам