Android底层驱动开发四
目录
补充:http://t.csdn.cn/ktjxzhttp://t.csdn.cn/ktjxz
一、Android源码编译
编译原理
编译: 将高级语言翻译成汇编语言或机器语言的过程,编译的本质就是一种翻译的过程。
高级语言(.c/.java)——编译——> 汇编语言(asm)——汇编——> 机器语言(二进制)——执行——> 硬件平台
机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言是由0和1组成的二进制数。
编译流程实例:
hello.c —预处理器—> hello.i —编译器cc1—> hello.s —汇编器—> hello.o —链接器—> hello ——> 可执行文件
编译组成
1、预处理阶段
主要是处理源文件中以“#”开头的预编译指令。
- 宏定义指令,删除#define并展开宏
- 条件编译指令,处理所有条件预编译指令,如#if, #ifdef, #endif
- 头文件包含指令,插入头文件到“#include”处
- 删除所有注释
- 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
- 保留所有#pragma编译指令
预处理阶段会把头文件中的变量、函数都包含进来,所以hello.i文件非常大。
2、编译阶段
将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。
3、汇编阶段
利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。
4、链接阶段
将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。
原生Android编译
在Linux系统中,我们可以通过make命令来编译代码。执行make命令默认会在当前目录找到一个Makefile文件和Kconfig文件,然后根据Makefile文件中的指令来对代码进行编译。也就是说make命令执行的是Makefile文件中的指令,Makefile文件中的指令可以是编译命令(例如gcc),也可以是其它命令。
在Android系统中,随着源代码越来越复杂,光一个Makefile在性能上已经满足不了,因此在该机制之上新增了自己的Android.mk和Android.bp方式,为了优雅的与Makefile兼容,soong就此诞生了。
1、谷歌给出了Android的原生编译流程,在Android根目录下执行:
(1)source build/envsetup.sh
作用:将envsetup.sh里的所有用到的命令加载到环境变量里去,设置android的编译环境。注意,该命令只在当前终端生效,如果未生效那么lunch和mm等命令是无法使用的。
(2)lunch
lunch后面的选项以“产品名-编译类型”的形式命名。编译类型有以下几种:
- eng:工程机
- user:最终用户机
- userdebug:调试测试机
- tests:测试机
作用:显示菜单让我们选择编译平台(分支)以及平台相关的编译选项,也可以在lunch后面直接跟上参数。
(3)make -j4 showcommands dist
- -j4,开启4个线程
- Showcommands,显示编译过程中执行的命令
- dist,将编译后产生的发布文件拷贝到out/dist目录中
作用:make命令其实直接执行了当前目录下的Makefile脚本,编译整个android系统。
make编译命令:
命令 | 说明 |
make clean | 执行清理,删除此配置的所有输出和中间文件,等同于:rm -rf out/ |
make all | 编译所有内容,不管当前产品的定义中是否会包含 |
make sdk | 编译出 Android 的 SDK(软件开发工具包) |
make clean-sdk | 清理 SDK 的编译产物 |
make update-api | 更新 API。在 framework API 改动之后,需要首先执行该命令来更新 API,公开的 API 记录在 frameworks/base/api 目录下 |
make snod | 从已经编译出的包快速重建系统镜像 |
make libandroid_runtime | 编译所有 JNI framework 内容 |
make framework | 编译所有 Java framework 内容 |
make services | 编译系统服务和相关内容 |
make <local_target> | 编译一个指定的模块,local_target 为模块的名称 |
make clean-<local_target> | 清理一个指定模块的编译结果 |
make dump-products | 显示所有产品的编译配置信息,例如:产品名,产品支持的地区语言,产品中会包含的模块等信息 |
make help | 帮助信息,显示主要的 make 目标 |
Android系统的模块编译:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgakecb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13