跳转至

应用预装

本章节介绍如何将应用预装为系统应用,设备启动后即可使用,无需手动安装。

Warning

T113 系列主板不支持安卓系统。
H618 系列主板安卓系统为 armeabi-v7a 架构,其他系列均为 arm64 架构。
armeabi-v7a 系统不能安装 arm64 的应用 !
arm64 系统向下兼容 armeabi-v7a 应用。

预装路径

根据对应的 SDK 源码,查看对应编译配置 .mk 文件以及应用预装路径。

// rk-android13.0
device/rockchip/common/device.mk
vendor/rockchip/common/apps/

// rk-android14.0
device/rockchip/common/device.mk
vendor/rockchip/common/apps/

// h618-android12.0
vendor/aw/homlet/homlet.mk
vendor/aw/public/prebuild/

// t527-android13.0
device/softwinner/saturn/t527-demo/device-common.mk
vendor/aw/public/prebuild/apk/

// a133-android10.0-v2.0
android/device/softwinner/ceres-c3/ceres_c3.mk
android/vendor/aw/homlet/prebuild/

// a733-android13.0
device/softwinner/jupiter/a733-demo-aiot/device-common.mk
vendor/aw/public/prebuild/apk/

预装示例

以 RK3568 K1 为例,预装 TestLauncher.apk 应用。

1. 在应用预装路径下创建 TestLauncher 自定义目录,存放应用。

rk-android13.0$ ls vendor/rockchip/common/apps/TestLauncher/
TestLauncher.apk

2. 编写 Android.mk 或 Android.bp 编译构建脚本。

rk-android13.0$ ls vendor/rockchip/common/apps/TestLauncher/
Android.mk
TestLauncher.apk

3. 在编译配置 .mk 文件对应的文件末尾添加模块 PRODUCT_PACKAGES 声明。

Note

模块名称对应 Android.mk 中的 LOCAL_MODULE := 或对应 Android.bp 中的 name:

--- a/device/rockchip/common/device.mk
+++ b/device/rockchip/common/device.mk
@@ -65,6 +65,9 @@ PRODUCT_PACKAGES += \
     fsck.f2fs \
     mkfs.f2fs \
     fsck_f2fs

PRODUCT_PACKAGES += \
     vndservicemanager

+PRODUCT_PACKAGES += \
+    TestLauncher
+

Android.mk 示例

以 TestLauncher.apk 应用为例,编写的 Android.mk 构建脚本如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform

LOCAL_MODULE := TestLauncher
LOCAL_SRC_FILES := TestLauncher.apk

include $(BUILD_PREBUILT)

Note

参数解析:
LOCAL_PATH := $(call my-dir):设置当前模块的路径。
include $(CLEAR_VARS):清除之前定义的变量,避免干扰当前模块。
LOCAL_MODULE_TAGS := optional:标记为可选模块。
LOCAL_MODULE_CLASS := APPS:指定模块类别为应用。
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX):使用标准 APK 后缀。
LOCAL_CERTIFICATE := platform:使用平台签名。
LOCAL_MODULE := TestLauncher:模块名称。
LOCAL_SRC_FILES := TestLauncher.apk:指定 APK 文件路径。
include $(BUILD_PREBUILT):使用预编译构建方式。
LOCAL_PRIVILEGED_MODULE := true:将应用安装到 /system/priv-app 目录,获得更多系统权限。

Android.bp 示例

以 TestLauncher.apk 应用为例,编写的 Android.bp 构建脚本如下

android_app_import {
    name: "TestLauncher",
    apk: "TestLauncher.apk",

    certificate: "platform",
    dex_preopt: {
        enabled: true,
    },

    privileged: true,
    enforce_uses_libs: false,
}

Note

命令解析:
name:模块名称,与 Android.mk 的 LOCAL_MODULE 对应。
apk:APK 文件路径,相对于 Android.bp 所在目录。
certificate:签名方式。作为桌面应用必须使用 "platform" 平台签名,"presigned" 保留原签名仅适用于普通应用。
dex_preopt:是否对 APK 进行 dex 预优化,enabled: true 可加快首次启动速度。
privileged:是否安装到 /system/priv-app,对应 LOCAL_PRIVILEGED_MODULE。桌面应用必须设为 true
enforce_uses_libs:是否强制检查 APK 声明的 shared library。