编译命令
不同编译命令区别
首先需要了解不同编译命令的区别:
编译指令 | 解释 |
---|---|
m | 在源码树的根目录执行编译 |
mm | 编译当前路径下所有模块,但不包含依赖 |
mmm [module_path] | 编译指定路径下所有模块,但不包含依赖 |
mma | 编译当前路径下所有模块,且包含依赖 |
mmma [module_path] | 编译指定路径下所有模块,且包含依赖 |
make [module_name] | 无参数,则表示编译整个Android代码 |
模块示例
模块命令 | 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 snod
写入镜像,不然修改代码可能不会生效。
如何判断哪些代码可以模块编译
很简单,在文件夹目录里有Android.mk
或者Android.bp
文件,就表示这个文件夹代码可以模块编译。
编译完成后查看修改
模块编译完成后,根据编译的不同模块,会在out/target/product/xxxxxxx/system
这个临时目录里生成对应名称的APK,一般在priv-app
文件夹里,也会有部分生成的jar文件在framework
文件夹里。
这里只以APK文件举例,复制出APK文件,put进设备的system/priv-app/xxxx文件夹内(xxxx为对应文件夹),举例编译出Launcher.apk,然后执行adb push xxxxxx(复制出来的APK路径) /system/priv-app/Launcher
需注意设备得取得root权限,才能put进这样的系统目录内。
如果设备已经ROOT后,依次执行adb root
adb remount
获得权限,然后就可以执行put命令啦。
参考文章
https://blog.csdn.net/asahinokawa/article/details/79528698