1. Android13系统预装App基础概念
第一次接触Android系统预装App时,我也被各种专业术语绕晕了。简单来说,预装App就是在手机出厂前就已经安装在系统分区中的应用。这类应用通常分为三种类型:不可卸载的系统核心应用(如电话、短信)、可卸载的厂商应用(如预装的社交软件)、以及恢复出厂设置后会重新安装的应用(如厂商定制商城)。
在Android13中,Google进一步强化了模块化设计理念。与普通App开发不同,系统预装需要处理分区权限、系统签名、SELinux策略等底层机制。举个例子,普通App安装后存放在/data分区,而系统预装App则根据重要性分别存放在/system、/product或/vendor分区。
我去年参与过一个智能手表项目,需要在Android13系统上预装健康监测应用。当时最大的教训就是没搞清楚分区机制,把应用错误地放在了/system分区,导致后续OTA升级时遇到各种权限问题。后来才明白,对于非核心功能的应用,应该优先考虑/product分区。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 预编译APK集成方案
2.1 不可卸载应用集成
先说说最常用的场景——集成已经编译好的APK。假设我们有个测试应用testapp.apk,需要做成不可卸载的系统应用。具体操作如下:
在device/<厂商>/<产品>/prebuilt/apks目录下创建结构:
code复制testapp/
├── Android.bp
└── testapp.apk
对应的Android.bp文件内容很关键:
makefile复制android_app_import {
name: "testapp",
privileged: false, // 非特权应用
presigned: true, // 保持原签名
apk: "testapp.apk",
product_specific: true, // 安装到product分区
overrides: [],
}
这里有个容易踩坑的点:privileged属性。如果设为true,应用需要放在/system/priv-app目录,并且需要平台签名。我们项目初期就因为这个配置错误,导致应用无法获取需要的权限。
