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

如何在Android AOSP 13模拟器中构建/system目录下的系统应用

Android 13 AOSP 部署系统应用到/system/app的正确方案

问题背景

需要构建部署在/system/app的示例系统应用,基于goldfish设备为sdk_phone64_x86_64构建AOSP模拟器。按标准流程用Android.bp编译后,在device/generic/goldfish/64bitonly/product/vendor.mk的PRODUCT_PACKAGES中添加应用名称,编译systemimage时触发错误:

build/make/core/artifact_path_requirements.mk:30: warning: device/generic/goldfish/64bitonly/product/sdk_phone64_x86_64.mk produces files inside build/make/target/product/generic_system.mks artifact path requirement.
Offending entries:
system/app/SampleSystemApp/SampleSystemApp.apk
In file included from build/make/core/main.mk:1352:
build/make/core/artifact_path_requirements.mk:30: error: Build failed.
16:08:03 ckati failed with: exit status 1

尝试官方产品分区接口强制方案无效,需找到不修改build/make/target/product/handheld_system.mk的可行方案(Android 10中直接在vendor.mk添加模块名即可正常工作)。

解决方案

1. 配置模块的分区属性

在应用的Android.bp中明确声明模块归属system分区,添加关键配置:

android_app {
    name: "SampleSystemApp",
    srcs: ["src/**/*.java"],
    // 其他编译配置(如资源、依赖等)
    product_specific: false, // 禁止将模块归类到product分区
    certificate: "platform", // 系统应用必须使用平台签名
    install_location: "system", // 明确指定安装路径为system分区
}

2. 在设备级system相关mk中添加模块

不要在vendor.mk中添加应用模块,而是修改device/generic/goldfish/64bitonly/product/sdk_phone64_x86_64.mk,将模块添加到PRODUCT_PACKAGES或PRODUCT_SYSTEM_PACKAGES:

# 方式1:通用添加
PRODUCT_PACKAGES += SampleSystemApp

# 方式2:更规范的system分区包声明(推荐)
PRODUCT_SYSTEM_PACKAGES += SampleSystemApp

3. 临时路径检查绕过(应急用)

如果上述配置仍触发错误,可在设备mk中添加白名单关闭对应路径检查(不推荐长期使用):

ARTIFACT_PATH_REQUIREMENT_WHITELIST += system/app/SampleSystemApp/SampleSystemApp.apk

4. 参考原生系统应用的配置逻辑

HTMLViewer、Keychain这类原生系统应用,均在Android.bp中设置product_specific: false,并通过设备级system mk或目标产品的system类mk引入,而非vendor mk。同时确保模块使用platform证书签名,这是系统应用的必要条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:46