配套系列教学视频链接:
Android 10.0 AOSP源码编译:https://edu.csdn.net/course/detail/35479
Android 10.0 根文件系统和编译系统:https://edu.csdn.net/course/detail/35480
说明
系统:AOSP Android10.0
设备:Android模拟器
前言
本章节重点介绍Android源码中进行编译时,所需要用到各种编译命令。
一, 代码编译
编译指令 | 解释 |
hmm | 帮助命令 |
m | 在源码树的根目录执行编译 |
mm | 编译当前路径下所有模块,但不包含依赖 |
mmm [module_path] | 编译指定路径下所有模块,但不包含依赖 |
mma | 编译当前路径下所有模块,且包含依赖 |
mmma [module_path] | 编译指定路径下所有模块,且包含依赖 |
make [module_name] | 无参数,则表示编译整个Android代码,否则就是编译特定模块 |
建议:首次编译时采用make/mma/mmma编译;当依赖模块已经编译过的情况,则使用mmm/mm编译
二, 模块的编译指令
模块 | make 命令 | mmm命令 |
init | make init | mmm system/core/init |
zygtoe | 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 |
Settings | make Settings | mmm packages/apps/Settings |
三,清除命令
编译指令 | 解释 |
make installclean | 删除out/target/product/产品/中的所有img文件, system,vendor,data,相关文件, 保留中间文件 如:out/target/product/产品/obj/等 |
make clean | 彻底删除,相当于rm –rf out/, make clobber有一样的效果 |
make clean-模块 | 清楚单个特定模块, 时间比较慢,最好多线程编译, 也可以直接用 rm删除 如删除某个内置apk: rm -rf out/target/product/产品/obj/APPS/app的名字 rm –rf out/target/product/产品/system/app/app 名字 |
四,搜索命令
搜索命令 | 解释 |
cgrep [keyword] | 所有C/C++文件执行搜索操作 |
jgrep [keyword] | 所有Java文件执行搜索操作 |
ggrep [keyword] | 所有Gradle文件执行搜索操作 |
mgrep [keyword] | 所有Android.mk文件执行搜索操作 |
sepgrep [keyword] | 所有sepolicy文件执行搜索操作 |
resgrep [keyword] | 所有本地res/*.xml文件执行搜索操作 |
五, 编译配置命令
搜索命令 | 解释 |
check_product [product] | 检查产品是否有效 |
get_abs_build_var [build_var] | 获取系统中的编译变量的值 |
printconfig | 打印当前选择的产品配置 |
add_lunch_combo [product] | 将某个产品加入到用户选项中 |
六,镜像的编译指令
模块 | make 命令 |
boot.img | make bootimage |
system.img | make systemimage 或者make snod(更快的直接生成system.img, 不管out/target/product/xx/system是否有变化) |
ramdisk.img | make ramdisk |
userdata.img | make userdataimage |
super.img | make superimage 或者make supernod(更快的直接生成super.img, 不管文件是否有变化) |
总结
Android命令比较多,基本都是通过build/envsetup.sh这个脚本中产生, 感兴趣的朋友,可以直接去读取脚本内容。