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

在vendor/manufacturer/device下添加Android.bp后mka无法识别模块如何解决

问题现象说明

在vendor/manufacturer/device/module/路径下创建Android.bp文件,内容如下:

prebuilt_etc {
    name: "foo",
    src: "bar",
    vendor: true,
}

执行mka foo编译时ninja无法识别该模块,但Soong首次扫描目录时可以检测到该Android.bp中的语法错误。

根因说明

Soong会扫描源码树中所有存在的Android.bp文件做基础语法校验,不管对应模块是否被纳入当前产品的构建范围,因此语法错误可以被正常检测到。如果模块没有被加入到构建目标树,Soong就不会生成对应的ninja构建规则,就会出现ninja找不到目标的问题。

排查解决步骤
  • 检查模块目录是否被纳入构建扫描路径
    确认模块所在目录的上级目录中存在subdirs = ["module"]配置(通常在上级目录的Android.bp中添加),否则Soong只会做语法校验,不会将该目录下的模块加入构建候选列表。
  • 检查模块是否被添加到当前产品的包列表
    在你当前lunch的产品对应的device.mk或者产品配置mk文件中,添加如下配置:
    PRODUCT_PACKAGES += foo
    
    配置完成后可以执行get_build_var PRODUCT_PACKAGES命令,确认输出列表中包含foo模块。
  • 验证依赖的源文件存在
    确认vendor/manufacturer/device/module/路径下存在名为bar的源文件,文件不存在的话Soong会静默跳过该模块的构建规则生成。
  • 清理旧构建缓存重试
    执行如下命令清理过期的构建配置缓存后重新编译:
    rm -rf out/soong/.bootstrap out/soong/build.ninja
    mka foo
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:08