You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在AOSP构建中将预装APK部署至data/app目录?

解决AOSP 6.0.1中预装APK到/data/app的问题

我帮你梳理了针对Android 6.0.1_r77版本的正确配置步骤,解决你把预装APK放到/data/app的问题:

一、正确编写Android.mk文件

把你的APK放到packages/apps/YourAppName目录下,然后创建如下Android.mk(替换掉括号里的内容):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# 标记为可选模块,确保能被产品配置包含
LOCAL_MODULE_TAGS := optional
# 你的APK名称(不要带.apk后缀)
LOCAL_MODULE := YourAppName
# 对应目录下的APK文件名
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

# 签名配置:如果APK已用platform签名就用这个,第三方未签名APK改用PRESIGNED
LOCAL_CERTIFICATE := platform

# 关键:指定安装到/data/app的预定义变量
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
# 禁用DEX预编译,data/app的应用默认不需要这个配置(否则可能编译报错)
LOCAL_DEX_PREOPT := false

include $(BUILD_PREBUILT)

二、添加到产品配置

不建议直接修改build/target/product/core.mk(这是系统核心配置,影响所有产品),更推荐修改你当前使用的产品配置文件,比如默认的x86模拟器对应device/generic/x86/aosp_x86.mk,在文件末尾添加:

PRODUCT_PACKAGES += YourAppName

如果一定要修改core.mk,确保把YourAppName添加到PRODUCT_PACKAGES的列表中。

三、排查你之前配置的问题

你之前的尝试中出现路径错误的原因:

  • 使用$(TARGET_OUT_DATA)会把APK放到/data根目录,而非/data/app,必须用$(TARGET_OUT_DATA_APPS)这个AOSP预定义变量,它直接对应/data/app路径;
  • LOCAL_MODULE_TAGS := tests会把模块标记为测试组件,默认不会被普通产品配置包含,即使你加了PRODUCT_PACKAGES,也可能被过滤,所以保持optional标签更稳妥。

四、验证结果

  1. 清理旧编译产物:make clean 或者单独清理你的模块:mmm packages/apps/YourAppName/ clean
  2. 重新编译:make -j$(nproc)(根据你的CPU核心数调整并发数)
  3. 启动模拟器后,通过adb查看:adb shell ls /data/app,你应该能看到带后缀的APK文件(比如YourAppName-1.apk),这就说明成功安装到/data/app了。

内容的提问来源于stack exchange,提问作者Sihyeon Kim

火山引擎 最新活动