Android - Renderscript支持库 - 加载RS jni库时出错

hit*_*ted 3 android renderscript android-support-library android-gradle-plugin

我试图将Renderscript支持库包含到我的项目中.我收到以下错误.

android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load rsjni: findLibrary returned null
Run Code Online (Sandbox Code Playgroud)

我没有使用任何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()
}
}
Run Code Online (Sandbox Code Playgroud)

特定应用

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
}
Run Code Online (Sandbox Code Playgroud)

我尝试并在stackoverflow上找到可能的解决方案的一切都无法正常工作.我也将这个包含在我的proguard配置中

#RenderScript
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class android.support.v8.renderscript.** { *; }
Run Code Online (Sandbox Code Playgroud)

编辑:这是我实际使用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 );
}
Run Code Online (Sandbox Code Playgroud)

这是确切的行

RenderScript rs = RenderScript.create( view.getContext() );
Run Code Online (Sandbox Code Playgroud)

ulc*_*ica 10

不幸的是,Renderscript不适用于该armeabi架构.好的一面是,您可以在运行时检查以查看设备的体系结构,而不是在这些设备上运行Renderscript代码:

System.getProperty("os.arch");
Run Code Online (Sandbox Code Playgroud)

android bug跟踪器上还有一个问题,它们声明:

我们只发运armeabi-v7a的支持库.这是一个已知的限制.

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

编辑:如果要在armeabi设备上实现没有Renderscript的模糊,可以通过Bitmap.createScaledBitmap设置filter为简单缩小图像true.