Android AOSP 单独编译某一模块

本文详细介绍了如何在AOSP(Android开源项目)中仅编译特定模块,如设置应用程序,而无需完整编译整个项目。通过使用mmm命令,可以高效地针对单一模块进行编译。同时,文章强调了在修改系统模块后,需使用emulator-wipe-data命令清除数据并重启模拟器,以确保更改生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于AOSP 项目太大,我只修改了一个模块,比如设置。
那么只需要单独编译设置这个模块就可以了。

首先执行Source:

source build/envsetup.sh

执行之后,就会有一些额外的命令可以使用:

  - croot: Changes directory to the top of the tree.
  - m: Makes from the top of the tree.
  - mm: Builds all of the modules in the current directory.
  - mmm: Builds all of the modules in the supplied directories.
  - cgrep: Greps on all local C/C++ files.
  - jgrep: Greps on all local Java files.
  - resgrep: Greps on all local res/*.xml files.
  - godir: Go to the directory containing a file.
  这些命令的具体用法,可以在命令的后面加-help来查看,这里我们只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。

修改设置apk

设置apk 的项目在aosp/packages/apps/Settings下,我们在里面加上一个toast.

修改之后,lunch 一下

lunch 

然后指定自己编译的模块

接着,使用mmm命令来编译指定的模块,例如系统的设置应用程序:

// 编译设置模块
mmm packages/apps/Settings/
//将编译过得设置模块写到system.img里面去
make snod
//清楚数据启动模拟器
emulator -wipe-data

在这里插入图片描述

mmm packages/apps/Settings/ 编译完成之后,就可以在out/target/product/generic_x86_64/system/product/priv-app/Settings/Settings.apk目录下看到apk文件了。如上图

在这里插入图片描述

make snod 之后,就可以在out/target/product/generic_x86_64/system.img目录下看到img文件了。如上图

修改系统apk 之后的效果如下

我修改了系统的设置,每次onResume 就会弹出一个toast 。
在这里插入图片描述

我错了,上面说的方法不行。还是要重新编译一下System.img

我又尝试了下,简单的make snod 不会生效。
还是需要make -j8全部编译一下。

注意:

一定要emulator -wipe-data 否则你修改的内容可能不生效!我自己尝试了几次,才知道要这样做的!
网上没有人说要清楚数据。不知道他们都只是copy 别人的博客,还是怎么样。。。

Android TV开发中,针对特定模块单独编译可以显著提高开发效率,尤其当你只需要修改或测试系统中的某特定组件时。《Android TV高效编译与调试技巧详解》文详细介绍了这过程的优化方法。首先,你需要初始化编译环境,通过执行`source build/envsetup.sh`命令来设置编译环境变量。随后,你可以使用`lunch`命令来选择特定的硬件平台和版本类型。例如,`lunch aosp_arm-eng`将为ARM架构设置开发环境。 参考资源链接:[Android TV高效编译与调试技巧详解](https://wenku.csdn.net/doc/2v6t9dpwy2?spm=1055.2569.3001.10343) 接下来,如果你需要对特定模块进行单独编译,可以使用`mm`命令加上模块名称的简写。例如,若要编译个名为'module_x'的模块,你可以使用`mm module_x`。这将仅编译你指定的模块,而不是整个系统。如果你需要清理之前的编译文件以便重新编译,可以使用`mm -B`来强制重新编译模块。 为了进步优化编译流程,你可以考虑使用`make -jN`命令,其中`N`是你的CPU核心数加上倍的核心数(例如,如果你的CPU是双核,则使用`make -j4`)。这样可以有效利用多核处理器并行编译的优势,加快编译速度。不过,这需要你的机器有足够的内存来支持并行编译,以免引起系统资源争用或不稳定。 文章还介绍了使用`makebigfish-j2>&1|teelog_Hi3798MV300H.txt`来记录编译过程中的所有输出信息,这有助于分析编译过程中的错误和警告。最后,对于模块编译完成后可能出现的问题,你可以使用ADB命令和Linux命令进行调试,查看日志文件、修改配置文件或重新编译等。 综上所述,单独编译特定模块不仅可以节省时间,还能让你更加高效地处理和测试代码。阅读《Android TV高效编译与调试技巧详解》将使你更加了解整个编译过程的优化技巧,助你在Android TV的开发中游刃有余。 参考资源链接:[Android TV高效编译与调试技巧详解](https://wenku.csdn.net/doc/2v6t9dpwy2?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值