Renderscript是否与同一项目中的NDK库不兼容?

时间:2013-11-23 16:51:07

标签: android eclipse android-ndk renderscript

我在创建一个使用Renderscript和NDK生成的本机代码的Android应用时遇到问题。

基本上,我使用NDK工具生成一个名为sprstr_native.so的库。我设法通过Java代码调用他们的C ++函数没有问题。然后我需要一些Renderscript功能(特别是ScriptIntrinsicYuvToRGB)所以我在Eclipse项目中添加了对相对支持库renderscript-v8.jar的引用,以及项目属性文件中的这一行:

renderscript.support.mode=true

现在出现问题:Android无法再识别我的sprstr_native,并且在调用代码时应用程序崩溃了:

System.loadLibrary("sprstr_native");

这是堆栈:

11-23 17:46:54.450: E/AndroidRuntime(3901): FATAL EXCEPTION: main
11-23 17:46:54.450: E/AndroidRuntime(3901): java.lang.ExceptionInInitializerError
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.Class.newInstanceImpl(Native Method)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.Class.newInstance(Class.java:1409)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.os.Looper.loop(Looper.java:130)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at android.app.ActivityThread.main(ActivityThread.java:3683)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.reflect.Method.invokeNative(Native Method)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.reflect.Method.invoke(Method.java:507)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at dalvik.system.NativeStart.main(Native Method)
11-23 17:46:54.450: E/AndroidRuntime(3901): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load sprstr_native: findLibrary returned null
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.Runtime.loadLibrary(Runtime.java:429)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at java.lang.System.loadLibrary(System.java:554)
11-23 17:46:54.450: E/AndroidRuntime(3901):     at com.lag.proj.MainActivity.<clinit>(MainActivity.java:18)
11-23 17:46:54.450: E/AndroidRuntime(3901):     ... 15 more

奇怪的是,如果删除对Renderscript的所有引用,本机lib将再次运行! 请不要告诉我Renderscript和NDK代码之间存在不兼容性!

1 个答案:

答案 0 :(得分:0)

我可能已经解决了这个问题,但并非没有其他错误(参见Getting different errors for different platforms using Renderscript Support Library)。顺便说一下,库加载阶段应该通过在Application.mk文件中添加这一行来解决:

APP_ABI := all

这让NDK可以为所有支持的体系结构编译objs。