【问题标题】:Android - Renderscript Support Library - Error loading RS jni libraryAndroid - 渲染脚本支持库 - 加载 RS jni 库时出错
【发布时间】:2015-09-25 16:37:50
【问题描述】:

我正在尝试将 Renderscript 支持库包含到我的项目中。我收到以下错误。

android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load rsjni: findLibrary returned null

我没有使用任何 Renderscript jar 文件,我正在尝试通过 Gradle 使用它。

这是我的 Gradle.build 文件

顶级

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.2.3'
}
}

ext {
compileSdkVersion="Google Inc.:Google APIs:22"
buildToolsVersion="23.0.1"
playStoreMinSdkVersion=16
amazonStoreMinSdkVersion=8
targetSdkVersion=22
versionCode=20
versionName="3.3.0"
runProguard=true
zipAlign=true
proguardConfiguration='../proguard.config'
}

allprojects {
repositories {
    jcenter()
}
}

特定应用

defaultConfig {
    applicationId "**REMOVED**"
    //noinspection GroovyAssignabilityCheck
    targetSdkVersion rootProject.ext.targetSdkVersion
    //noinspection GroovyAssignabilityCheck
    versionCode rootProject.ext.versionCode
    //noinspection GroovyAssignabilityCheck
    versionName rootProject.ext.versionName

    renderscriptTargetApi 23
    renderscriptSupportModeEnabled true
}

我在 stackoverflow 上尝试并找到的所有可能的解决方案都不起作用。我的 proguard 配置中也包含了这个

#RenderScript
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class android.support.v8.renderscript.** { *; }

编辑:这是我实际使用渲染脚本的实现,这也是它在调用时导致我的应用程序崩溃的地方。

public static BitmapDrawable Blur ( View view ){

    Bitmap image = GetScreenshot( view );

    int width = Math.round( image.getWidth() * DEFAULT_BITMAP_SCALE );
    int height = Math.round( image.getHeight() * DEFAULT_BITMAP_SCALE );

    Bitmap inputBitmap = Bitmap.createScaledBitmap( image, width, height, false );

    Bitmap outputBitmap = Bitmap.createBitmap( inputBitmap );

    RenderScript rs = RenderScript.create( view.getContext() );
    ScriptIntrinsicBlur intrinsicBlur = ScriptIntrinsicBlur.create( rs, Element.U8_4(rs) );

    Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
    Allocation tmpOut = Allocation.createFromBitmap( rs, outputBitmap );

    intrinsicBlur.setRadius( DEFAULT_BLUR_RADIUS );
    intrinsicBlur.setInput( tmpIn );
    intrinsicBlur.forEach( tmpOut );

    tmpOut.copyTo( outputBitmap );

    inputBitmap.recycle();
    rs.destroy();

    return new BitmapDrawable( outputBitmap );
}

这是确切的行

RenderScript rs = RenderScript.create( view.getContext() );

【问题讨论】:

  • 您应该发布更多与实际问题相关的代码:例如,您在何处以及如何加载 RS 库。此外,您的项目配置(定义 RS 库的位置、其来源等)也可能有所帮助
  • 您是在设备上还是在模拟器上运行应用程序?
  • 这是在带有 Android 2.3.4 的物理 Droid 3 上。它适用于运行 5.0 的设备。我认为那是因为它没有使用支持库?
  • 您可能需要将 renderscriptTargetApi 数字减少到您的实际目标 API(或最小目标 API - 尝试两者)。目前你有targetSdkVersion=22,但是renderscript target api设置为23。看起来很可疑
  • 我将目标 API 固定为 22 级以匹配我的项目目标 API。似乎是同一个问题。

标签: android android-gradle-plugin android-support-library renderscript


【解决方案1】:

很遗憾,Renderscript 不适用于 armeabi 架构。好的一面是您可以在运行时检查设备的架构,而不是在这些设备上运行 Renderscript 代码:

System.getProperty("os.arch");

在 android 错误跟踪器上还存在一个问题,他们指出:

我们只提供 armeabi-v7a 的支持库。这是一个已知的限制。

https://code.google.com/p/android/issues/detail?id=68520

编辑:如果您想在armeabi 设备上实现没有 Renderscript 的模糊,您可以简单地使用Bitmap.createScaledBitmap 将图像缩小,将filter 设置为true

【讨论】:

    【解决方案2】:

    一般来说,你可以通过解压你的apk文件,然后检查lib文件夹来解决这个问题。 lib 文件夹包含按不同系统架构(arm64-v8a、armeabi、armeabi-v7a、mips、x86 等)分组的原生库。

    有时某些库仅适用于某些系统架构而不是所有架构,因此您需要先检查系统架构,然后再使用此本机库中的任何代码,例如 Renderscript 支持库。

    对于 Renderscript 异常,你可以这样做

    ArrayList<String> abis = new ArrayList<>();
    
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
       abis.add(Build.CPU_ABI);
     } else {
        for (String abi : Build.SUPPORTED_ABIS) {
            abis.add(abi);
        }
     }
    
     if (abis.contains("x86") || abis.contains("mips") || abis.contains("armeabi-v7a")) {
       // do Renderscript stuff
     }
    

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多