Android NDK种的动态库和静态库就是linux下的动态库和静态库,因为NDK的开发可以理解从基于Linux的开发。

在平时工作中我们经常把一些常用的函数或者功能封装为一个个库供给别人使用,java开发我们可以封装为jar包提供

给别人用,安卓平台后来可以打包成aar包,同样的,C/C++中我们封装的功能或者函数可以通过静态库或者动态库

的方式提供给别人使用。

Linux平台静态库以.a结尾,而动态库以.so结尾。

要分析链接库首先要分析交叉编译

2.1 什么是交叉编译?

交叉编译就是在A平台编译出可以在B平台执行的文件,对于我们安卓开发者来说交叉编译就是在window或者mac或

者linux系统上编译出可在安卓系统上运行的可执行文件,什么时候需要用到交叉编译呢?音视频开发基本都会用到

ffffmpeg,opengl es等三方库,这时我们就需要在window或者mac或者linux系统上编译出可在安卓系统执行的文

件,这里可编译出静态库或者动态库使用,这时候就会用到交叉编译。

交叉编译的目的很清楚,就是编译出除了自己平台意外其他平台可以用的库的过程。那么在Android 平台的代码,

由于Android平台是基于linux,因此很多Android 中可以运行的库就是在linux中编译的,或者是在mac上面编

译,而在windows上面编译就比较难了。那么到底什么是动态库和静态库呢?

2.2 动态库和静态库(共享库)

2.2.1 静态库

这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标

代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译

进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

2.2.2 动态库

这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序

执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整

合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并

不影响你的程序,所以动态函数库的升级比较方便

静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大;动态库(共享库)的代码在可执行程序运行时才载

入内存,在编译过程中仅简单的引用,因此代码体积比较小。

2.3 Android如何配置cmakelist.txt 配置编译动态库和静态库呢?

add_library(jinInterface SHARED library.c library.h)// SHARED 表示是动态库 add_library(jinInterface STATIC library.c library.h)// STATIC 表示是静态库 ADD_LIBRARY(...) 语法:ADD_LIBRARY(libname [SHARED|STATIC] ) 上面的表达式等同于: set(LIB_SRC library.c library.h) add_library(jinInterface SHARED ${LIB_SRC})

Android JNI开发笔记二:动态库和静态库相关推荐

  1. JNI开发笔记(二)--创建JNI基础工程并运行

    创建JNI基础工程并运行 引 1. 创建JNI工程 2. 添加虚拟手机设备 3. 运行JNI基础工程 引 JNI开发笔记(一)–Android Studio安装与环境搭建 1. 创建JNI工程 And ...

  2. Android JNI开发系列(二)HelloWorld

    2019独角兽企业重金招聘Python工程师标准>>> 入门HelloWorld 新建项目 Configure your new project部分选中 Include C++ Su ...

  3. JNI开发笔记(七)--aar库的生成和调用

    aar库的生成和调用 引 前言 1. 新建一个空工程 2. 新建一个Module 3. 移植JNI工程到Module中 4. 生成aar库与so库 5. 在另一个工程中调用aar库 引 JNI开发笔记 ...

  4. JNI开发笔记(六)--一种更规范的so库生成方法

    一种更规范的JNI工程写法 引 前言 1. MainActivity中的两个重要的语句 2. 建立Util类来替代MainActivity 3. 在MainActivity中验证JNI工程并生成so库 ...

  5. JNI开发笔记(四)--实现一个简单的JNI工程并生成so库

    实现一个简单的JNI工程并生成so库 引 前言 1. 编写C/h文件并添加到工程 2. 修改CmakeLists.txt文件 3. 编写native-lib.cpp文件 4. 在MainActivit ...

  6. JNI开发笔记(八)--Java读取txt文件进行JNI测试

    Java读取txt文件进行JNI测试 引 前言 1. 新建assets文件夹 2. 载入测试文件 3. 建立文件读取方法 4. 在MainActivity中读取文件数据 引 JNI开发笔记(一)–An ...

  7. JNI开发笔记(五)--JNI语法总结

    JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...

  8. JNI开发笔记(三)--JNI工程的框架分析

    JNI工程的框架分析 引 1. JNI工程的组成部分 2. 各个部分之间的关系 引 JNI开发笔记(一)–Android Studio安装与环境搭建 JNI开发笔记(二)–创建JNI基础工程并运行 1 ...

  9. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  10. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

最新文章

  1. [文摘20070930]人际关系,你有五十五招
  2. 特征匹配--GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence
  3. Mariadb修改root密码
  4. yml配置文件中有特殊字符解决方案
  5. 潭州Java中级班(day_05)
  6. TOP命令及参数解析
  7. idea mac 查找文件快捷键_idea for mac 最全快捷键整理
  8. vsftpd 可以登录,无法写入和上传
  9. 社会我张哥,人狠话不多。
  10. java基础菜鸟教程_java基础菜鸟教程大全,java入门
  11. Vue Cli 3代理配置
  12. 海思SVP简介(sample)
  13. adobe mac怎么卸载 ?彻底卸载Adobe Mac软件的正确做法
  14. Unity获取IOS端相机权限的状态
  15. 王大锤:看到金仓的数据恢复方案,我彻底服了
  16. AIS船舶自动识别系统原理
  17. 逆流而上:阿里巴巴技术成长之路
  18. ThinkPHP 模板变量输出
  19. (二)机器学习实践Python3-决策树ID3的一个简单案例
  20. 底物的分子描述符计算及 CYP450 酶-底物选择性技术研究

热门文章

  1. realme v11密码解锁_真我V11忘记密码怎么刷机删除跳过激活账号使用
  2. java家庭记账管理系统_基于ssh/jsp/java/asp.net/php的家庭记账管理系统
  3. Exploring Architectural Ingredients of Adversarially Robust Deep Neural Networks
  4. Struts1 和 Struts2
  5. 房产中介管理系统php,房屋中介管理系统简易源代码.doc
  6. 数字图像处理之matlab大作业:美图秀秀
  7. 机房资产管理系统linux,资产管理平台设备技术指标.doc
  8. 阿里云mysql读写分离实现_MySQL-Proxy实现MySQL读写分离
  9. vue插件集合17:vue获取国家以及地区的方法
  10. jovi语音助手安装包_jovi语音助手下载