本文已推送到微信公众号:灰灰的Rom笔记
有需要可在公众号发送“remake-B
”获取脚本代码,请务必保留本人信息!
mmm 和 make 是单编命令,都能用来单独编译某个 Module,但二者的用法和作用不完全相同,而且加上 -B 后都能执行强制单编(强制刷新 APK,避免编译环境检测不到代码变动,不刷新编译结果的问题)。
mmm -B
mmm [-B] packages/apps/Settings/
mmm 是单编某个 Module 的目录,它能根据 Module 的 Android.mk 文件中 res 目录的配置去将对应的 res 目录整合进来进行编译,但不能将该 Module 目录以外的 java 代码自动整合。
举个栗子:
N1 以前,SystemUI 和 Keyguard 是在两个 Module 目录的,但 SystemUI 引用(依赖)了 Keyguard 的代码。当代码环境整个编译时,会自动将 Keyguard 引入
SystemUI 进行编译,最终只生成 SystemUI.apk。
这样就有个问题,当修改了 Keyguard 的 res 资源后,使用 mmm /xxx/SystemUI/ 命令可以进行单独编译;但当修改了 Keyguard 的 src 资源后,这个命令就编不进来了,这时候就只能先mmm /xxx/Keyguard/
,然后再mmm /xxx/SystemUI/
。
PS:曾经去 保千里 面试,面试官问修改了 Keyguard 的 src 资源后需不需要先编译 Keyguard;我说不用,面试官一脸诧异,反复问了几次需不需要,我依旧毫不犹豫的说不用……
make -B
单编:make SystemUI
强制单遍:make -B SystemUI 或者 make SystemUI -B
这个命令也是用来单独编译的,但它比 mmm 更强大,它能根据 Android.mk 脚本自动查找依赖关系,然后将依赖到的 Module 整合进来进行编译。
依旧举个栗子:
还是 SystemUI 和 Keyguard,因 Keyguard 是作为 SystemUI 的一部分直接编译到
SystemUI.apk 中了的,所以当修改了 Keyguard 的资源后,如果用这个命令的话,就不用先编译 Keyguard 再编译 SystemUI了,直接一步到位make -B SystemUI
。
PS:真的不一定非要先编译 Keyguard 的。T_T
-B 不能用了?!
像我这么懒得人,99% 的情况都是用的 make Module命令,担心修改不能被编译到时,加上 -B 就完事了。
可是,8.1 的代码来了,-B 不能用了,WTF?!
想要确保修改的内容被编进去,就得先手动删除中间文件,删除旧的最终文件,然后再重新单编,还干不干活了......
不得已,看了两天脚本语言,自己写了个替代脚本,有需要的自行前往公众号获。
使用方法和 make -B 类似,很简单:
强制单编:remake Module
32线程强制单编:remake Module -j32
本文已推送到微信公众号:灰灰的 Rom 笔记
有需要可在公众号发送“remake-B
”获取脚本代码,请务必保留本人信息!
网友评论