文章目录
一、前言
上篇文章我们简单讲了so库的生成,想了解的可参见我的上篇博客:Android开发之JNI 和 NDK编程(二)so库的生成
如下图是so库生成时的目录结构
二、下面我们做一下简单的自我排除测试
1、把.c文件去掉,报错
com_ndk_test_JniClient.c文件去掉,报错
java.lang.UnsatisfiedLinkError: Couldn't load TestNdk from loader dalvik.system.PathClassLoader
[DexPathList[[zip file "/data/app/com.ndk.test-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.ndk.test-1, /system/lib]]]: findLibrary returned null
at com.ndk.test.MainActivity.<clinit>(MainActivity.java:9)
定位到第9行
2、把.mk文件去掉,不报错
Android.mk去掉,不报错
3、.h文件去掉,不报错
com_ndk_test_JniClient.h文件去掉,也不报错
4、去掉obj目录以及so文件,不报错
去掉如下图,也不报错
5、去掉libs目录下的so文件,报错
java.lang.UnsatisfiedLinkError: Couldn't load TestNdk from loader dalvik.system.PathClassLoader
[DexPathList[[zip file "/data/app/com.ndk.test-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.ndk.test-1, /system/lib]]]: findLibrary returned null
at com.ndk.test.MainActivity.<clinit>(MainActivity.java:9)
定位到第9行
6、小结
(1)当so文件生成以后,可以删除去掉.mk、.h文件
(2)文件说明
.c文件:懂c、c++的开发人员写。这里是写的一些方法
.mk文件:只要指定路径、名称
.h文件:java的.class文件,用命令行编译生成
当这三个文件都集齐了。刷新一下工程,将自动生成so库,libs目录或obj目录下可见
如果要更深入了解so库的生成,大家肯定要对相关文件更加了解,后面会陆续更新、关注我敬请期待!