以下是详细的 Android 源码应用预制教程,从环境搭建到应用集成的完整流程:
1. 环境准备
(1) 下载 AOSP 源码
# 安装依赖(Ubuntu 示例)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig# 初始化仓库(选择对应 Android 版本分支)
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r1
repo sync -j8
(2) 配置编译环境
source build/envsetup.sh
lunch aosp_arm-eng # 根据设备选择 target
2. 预制应用方式
方式 1:预制源码(源码集成)
步骤:
-
在 AOSP 目录下创建应用源码路径:
mkdir -p packages/apps/YourSystemApp
cd packages/apps/YourSystemApp
2.添加应用源码和资源文件(仿照系统应用结构):
YourSystemApp/
├── AndroidManifest.xml
├── res/
├── src/
└── Android.bp # 或 Android.mk
3.编写编译配置文件 Android.bp
:
android_app {name: "YourSystemApp",srcs: ["src/**/*.java"],resource_dirs: ["res"],certificate: "platform", # 使用系统签名privileged: true, # 设为特权应用optimize: {enabled: true,},dex_preopt: {enabled: true,},
}
方式 2:预制 APK(预编译集成)
步骤:
-
将 APK 文件放入系统目录:
mkdir -p vendor/yourcompany/prebuilt-apps/YourApp
cp YourApp.apk vendor/yourcompany/prebuilt-apps/YourApp/
2.创建编译配置文件 Android.mk
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YourApp
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform # 使用系统签名
LOCAL_PRIVILEGED_MODULE := true # 特权应用
LOCAL_SRC_FILES := YourApp.apk
include $(BUILD_PREBUILT)
若使用 Soong 构建系统,创建 Android.bp
:
android_app_prebuilt {name: "YourApp",privileged: true,certificate: "platform",apk: "YourApp.apk",product_specific: true, # 可选,针对特定设备
}
3. 将应用添加到系统编译
(1) 修改设备 Makefile
在设备配置文件中(如 device/yourcompany/yourdevice/device.mk
)添加:
PRODUCT_PACKAGES += \YourSystemApp \YourApp
(2) 配置分区归属
-
特权应用:放入
/system/priv-app
在Android.bp
/Android.mk
中设置privileged: true
。 -
普通系统应用:放入
/system/app
或/vendor/app
4. 配置系统权限
(1) 声明系统权限
在 AndroidManifest.xml
中添加权限和组件声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.yourcompany.yourapp"android:sharedUserId="android.uid.system"> <!-- 共享系统 UID --><uses-permission android:name="android.permission.REBOOT" /><applicationandroid:allowBackup="false"android:persistent="true"> <!-- 设为常驻应用 --><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.HOME" /></intent-filter></activity></application>
</manifest>
(2) 添加白名单权限
在 /etc/permissions/
下创建 privapp-permissions-yourapp.xml
:
<permissions><privapp-permissions package="com.yourcompany.yourapp"><permission name="android.permission.INSTALL_PACKAGES"/><permission name="android.permission.DELETE_PACKAGES"/></privapp-permissions>
</permissions>
5. 编译并刷机
(1) 全量编译系统
make -j8
(2) 生成刷机镜像
make otapackage # 生成 OTA 包
# 或直接刷入(需设备连接)
fastboot flash system system.img
6. 验证预制结果
(1) 检查应用安装
adb shell pm list packages -s | grep "com.yourcompany.yourapp"
(2) 检查权限状态
adb shell dumpsys package com.yourcompany.yourapp | grep "granted=true"
(3) 检查应用路径
adb shell pm path com.yourcompany.yourapp
# 预期输出:/system/priv-app/YourApp/YourApp.apk
7. 常见问题处理
问题 1:应用签名失败
-
原因:未正确配置
LOCAL_CERTIFICATE
。 -
解决:确保在
Android.mk
/Android.bp
中设置:
LOCAL_CERTIFICATE := platform # 或 shared、media 等系统签名
问题 2:权限未生效
-
原因:未在
/etc/permissions/
添加白名单。 -
解决:检查 XML 文件名和权限声明是否匹配包名。
问题 3:应用无法开机自启
-
解决:在
AndroidManifest.xml
中声明BOOT_COMPLETED
广播接收器:
<receiver android:name=".BootReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter>
</receiver>
8. 高级配置
(1) 设置默认应用(如 Launcher)
-
在
overlay/frameworks/base/core/res/res/values/config.xml
中添加:
<string name="default_home" translatable="false">com.yourcompany.yourapp</string>
(2) 禁用用户卸载
在 AndroidManifest.xml
中设置:
<application android:uninstallBlocked="true">
9. 注意事项
-
Android 版本兼容性:
-
Android 10+ 需使用
product_services
分区替代部分/system
路径。 -
Android 13+ 要求动态权限白名单需通过
RoleManager
申请。
-
-
CTS 测试:确保应用不违反 Google 兼容性要求。
-
用户数据保留:通过
android:persistent="true"
防止应用数据被清除。
通过以上步骤,您可以将应用深度集成到 Android 系统镜像中,实现开机预装、系统级权限控制等功能。根据实际需求调整配置,并始终遵循 Android 开源项目的设计规范。