Android系统编译说明(AOSP)
Android系统编译说明(AOSP)
前面我们已经去编译了android系统,只是告诉了同学们步骤,但是没有给大家说明一下每个步骤里的参数是什么意思。
相关文章
使用虚拟机VM,Ubuntu 18.04.2 LTS编译android系统7.1遇到的问题
接下来我们回顾一下之前的编译过程,并再了解五相关的命令。
source build/envsetup.sh
source build/envsetup.sh
这个指令什么意思呢?
souce envsetup.sh就是把envsetup.sh里的命令载到当前的bash中,可以直接调用里面的命令。
env就是环境的意思,setup可以理解为设置,这个文件加载可以理解为编译准备
比如说里面有launch指令,有mm指令,有make指令....
如果你没有source的话,这些指令就不有。
加载各产品进来
我们可以看到,这里面我们source以后,加载了这么多产品进来
有华为的,有google的,有htc的,有摩托罗拉的...
这些产品呢,都在device下,也就是设备。
一般来说:device/公司名称/产品型号/vendorsetup.sh
有了这些知识,我们后面是不是可以定制自己公司的系统了!
后面我们就着手去添加一个属于我们的产品。
lunch 产品名
lunch 这个命令是从哪里来的呢?
其实谅是从我们前面的source 的 envsetup.sh里来的
相关的命令我们可以看这里
也可以lunch回车
列出来的产品就前面我们加载的产品
lunch后如图:
这些版本从哪 里来的呢?
就是从我们前面载入的各种device里定义的
比如说我们第一个/device/asus/fugu/vendorsetup.sh
里定义了这些内容
add_lunch_combo full_fugu-userdebug
add_lunch_combo aosp_fugu-userdebug
就是添加full_fugu-userdebug和aosp_fugu-userdebug到列表里,lunch的时候会遍历
知道 这些,我们后面自定义自己的产品,就知道这个步骤的作用了。
make -j40
make -j16
make 就是构建,可以理解根据make file编译内容了。-j是job,推荐使用cpu的线程数*4,比如说我的CPU是16核,32线程那么我就可以使用make -j128 全功率去编译。
在android源码里,make file,也就是make文件包括三大分
- 在build/core下的mk
- 在device目录下的各种mk
- 以及各app/jar/aar模块单独的mk
另外,除了make以外,还要留意一下mm命令和mmm命令,这个命令也挺好用的。
我们可以单独编译某些模块
然后通过
make snod
生成新的镜像即可刷机
out输出
当我们编译完系统以后,所编译的内容,包括结果,中间文件都会放在out目录下
/out/host/ 这个目录包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等。
/out/target/common/ 该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库,有时候我们称为中间文件。
/out/target/product/<product_name>/ 包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。
镜像文件
我们在out/target/product/<产品名称>/目录下可以找到这些产出的镜像,用于刷机
- system.img 包含了 Android OS 的系统文件、库、可执行文件以及预置的应用程序,将被挂载为根分区
- ramdisk.img 在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程
- userdata.img 将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据
- boot.img Android系统启动下的Linux内核文件
- xxx.bin Preloader,在Android系统启动前的引导程序
- lk.bin 引导程序里面的轻量级操作系统
- recovery.img 恢复模式镜像
好啦,先到这里,我们后面再去创建属于自己公司的产品,跟华为,htc,google这些一样。