【问题标题】:Pre-install some apps so they can be uninstalled without root by user预安装一些应用程序,以便用户无需 root 即可卸载它们
【发布时间】:2018-11-21 15:51:43
【问题描述】:

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

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

附:例如,我知道华为使用 /system/delapp 来安装此类应用程序。但我正在寻找一种通用方式或专门针对我正在开发的 AMLogic 平台!

【问题讨论】:

  • 只有在 /data 中的应用才能被移除。所以我有了一个想法,在设备上安装你想要的所有应用程序,并将数据分区制作成镜像。但这可能不像我想的那么容易。
  • 我认为这不是其他供应商尝试放置其应用程序的方式...@reavenisadesk

标签: android-source android-7.1-nougat


【解决方案1】:

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

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

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)

并将应用添加到device.mk中的产品包中:

PRODUCT_PACKAGES += myapp1 myapp2 ...

您应该能够在 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

安装程序脚本可以很简单:

for apkfile in /path/to/custom/apps/*.apk; do
   /system/bin/pm install "$apkfile"
done

【讨论】:

  • 你能解释一下如何创建 userdata.img 吗?以及在 AOSP 构建环境中打包镜像时如何将这个新分区与其他分区打包
  • 只需像往常一样添加那个make文件并调用make,它就会为你生成userdata.img分区(因为BUILD_PREBUILT$TARGET_OUT_DATA)。您像往常一样将它与其他分区一起打包(system.img、userdata.img、recovery.img 等,在同一目录中)。
  • 我看到了 userdata.img,现在我不知道如何将这个新分区与其他分区打包(因为默认的 AOSP 行为是不将此分区打包到最终映像中)... .但无论如何,这个解决方案在其终极上并不完美。因为一旦用户恢复出厂设置,应用程序就消失了! (因为系统分区中没有第一次启动时安装的APK版本)@John
  • 它应该是这样工作的。您无法使用户数据在出厂重置后仍然存在。您可以做的是用 system.img 打包一个“存根”应用程序,将完整的应用程序放在 Play 商店中,并让存根应用程序提示用户更新到完整的应用程序。例如,检查 Facebook 如何在某些设备上发布存根应用程序。
  • 但是华为用这个patent来更优雅地处理这个问题。您可以卸载预装的应用程序,但如果您恢复出厂设置,它们会返回!
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2012-06-25
  • 2010-10-29
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2019-12-13
  • 2015-07-22
相关资源
最近更新 更多