Android NDK:jnix jar not loading
问题描述:
我已经将jnix.jar文件放在libs文件夹中并添加到构建路径中。但是当我尝试使用System.loadLibrary(“jnix”)加载库时,我收到了以下崩溃。它在参考库中列出。Android NDK:jnix jar not loading
03-07 22:04:24.822: E/streamer(8746): Couldn't load jnix: findLibrary returned null
03-07 22:04:24.822: E/streamer(8746): java.lang.UnsatisfiedLinkError: Couldn't load jnix: findLibrary returned null
03-07 22:04:24.822: E/streamer(8746): at java.lang.Runtime.loadLibrary(Runtime.java:365)
03-07 22:04:24.822: E/streamer(8746): at java.lang.System.loadLibrary(System.java:535)
03-07 22:04:24.822: E/streamer(8746): at ob.android.MainActivity.<clinit>(MainActivity.java:38)
03-07 22:04:24.822: E/streamer(8746): at java.lang.Class.newInstanceImpl(Native Method)
03-07 22:04:24.822: E/streamer(8746): at java.lang.Class.newInstance(Class.java:1319)
03-07 22:04:24.822: E/streamer(8746): at android.app.Instrumentation.newActivity(Instrumentation.java:1039)
03-07 22:04:24.822: E/streamer(8746): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
03-07 22:04:24.822: E/streamer(8746): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
03-07 22:04:24.822: E/streamer(8746): at android.app.ActivityThread.access$600(ActivityThread.java:139)
03-07 22:04:24.822: E/streamer(8746): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
03-07 22:04:24.822: E/streamer(8746): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:04:24.822: E/streamer(8746): at android.os.Looper.loop(Looper.java:154)
03-07 22:04:24.822: E/streamer(8746): at android.app.ActivityThread.main(ActivityThread.java:4945)
03-07 22:04:24.822: E/streamer(8746): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:04:24.822: E/streamer(8746): at java.lang.reflect.Method.invoke(Method.java:511)
03-07 22:04:24.822: E/streamer(8746): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-07 22:04:24.822: E/streamer(8746): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-07 22:04:24.822: E/streamer(8746): at dalvik.system.NativeStart.main(Native Method)
03-07 22:04:24.822: W/dalvikvm(8746): Exception Ljava/lang/RuntimeException; thrown while initializing Lob/android/MainActivity;
03-07 22:04:24.822: W/dalvikvm(8746): Class init failed in newInstance call (Lob/android/MainActivity;)
03-07 22:04:24.822: D/AndroidRuntime(8746): Shutting down VM
03-07 22:04:24.822: W/dalvikvm(8746): threadid=1: thread exiting with uncaught exception (group=0x40abe228)
03-07 22:04:24.862: E/AndroidRuntime(8746): FATAL EXCEPTION: main
03-07 22:04:24.862: E/AndroidRuntime(8746): java.lang.ExceptionInInitializerError
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.Class.newInstanceImpl(Native Method)
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.Class.newInstance(Class.java:1319)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.Instrumentation.newActivity(Instrumentation.java:1039)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.ActivityThread.access$600(ActivityThread.java:139)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.os.Looper.loop(Looper.java:154)
03-07 22:04:24.862: E/AndroidRuntime(8746): at android.app.ActivityThread.main(ActivityThread.java:4945)
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.reflect.Method.invoke(Method.java:511)
03-07 22:04:24.862: E/AndroidRuntime(8746): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-07 22:04:24.862: E/AndroidRuntime(8746): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-07 22:04:24.862: E/AndroidRuntime(8746): at dalvik.system.NativeStart.main(Native Method)
03-07 22:04:24.862: E/AndroidRuntime(8746): Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Couldn't load jnix: findLibrary returned null
03-07 22:04:24.862: E/AndroidRuntime(8746): at ob.android.MainActivity.<clinit>(MainActivity.java:47)
03-07 22:04:24.862: E/AndroidRuntime(8746): ... 15 more
03-07 22:04:24.862: E/AndroidRuntime(8746): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jnix: findLibrary returned null
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.Runtime.loadLibrary(Runtime.java:365)
03-07 22:04:24.862: E/AndroidRuntime(8746): at java.lang.System.loadLibrary(System.java:535)
03-07 22:04:24.862: E/AndroidRuntime(8746): at ob.android.MainActivity.<clinit>(MainActivity.java:38)
03-07 22:04:24.862: E/AndroidRuntime(8746): ... 15 more
答
loadLibrary()适用于本机代码,通常编译为C或C++。 Jar是一个Java库,您可以在Android中使用这些库,但这些库将被编译为您的Java代码。请注意,Android运行不同的JVM,其运行时环境只与JRE部分兼容。
答
如上所述,System.loadLibrary()适用于本机代码。假如你的jar文件被正确添加到你的构建路径中,你应该能够像正常一样导入类。
例如,如果你想从jar文件使用类是在包com.jnixpackage和类名是JnixClass,你可以通过添加
import com.jnixpackage.JnixClass;
到顶部导入您的java文件。