预装一些应用程序,以便用户无需root即可卸载

Sal*_*leh 6 android-source android-7.1-nougat

我(作为 AOSP 构建者)可以预安装一些应用程序,以便在设备上刻录后可以轻松卸载它们(就像常规下载的应用程序一样)吗?

我已经熟悉系统应用程序和隐私应用程序,但由于它们位于系统分区中,因此无法删除!(仅在设置菜单中禁用)

PS 我知道华为例如使用 /system/delapp 来安装此类应用程序。但我正在寻求一种通用方法或专门针对我正在研究的 AMLogic 平台!

Joh*_*ohn 3

您可以通过配置构建来生成userdata.img包含您的应用程序的文件来做到这一点,然后您可以使用fastboot flash userdata.

Android.mk这些应用程序的文件大致如下userdata.img所示:

include $(CLEAR_VARS)
LOCAL_MODULE := myapp1
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/app
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)

并将应用程序添加到产品包中device.mk

PRODUCT_PACKAGES += myapp1 myapp2 ...
Run Code Online (Sandbox Code Playgroud)

您应该能够在 GitHub 上找到大量示例,例如https://github.com/search?l=Makefile&q=TARGET_OUT_DATA+BUILD_PREBUILT&type=Code


由于您是从头开始构建映像,因此您可以将应用程序放在下面的自定义目录中,并打包一个脚本,以便在启动时安装它们(如果尚未安装)。您可以通过编辑文件来调用该脚本,init.rc如下所示:

on property:dev.bootcomplete=1
    exec - system system -- /system/bin/sh /path/to/installer/script.sh
Run Code Online (Sandbox Code Playgroud)

安装程序脚本可以简单如下:

for apkfile in /path/to/custom/apps/*.apk; do
   /system/bin/pm install "$apkfile"
done
Run Code Online (Sandbox Code Playgroud)