AOSP编译报错:目标文件规则被覆盖但未实际生成
解决AOSP 12.1 r27编译时PRODUCT_COPY_FILES冲突及文件未生成问题
一、解决"overriding commands for target"冲突错误
这个报错的核心原因是:你要复制的android.hardware.audio@6.0-impl.so已经被AOSP中的原生音频HAL编译模块作为构建目标定义过了,PRODUCT_COPY_FILES试图给同一个输出路径再添加一条生成命令,违反了ckati的构建规则。
解决步骤:
- 禁用原生音频HAL模块的编译
在你的device.mk中添加以下代码,把原生模块从打包列表中移除:
PRODUCT_PACKAGES := $(filter-out android.hardware.audio@6.0-impl,$(PRODUCT_PACKAGES))
- 保留你原来的PRODUCT_COPY_FILES语句
此时再编译就不会出现冲突——原生模块不再生成该so文件,你的复制命令会成为唯一的生成规则。
二、解决重命名后文件未生成的问题
如果重命名文件后编译成功但目标路径下无文件,按以下方向排查:
- 验证源文件路径正确性
确认$(LOCAL_PATH)/prebuilt/下确实存在你要复制的文件。可以在编译前执行以下命令验证:echo $(LOCAL_PATH) # 输出路径后,手动检查该路径下的prebuilt目录是否有目标so ls $(LOCAL_PATH)/prebuilt/ - 检查PRODUCT_COPY_FILES语法
确保路径中无空格、特殊字符转义正确(@符号在makefile中无需额外转义,你的写法没问题),目标路径$(TARGET_COPY_OUT_VENDOR)/lib64/hw/是否正确对应vendor分区的输出目录。 - 查看编译过程的命令输出
执行make showcommands重新编译,搜索目标文件名,确认复制命令是否被执行,是否有隐藏的报错信息。 - 排查是否有其他规则覆盖/删除文件
检查device.mk或其他关联mk文件中,是否有PRODUCT_COPY_FILES或LOCAL_PREBUILT_MODULE_FILES等规则,对同一目标路径的文件进行了覆盖或删除。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

