You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android11下BUILD_PHONY_PACKAGE定义的Android.mk用mma可编译make失效

问题根因

该现象是Android 11编译系统的架构变更和模块构建规则调整共同导致的,核心原因如下:

  1. Android 10及更高版本默认采用Kati+Ninja替代纯Make作为构建后端,只有显式纳入构建目标树的模块才会触发其依赖链,纯Make阶段的隐式依赖不会被Ninja识别。
  2. 你的模块配置了LOCAL_MODULE_TAGS := optional,mma命令的逻辑是主动将当前目录下的所有模块作为构建目标,所以不管标签类型都会触发构建,其关联的LOCAL_ADDITIONAL_DEPENDENCIES也会被执行;而全局make -j8默认只构建产品配置中PRODUCT_PACKAGES列表内的模块及其依赖,你的phony模块没有被加入该列表的话,根本不会进入Ninja的构建队列,对应的自定义目标自然不会被执行。
  3. Android 11新增了构件路径校验、分区校验机制,未符合规则的模块即使加入PRODUCT_PACKAGES也会被裁剪,可能导致构建不触发。

解决方案

  1. 首先在对应产品的mk配置文件(通常为device/<厂商>/<设备名>/device.mk或产品通用配置mk)中添加以下配置,将你的phony模块显式加入全局构建列表:
PRODUCT_PACKAGES += mypackage
  1. 模块配置优化,在include $(BUILD_PHONY_PACKAGE)之前补充以下配置,避免被系统裁剪规则过滤:
# 标记为产品专属模块,适配Android 11+的分区校验规则
LOCAL_PRODUCT_MODULE := true
  1. 如果仍然不生效,检查是否开启了构件路径校验,将模块相关路径加入白名单:
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
    $(mypackage_BUILD_PATH)/%
  1. 验证配置有效性:单独执行make mypackage -j8,如果自定义目标可以正常触发,说明配置生效,再执行全局构建即可。

内容的提问来源于stack exchange,提问作者mozcelikors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:15:03