一、编译指令
1.make -jX X表示数字,这个命令将编译Android系统并生成镜像,XX表示可以使用到的CPU核数,
2.make snod 这条命令将重新生成镜像,消耗的时间很少,类似WinCE的makeimg过程,如果你修改了一些数据文件(如音乐、视频)等文件时比较有用。
3.make cts 这条命令将编译CTS套机,编译出的结果放在out目录对应版的data/app目录下面。CTS测试时有用
4.make installclean 这条命令清除out目录下对应板文件夹中的内容,也就是相当于make clean,通常如果改变了一些数据文件(如去掉)、最好执行以下make installclean,否则残留在out目录下的还会被打包进去。
5.mm/mm -B 开发调试中最喜欢这条命令了,在修改了的目录下执行这条命令,就能智能地进行编译,输出的文件在通过adb推送到目标机,可以很方便地调试
二、单编
1. make: 不带任何参数则是编译整个系统;
make MediaProvider #单个模块编译,会把该模块及其依赖的其他模块一起编译(会搜索整个源代码来定位MediaProvider模块所使用的Android.mk文件,还要判断该模块依赖的其他模块是否有修改);
2. mmm packages/providers/MediaProvider # 编译指定目录下的模块,但不编译它所依赖的其它模块;
3. mm # 编译当前目录下的模块,它和mmm一样,不编译依赖模块;
4. mma # 编译当前目录下的模块及其依赖项 .
mmma:# 编译指定目录下的模块,编译它所依赖的其它模块;
以上三个命令都可以用-B选项来重新编译所有目标文件。
- make systemimage - system.img
- make userdataimage - userdata.img
- make ramdisk - ramdisk.img
- make snod - 快速打包system.img
单编sepolicy并快速验证
(1)source bulid/envsetup.sh
(2)lunch
(3)mmm system/sepolicy
(4)adb push out\..\vendor\etc\selinux\. /vendor/etc/selinux
adb push out\..\system\etc\selinux\. /system/etc/selinux
(5)adb reboot
make -j32 2>&1 | tee build.log
模块 make命令 mmm命令
init make init mmm system/core/init
zygote make app_process mmm frameworks/base/cmds/app_process
system_server make services mmm frameworks/base/services
java framework make framework mmm frameworks/base
framework资源 make framework-res mmm frameworks/base/core/res
jni framework make libandroid_runtime mmm frameworks/base/core/jni
binder make libbinder mmm frameworks/native/libs/binder
make systemimage - system.img
make userdataimage - userdata.img
make ramdisk - ramdisk.img
make snod - 快速打包system.img
三、push 文件
push 文件
adb push /xxx/system/etc/selinux/* /system/etc/selinux/
adb push /xxx/vendor/etc/selinux/* /vendor/etc/selinux/
adb push /xxx/system/system_ext/etc/selinux/* /system/system_ext/etc/selinux/
adb push /xxx/system/product/etc/selinux/* /system/product/etc/selinux/