1.编译流程
全部编译命令:
source build/envsetup.sh
lunch //选择29,lito-userdebug
//lunch lito-user
bash build.sh dist -j32 2>&1|tee 1.log
执行完,会编译所有的镜像
其他编译命令(这是安卓内置命令)
(如果文件没生成,可以尝试删除一下之前的镜像文件)
make aboot -- 编译 bootloader;
make bootimage -- 编译 kernel;
make systemimage -- 编译 system;
make userdataimage -- 编译 userdata;
make recoveryimage -- 编译 recovery;
mmm packages/apps/Contacts -- mmm 编译指定目录的模块,如编译联系人;
编译如果报错,可以使用
make clean
编译结束,执行命令
. meig_sparseimage.sh
会在 sparseimage 文件夹下生成分包文件以及 xml
当前高通平台的编译设计是,先在qssi lunch里编译system和vendor,再在lito lunch里编译其他,结束时打包成super.img
如果需要单独编译system.img,lunch时选择qssi,再使用make systemimage 生成的system需要在fastbootd(fastboot reboot fastboot)模式下才能刷入
2.镜像分包
编译完成之后,要把out下的所有数据拷贝到sparseimage下面
cp out/target/product/lito/*.img sparseimage/
执行分包的命令,这个脚本只是拷贝了需要分包的文件,还有些文件没有一起搞过来
./meig_sparseimage.sh
将sparseimage下的所有文件覆盖之前的内容
烧录,就可以启动了
3.编译命令
1.通过Android内置make命令编译
初始化编译环境
source build/envsetup.sh
编译 system.img
lunch qssi-userdebug
make target-files-package
编译除system.img外的其他img
lunch xx-userdebug
make target-files-package
(如果文件没生成,可以尝试删除一下之前的镜像文件)
(这个方式要先在lunch的时候选择QSSI)
make aboot -j8 -- 编译 bootloader;
make bootimage -j8 -- 编译 kernel;
make systemimage -j8 -- 编译 system;
make userdataimage -j8 -- 编译 userdata;
make recoveryimage -j8 -- 编译 recovery;
mmm packages/apps/Contacts -j8 -- mmm 编译指定目录的模块,如编译联系人;
单独编译内核
如果之前已经编译过,可能需要单独清理一下
首先进入kernl源码目录
执行
make mrproper
再退回到根目录,执行
source build/envsetup.sh
lunch
make
2.高通提供的build.sh脚本编译
初编译所有img,包括system和其它img
source build/envsetup.sh
lunch XX-userdebug
./build.sh dist -j24 2>&1|tee 1.log
编译system.img,产物在qssi目录下
source build/envsetup.sh
lunch xx-userdebug
./build.sh dist qssi_only -j24 2>&1|tee 1.log
编译super.img
source build/envsetup.sh
lunch xx-userdebug
./build.sh dist merge_only -j24 2>&1|tee 1.log
编译其它img,例如vendorimage,如果不指定会编译其它所有img,产物在XX目录下
source build/envsetup.sh
lunch xx-userdebug
./build.sh vendorimage dist target_only -j24 2>&1|tee 1.log
命令说明
--dist,这个选项是用来生成OTA包的;
--qssi_only,这个选项是用来编译qssi的;
--target_only,这个选项是用来编译用户自己的target;
--merge_only,如果一起传入的参数有dist就生成ota,如果支持动态分区就会生成动态分区;
什么是qssi,什么是用户自己的target:
qssi是qcom single system image,就类似原来的system分区。
用户自己的target,就类似原来的vendor分区。
AndroidQ以前只用lunch自己项目的target就可以进行编译了,现在随着Treble架构的强制推行,system和vendor要强制解耦了。
快速编译
第一次编译后最好不要make clean,不然部分编译还是很慢,如果担心部分编译无法更新编译生成的文件,那么就先在out目录里面把obj文件夹中相关的.o文件和镜像目录中的文件删除,再部分编译,就一定会更新了。