ExceptionInInitializerError Android NDK引起:UnsatisfiedLinkError:findLibrary返回null

时间:2015-12-30 07:12:58

标签: android c++ android-ndk java-native-interface native

我在我的应用程序中使用NDK支持并正在加载库,如下所示:

 static {
     System.loadLibrary("sensorgraph");
 }

sensorgraph.cpp 中的所有本机方法都以包名称和JNI活动名称开头,如:

 Java_sensor_com_ms_android_knowursensor_controller_jni_SensorGraphJNI_init(JNIEnv *env, jclass type, jobject assetManager) {
        (void)type;
        AAssetManager *nativeAssetManager = AAssetManager_fromJava(env, assetManager);
        gSensorGraph.init(nativeAssetManager);
    }

我正在运行应用程序ExceptionInInitializerError

  FATAL EXCEPTION: GLThread 1042
 java.lang.ExceptionInInitializerError
 at sensor.com.ms.android.knowursensor.ui.view.AccelGLSV$2.run(AccelGLSV.java:58)
 at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1470)
 at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load sensorgraph from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.ms.android.knowursensor-41.apk,libraryPath=/data/app-lib/com.ms.android.knowursensor-41]: findLibrary returned null
 at java.lang.Runtime.loadLibrary(Runtime.java:365)
 at java.lang.System.loadLibrary(System.java:535)
 at sensor.com.ms.android.knowursensor.controller.jni.SensorGraphJNI.<clinit>(SensorGraphJNI.java:26)
 at sensor.com.ms.android.knowursensor.ui.view.AccelGLSV$2.run(AccelGLSV.java:58) 
 at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1470) 
 at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248) 

我已尝试过SO的所有答案,但没有解决方案是正确的。请帮忙。

1 个答案:

答案 0 :(得分:1)

  1. 没有合适的共享库-----您的设备是arm类型,但您构建了x86类型的共享库。
  2. 找不到合适的功能-----您可以先在NDK示例文件夹中尝试hello-jni。
  3. 安装软件包时无法复制共享库--------您可以尝试KeepSafe/ReLinker