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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:42:22