Android 源码编译技巧--模块编译

56 篇文章 3 订阅
15 篇文章 1 订阅

源码全编译

基于AN 8.0 ,全编译一般步骤为

source jdk_env.sh
source build/envsetup.sh
lunch //选择对应的device或product
make -j8 //数字越大越好,但取决于编译服务器性能

模块编译

模块编译俗称单编,就是单独编译某个模块。需要全编译后才可以单编。

模块编译的好处是不用每次都完整的烧录 rom 到板子上,节省时间。

将模块编译生成的文件直接 adb push 或者串口拷贝到板子上就能看到修改效果,方便调试。

是否可以模块编译,主要看该模块根目录下是否有 Android.mk 文件。

编译某个单独的系统APP

到app目录下

mm -B

或者到app目录下

mma -B

或者直接指定源码根目录,以 Launcher2 示例

mmm packages/apps/Launcher2

mmm -j12 packages/apps/Launcher2

mma packages/apps/Launcher2

mmm 与 mma 的区别在于:
mmm 只编译当前模块;
mma 编译当前模块及其依赖的模块,如果 mmm 编译提示缺少依赖,用 mma 编译即可

编译系统某些文件

比如修改了开机动画的逻辑,
修改了 frameworks/base/cmds/bootanimation/BootAnimation.cpp 文件,
则到 frameworks/base/cmds/bootanimation/目录下mm -B即可,
会生成 out/target/product/<product_name>/system/bin/bootanimation 此文件,
通过串口工具拷贝到板子上,并修改为对应的权限即可看到修改效果,
其他模块也类似。

编译系统jar包

比如修改了 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
frameworks/base/services/ 目录 mm -B
即可生成 out/target/product/<product_name>/system/framework/services.jar
将 services.jar push到板子上即可。

重点:使用make编译

编译规则:

make <PACKAGE_NAME> -j8

<PACKAGE_NAME> 是对应目标模块的 Android.mk 文件里的 LOCAL_PACKAGE_NAME 或者 LOCAL_MODULE

1.编译 packages/apps/Launcher2

make -j8 Launcher2
make Launcher2 -j8

2.编译 framework 得到 framework.jar

make framework -j8

3.编译 framework-res 得到 framework-res.apk

make framework-res -j8

4.编译 services 得到 services.jar

make services.core.unboosted -j8
make services.core -j8
make services -j8

如果全编译过,直接

make services -j8

5.编译 frameworks/base/packages/SystemUI/

make SystemUI -j8

编译无效问题

1.模块编译替换后无效果,可能是编译中间件导致的,
删除 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/out/target/product/<product_name>/obj/APPS/Browser3_intermediates/
等文件后重新编译即可。

2.编译后烧录出现卡死在开机Logo或者开机动画页面,make clean 后重新编译即可。
make clean 后再次编译会很耗时,相当于第一次编译。

3.类似2的情况,删除 out/ 目录后重新编译,比 make clean 更暴力。

参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/index.html

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android源码编译的命令包括以下几个步骤: 1. 在Android源码根目录下执行build/envsetup.sh脚本,该脚本用于设置Android编译环境。\[1\] 2. 使用lunch命令选择要编译的目标。\[1\] 3. 使用make命令编译整个Android系统。\[1\] 此外,还有一些其他的编译命令可以使用: - 使用m命令对整个Android源代码进行编译,它是对make命令的简单封装。\[2\] - 使用mm命令对Android源码中的指定模块进行编译,它也是通过make命令来实现的。\[2\] - 使用mmm命令对Android源码中的指定模块进行编译,与mm命令类似,但需要指定Android.mk文件的相对路径。\[2\]\[3\] 综上所述,编译Android源码的常用命令包括build/envsetup.sh、lunch和make,而m、mm和mmm命令是对make命令的封装,用于更方便地编译Android源码或指定模块。 #### 引用[.reference_title] - *1* [android平台的三个编译命令----make,mm,mmm](https://blog.csdn.net/xiangyuxiangyu123/article/details/54098153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Android源代码编译命令m/mm/mmm/make分析【转载】](https://blog.csdn.net/weixin_30411997/article/details/95102327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值