库的概念
在Window平台和Linux平台下都大量存在着库。Android中也存在库,库顾名思义,指的是一个容器文件,里面装的是函数,由于windows和linux的平台不同 (主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。
库存在的意义
库是别人写好的现有的,成熟的,可以复用的代码,和jar包是一个道理
库的种类:动态库和静态库
动态库: .so/.dll (linux/windows) ,文件比较小,速度相对慢
静态库: .a./.lib (linux/windows) ,文件比较大,速度相对快
.so 类似于 jar包
.a 类似于 aar
动态库和静态库的区别
- 静态库文件比较大,动态库比较小
- 静态库需要再编译时,被链接在目标代码中,动态库在运行时才会被加载到目标代码中
- 动态库类似于jar包,打包是不需要重新进行编译
- 静态库类似于Android中的Module、aar,一旦打包APK需要重新进行编译
载入时刻不同:
- 静态库在程序编译时会链接到目标代码中,程序运行时不再需要静态库,因此体积较大。而且每次编译都需要载入静态代码都会因此内存开销大。
- 动态库在程序编译时不会被链接到目标代码中,而是在程序运行时才被载入,程序运行时需要动态库存在,因此体积较小。而且系统只载入一次动态库,不同程序可以得到的内存中相同的动态库副本,因此内存开销小。