1.2【静态库】的特点: (.a)
①静态库对函数库的链接是在编译期完成的。执行期间代码装载速度快。
②使可执行文件变大,浪费空间和资源(占空间)。
③对程序的更新、部署与发布不方便,需要全量更新。如果 某一个静态库更新了,所有使用它的应用④程序都需要重新编译、发布给用户。
1.1 简介(.so)
在程序编译时并不会链接到目标代码中,而是在运行时才被载入。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该共享库的实例,避免了空间浪费问题。同时也解决了静态库对程序的更新的依赖,用户只需更新动态库即可。
1.2 动态库分类(根据动态库的载入时间 load time )
1.动态链接库: 在启动 app 时立刻将动态库进行加载 (随程序启动而启动)
2.动态加载库: 当需要的时候再使用 dlopen 等通过代码或者命令的方式来加载 (在程序启动之后)
以上行为是由动态链接器 (Dynamic linker, 简称 dyld) 来完成
1.3【动态库】的特点:
①动态库把对一些库函数的链接载入推迟到程序运行时期(占时间)。
②可以实现进程之间的资源共享。(因此动态库也称为共享库)
③将一些程序升级变得简单,不需要重新编译,属于增量更新。
动态库和静态库都的实现文件中都没有main函数,一般是。h和。c,编译程。a
或者。so,然后调用方去在main中使用他们的 具体函数。:参考:
jni:Android Studio最新CMake使用教程(一):创建和了解Native工程_android studio native c++教程-CSDN博客S
shared是动态库。static是静态库
可以看到MainActivity里首先加载了我们在CMakeLists里定义的动态库 ,然后声明了一个native的方法stringFromJNI(),这个方法在onCreate里被调用。正是这个方法实现了Java代码调用C++/C代码。
打开native-lib.cpp,在这个源文件里,定义了一个与MainActivity里native方法对应的Jni方法:
调用外部so:Android Studio最新CMake使用教程(二): 生成共享库.so文件并在其他项目中引用_makejar生成的.so在哪里-CSDN博客
Jni里返回值类型与对应的java端接收的类型要一致,一般是基础数据类型前面加上j