android源码应用预制

以下是详细的 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:预制源码(源码集成)

步骤:

  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(预编译集成)

步骤:

  1. 将 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" />
    
    <application
        android: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 开源项目的设计规范。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值