如何进行Android MM清理?

24

我正在使用mm命令在Android源代码中构建自定义模块。

当我运行mm clean时,似乎整个项目都被清除了。

我该如何将清理限制在当前模块中?

5个回答

36

使用mm -B,这将会重新构建所有内容,相当于执行clean命令然后再执行make命令。


1
有没有一种方法可以仅清理模块(而不是重新编译)?我想测试我的应用程序是否可以使用mm/mmm进行构建,然后对其进行清理,以便在完整的ROM构建期间需要重新构建。 - CCJ
-B, --always-make 无条件地制作所有目标 // 好像整个项目都被重建了,天啊 - yurenchen
提示:必须在模块文件夹中运行,否则整个项目将重新构建。 - yurenchen
11
我尝试执行 mm -B,但出现 Unknown option: -B 错误 -- mm 在 AOSP 8.1 上是否有所更改? - Donato Azevedo
mm-help命令给了我"Unknown option -help"的提示,--help同理。 - S Raghav
我使用 mm clean 并工作。 - 傅继晗

9
另一种不使用mm的方法是在Android源代码根目录下使用make clean-<目标名称>。同样,您可以使用make <目标名称>单独构建所需的模块。

3
对于感兴趣的读者,请注意:这两个操作并不完全相同。从根目录运行make将遍历整个目录中的所有构建文件(*.mk文件),而从子目录运行mm只会遍历该目录中的构建文件。这是一个重要的区别,因为遍历所有构建文件可能会耗费大量时间并且有时容易出错。 - Adam S
当使用mm从文件夹中构建时,有些构建依赖关系无法识别。我经常发现人们提交的补丁是基于通过mm进行构建而不是在根级别失败的情况。 - vishalm

6
在旧的基于make的AOSP构建系统中,请使用:
mm -B

重新构建模块。
在新的基于Ninja+Soong的AOSP构建系统中,似乎“-B”不再起作用了。它会出现错误“Unknown option: -B”。
可能的替代方案是使用“NINJA_ARGS”环境变量将其他Ninja参数传递给底层构建引擎。
例如,以下命令可删除所有输出和中间文件:
NINJA_ARGS="-t clean" mm

在这种情况下,“clean”是Ninja构建系统的一个额外工具。请参阅https://ninja-build.org/manual.html#_extra_tools以获取其他工具。
需要注意的一件事是,“clean”工具似乎清除了模块的所有依赖项,而不是模块本身。我还没有找到一种方法来指定一个规则限制只清理模块本身。
参考:https://android.googlesource.com/platform/build/soong/+/HEAD/docs/best_practices.md

1
NINJA_ARGS方法不是ASOP的后续版本的好选择。它会清除所有内容,而不仅仅是您的模块。系统将需要重建许多ASOP工具和组件,这将需要很长时间。 - Adam Parsons

1

在模块名称前加上"clean-",将会在Android中进行干净的构建

例如, m clean-libskia


0

make <lib> 2>&1 | grep -e "install"

这将编译并打印所有重新编译的库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接