Android编译过程
当前目录下编译执行,相当于在android目录下执行make 本文介绍Android的编译过程及各种mk文件的导入
1.编译
a.编译步骤
- 清理
$ make clobber
- 1
- 初始化环境
$ source ./build/envetup.sh # 这个命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去
- 1
- 2
- 选择编译目标
$ lunch aosp_arm-eng
- 1
- 编译
$ make -j16
- 1
参数N表示并行编译的任务数,一般N为cpu线程数的1-2倍.例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 make -j16 到 make -j32 之间的命令
b.编译结果及目录
- out/ :所有的编译产物都将位于out目录下,该目录下主要有以下几个子目录
- -out/host/ :该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等
- out/target/common/ :该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库。
- out/target/product/<product_name>/ :包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。其中,<product_name>是具体目标设备的名称。
c.编译生成的主要镜像文件
ramdisk.img
- 是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件;
- 在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程
boot.img
- 由boot header、kernel和ramdisk三部分打包在一起组成
- 启动时,由bootloader解析后引导kernel启动
system.img
- 被挂载到/system目录下
- 包含了 Android OS 的系统文件,库,可执行文件以及预置的应用程序
userdata.img
- 被挂载到/data目录下
- 包含了应用程序相关的数据以及和用户相关的数据
- 可以预制一些可删除的应用软件
2.编译过程详解
a.source 过程
source命令:在当前bash环境下 读取并执行 FileName中的命令;$ source ./build/envsetup.sh
读取envsetup.sh 中的函数,并执行脚本 。
-
加载的函数有
函数 说明 m 当前目录下编译执行,相当于在android目录下执行make mm 执行当前目录下最近的make文件 mmm 在android目录下,执行某个文件夹下的make文件 mma 编译当前目录下所有的模块和他们的依赖 make update-api 更新 API。在 framework API 改动之后,需要首先执行该命令来更新 API printconfig 打印配置 lunch 配置lunch croot 回到根目录 cgrep 在所有 C/C++ 文件上执行 grep jgrep 在所有 Java 文件上执行 grep resgrep 在所有 res/*.xml 文件上执行 grep -
执行脚本:1.执行add_lunch_combo xxxxx 2.检查shell是否为bash,3.查找 vendorsetup.sh,并 include ;4.输出所有的include文件 5,执行addcompletions() 检查bash版本;
b. lunch过程
lunch <product_name>-<build_variant>
,选择平台编译选项
c. Make 过程
makefile的相关语法请参考Makefile语法一文或其他书籍。
入口文件是源码树根目录下名称为Makefile
的文件,当在源代码根目录上调用 make
命令时,make
命令首先将读取该文件。Makefile
文件的内容只有一行:include build/core/main.mk
。作用仅为包含 build/core/main.mk
文件。在 main.mk
文件中又会去包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。
比较重要的make文件介绍:
devices/xxxxx/BoardConfig.mk
,AndroidBoard.mk
BoardConfig.mk
设备硬件配置及目标架构配置文件.AndroidBoard.mk
设备属性和键值映射配置文件.TARGET_KERNEL_CONFIG/KERNEL_DEFCONFIG
:定义默认kernelconfig文件;-
文章来源: xuesong.blog.csdn.net,作者:内核笔记,版权归原作者所有,如需转载,请联系作者。
原文链接:xuesong.blog.csdn.net/article/details/81912531
- 点赞
- 收藏
- 关注作者
评论(0)