这次项目中的大部分代码是写在NDK层的,并通过jni相关函数封装成一个个jni函数接口。然后在java层,通过以下这样一个NDKController类封装所有jni函数接口,供其它java代码直接调用。
public class NDKController{
static{
System.loadLibrary("libnameA");
System.loadLibrary("libnameB");
System.loadLibrary("libnameC");
System.loadLibrary("NdkLibName"); //上述libnameA,libnameB, libnameC库都是被NdkLibName库用到的更底层的库
System.loadLibrary("JniLibName");
}
... ...
... ...
... ...
public native long NdkFunc1( ..., ..., ... );
public native long NdkFunc2( ..., ..., ... );
public native long NdkFunc3( ..., ..., ... );
... ...

本文记录了一次在Android项目中遇到的由于System.loadLibrary加载so库导致的JNI_OnLoad返回错误版本并引发应用崩溃的问题。通过排查,发现原因在于加载的库未在代码中实际使用,导致gDvmJni.jniVm返回-1,最终程序崩溃。解决方案是删除未使用的库加载和相关依赖,问题得到解决。这是一个关于Android NDK开发中需要注意的细节问题。
最低0.47元/天 解锁文章
7352

被折叠的 条评论
为什么被折叠?



