【发布时间】: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