AOSP 12生成的二进制文件无法自动同步到x86_64模拟器问题
AOSP 12 自研模块集成问题解决
问题分析
- 编译生成的二进制在
out/target/product/emulator_x86_64/system/bin存在,但模拟器内找不到:说明文件未被打包进system.img系统镜像 - 手动添加
cp规则后编译报错:AOSP编译系统的base_rules.mk已定义LOCAL_INSTALLED_MODULE的处理逻辑,重复定义目标命令会触发冲突
解决方案
1. 修正Android.mk配置(删除手动cp规则)
AOSP编译系统会自动处理模块的编译与安装,无需手动编写拷贝命令。确保你的Android.mk包含以下关键配置:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # 模块名称,需与最终二进制文件名一致 LOCAL_MODULE := easycwmp # 替换为你的实际源文件列表 LOCAL_SRC_FILES := main.c utils.c # 标记为可选模块,允许被产品配置包含 LOCAL_MODULE_TAGS := optional # 指定模块类型为可执行文件 LOCAL_MODULE_CLASS := EXECUTABLES # 指定安装路径为system/bin(AOSP预定义变量) LOCAL_MODULE_PATH := $(TARGET_OUT_BIN) # 调用可执行文件编译模板 include $(BUILD_EXECUTABLE)
2. 将模块加入产品打包列表
要让模块被打包进system.img,需在对应产品的配置文件中添加模块名:
- 找到你的产品配置文件(如
device/generic/x86_64/device.mk或自定义product.mk) - 添加一行配置:
PRODUCT_PACKAGES += easycwmp
3. 重新编译验证
- 执行编译并重新生成系统镜像:
# 单独编译目标模块 mmm 你的模块所在目录路径 # 重新生成system.img make snod - 启动模拟器后,通过adb验证文件是否存在:
adb shell ls /system/bin/easycwmp
错误原因说明
你手动添加的$(LOCAL_INSTALLED_MODULE)目标规则,与build/make/core/base_rules.mk中已定义的规则冲突。AOSP编译系统通过BUILD_EXECUTABLE这类模板,自动完成模块的编译、安装到指定目录的流程,无需手动编写拷贝命令。
内容的提问来源于stack exchange,提问作者Karoui Sirine
相关产品推荐
相关产品推荐

