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

在独立Android.bp文件中向AOSP添加自定义库的构建问题

解决AOSP中mmm编译自定义库提示ninja: unknown target 'MODULES-IN-my-module'的问题
  • 先核对Android.bp的语法和模块定义
    AOSP的Soong构建系统对Android.bp的语法要求极严,一点小错误都会导致模块不被识别:

    • 确认模块类型是AOSP支持的(比如cc_library、java_library、shared_lib等),模块名、srcs路径、依赖项没有拼写错误;
    • 检查括号、逗号是否匹配,比如末尾的大括号不能漏,数组项后面的逗号要正确;
    • 举个标准的C++库示例:
      cc_library {
          name: "my-custom-lib",
          srcs: ["src/*.cpp"],
          include_dirs: ["include"],
          shared_libs: ["liblog"],
          export_include_dirs: ["include"],
      }
      
  • 必须初始化AOSP构建环境
    新开终端或者切换环境后,一定要先执行以下命令初始化,否则mmm找不到正确的构建上下文:

    source build/envsetup.sh
    lunch <your-target>  # 比如 lunch aosp_arm64-eng
    
  • 检查mmm的路径是否正确
    路径必须是相对于AOSP根目录的路径,比如你的库放在external/my-module/,就要执行:

    mmm external/my-module/
    

    不要用绝对路径或相对当前目录的路径,路径含特殊字符时要加引号(尽量避免用特殊字符命名文件夹)。

  • 强制刷新构建缓存
    旧的ninja缓存可能导致识别异常,执行以下操作后重新编译:

    # 清除模块相关的缓存文件
    rm -rf out/target/product/<your-device>/obj/<module-path>
    # 或者用mmma强制重新扫描目录
    mmma path_to_folder/
    

    mmma会强制扫描目标目录下的所有模块并重新生成ninja规则,比mmm更稳妥。

  • 验证模块是否被构建系统识别
    执行以下命令确认模块是否被Soong识别并写入ninja构建文件:

    # 检查Android.bp是否存在
    find . -name Android.bp -path "*/my-module/*"
    # 检查模块是否出现在ninja文件中
    grep -r "my-custom-lib" out/build.ninja
    

    如果第二条命令没有输出,说明Android.bp存在语法或定义错误,需要重新排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:12:50