在独立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支持的(比如
必须初始化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
相关产品推荐
相关产品推荐

