【发布时间】: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