安卓之JNI 和 NDK编程(三)so库生成之目录文件简单分析

文章目录

一、前言

二、下面我们做一下简单的自我排除测试

1、把.c文件去掉,报错

2、把.mk文件去掉,不报错

3、.h文件去掉,不报错

4、去掉obj目录以及so文件,不报错

5、去掉libs目录下的so文件,报错

6、小结


一、前言

上篇文章我们简单讲了so库的生成,想了解的可参见我的上篇博客:Android开发之JNI 和 NDK编程(二)so库的生成

如下图是so库生成时的目录结构

安卓之JNI 和 NDK编程(三)so库生成之目录文件简单分析_第1张图片

二、下面我们做一下简单的自我排除测试

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.(MainActivity.java:9)

定位到第9行

安卓之JNI 和 NDK编程(三)so库生成之目录文件简单分析_第2张图片

2、把.mk文件去掉,不报错

 

Android.mk去掉,不报错

3、.h文件去掉,不报错

com_ndk_test_JniClient.h文件去掉,也不报错

4、去掉obj目录以及so文件,不报错

去掉如下图,也不报错

安卓之JNI 和 NDK编程(三)so库生成之目录文件简单分析_第3张图片

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.(MainActivity.java:9)

定位到第9行

安卓之JNI 和 NDK编程(三)so库生成之目录文件简单分析_第4张图片

 

6、小结

(1)当so文件生成以后,可以删除去掉.mk、.h文件

(2)文件说明

  .c文件:懂c、c++的开发人员写。这里是写的一些方法

  .mk文件:只要指定路径、名称

  .h文件:java的.class文件,用命令行编译生成

  当这三个文件都集齐了。刷新一下工程,将自动生成so库libs目录或obj目录下可见

 

  如果要更深入了解so库的生成,大家肯定要对相关文件更加了解,后面会陆续更新、关注我敬请期待!

你可能感兴趣的:(#,JNI,和,NDK编程)