【问题标题】:How to do an android mm clean?如何做一个android mm清洁?
【发布时间】:2013-09-29 04:34:18
【问题描述】:

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

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

如何将清理限制为仅当前模块?

【问题讨论】:

    标签: android makefile android-build


    【解决方案1】:

    使用mm -B,会全部rebuild,相当于clean 然后make。

    【讨论】:

    • 有没有办法只清理模块(不重建)?我希望能够测试我的应用程序是否可以使用 mm/mmm 构建,然后对其进行清理,以便在完整 ROM 构建期间重新构建它。
    • -B, --always-make 无条件地使所有目标//似乎整个项目都在重建,天哪
    • 提示:必须在模块文件夹中运行,否则整个项目将重建
    • 我尝试过mm -B,但得到了Unknown option: -B——在 AOSP 8.1 上 mm 是否发生了某种变化?
    • mm -help 给了我“未知选项 -help” 与 --help 相同
    【解决方案2】:

    不使用 mm 的另一种方法是从 Android 源代码的根目录中提供 make clean-<target name>

    同样,您可以使用 make <target name> 单独构建所需的模块

    【讨论】:

    • 感兴趣的读者请注意:这不是一回事。来自根的make 将跟踪整个树中的所有构建文件 (*.mk)。子目录中的mm 只会跟踪该目录中的构建文件。这是一个重要的区别,因为跟踪所有 make 文件非常耗时,有时还容易出错。
    • 在使用文件夹中的mm 时无法识别某些构建依赖项。我经常发现有人根据他们的构建通过mm 提交补丁,但在根级别会失败。
    【解决方案3】:

    在旧的基于 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

    【讨论】:

    • NINJA_ARGS 方法对于更高版本的 ASOP 来说不是一个好的选择。它将清除所有内容,而不仅仅是您的模块。该系统将需要重建许多 ASOP 工具和组件,这将花费很长时间。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      在模块名称前加上“clean-”前缀将在 Android 中进行干净构建

      例如, m clean-libskia

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多