【问题标题】:ExceptionInInitializerError Android NDK Caused by: UnsatisfiedLinkError: findLibrary returned nullExceptionInInitializerError Android NDK 引起:UnsatisfiedLinkError: findLibrary returned null
【发布时间】:2015-12-30 07:12:57
【问题描述】:

我在我的应用程序中使用 NDK 支持,并且正在加载这样的库:

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

sensorgraph.cpp 中的所有原生方法均以包名和 JNI Activity 名称开头,例如:

 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 的所有答案,但没有一个解决方案是正确的。请帮忙。

【问题讨论】:

  • JVM 尝试加载新类时抛出 ExceptionInInitializerError。在类加载过程中,正在评估所有静态变量和静态初始化程序。静态初始化器是用大括号括起来的块,没有任何名称和返回类型,除了关键字 static。developer.android.com/reference/java/lang/…
  • @AmarbirSingh 谢谢,但是是什么导致了这里的异常?
  • 我认为这是因为您使用的库“findLibrary returned null”

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


【解决方案1】:
  1. 没有合适的共享库-----你的设备是 arm 类型的,但是你构建的是 x86 类型的共享库。
  2. 没有找到合适的函数-----你可以先在 NDK 示例文件夹中尝试 hello-jni。
  3. 安装包时复制共享库失败--------你可以试试KeepSafe/ReLinker

【讨论】:

  • 谢谢,我正在使用 CPP 文件 (sensorgraph.cpp),我已将它放在 jni 文件夹中。仍然无法编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多