我正在尝试将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.** { *; }
编辑:这里是我实际使用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() );
renderscriptTargetApi
数字降低到你实际的目标 API(或最小目标 API - 两者都尝试一下)。目前你的targetSdkVersion=22
,但是 renderscript 目标 api 设置为 23。看起来有些可疑。 - wasyl