Android4.4 preinstall方式安装apk

文章介绍了如何在Android4.4系统中预置第三方apk,使其能够在用户卸载后,在系统恢复出厂设置时自动重新安装。主要步骤包括创建preinstall目录,编写preinstall.sh脚本,创建Android.mk文件以编译apk,修改init.rc脚本以启动安装服务,并在vendor.mk中添加配置。此外,还提醒注意集成路径和不同芯片平台的文件名称差异。
摘要由CSDN通过智能技术生成

一、前言

最近遇到一个需求,需要预置第三方apk至Android 4.4系统里面。预置的apk可以被用户卸载,并且Android系统恢复出厂后,预置的apk又可以自动安装恢复。

思路分析:

  1. 可以被用户卸载,即需要安装到/data/app目录下。
  2. 恢复出厂后apk又可以自动安装,则需要将apk存放至系统的某一个目录下,设置一个标志位,刷机或者恢复出厂第一次开机安装这些apk。即采用预安装方式(preinstall)来处理。

二、preinstall集成方法

1. 建立preinstall目录

sdk根目录下输入

	mkdir -p vendor/packages/preinstall
2. 创建preinstall.sh脚本

在vendor/packages/preinstall目录下建立preinstall.sh脚本,添加以下代码:

#!/system/bin/sh

MARK=/data/local/symbol_thirdpart_apks_installed

PKGS=/system/preinstall/

if [ ! -e $MARK ]; then

    echo "booting the first time, so pre-install some APKs."

    busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;

    # NO NEED to delete these APKs since we keep a mark under data partition.
    # And the mark will be wiped out after doing factory reset, so you can install
    # these APKs again if files are still there.
    # busybox rm -rf $PKGS

    touch $MARK

    echo "OK, installation complete."

fi
3. 创建Android.mk文件

在vendor/packages/preinstall目录下建立Android.mk文件,添加以下代码:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := preinstall.sh
LOCAL_SRC_FILES := preinstall.sh
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin

include $(BUILD_PREBUILT)

manager_apk := $(patsubst $(LOCAL_PATH)/%,%,$(wildcard $(LOCAL_PATH)/*.apk))

$(foreach t,$(manager_apk), \
$(eval include $(CLEAR_VARS)) \
$(eval LOCAL_MODULE     := $(notdir $(t))) \
$(eval LOCAL_MODULE_TAGS := optional) \
$(eval LOCAL_MODULE_CLASS := ETC) \
$(eval LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall) \
$(eval LOCAL_SRC_FILES   := $(t)) \
$(eval LOCAL_CERTIFICATE := shared) \
$(eval include $(BUILD_PREBUILT)) \
)

$(LOCAL_INSTALLED_MODULE): $(notdir $(manager_apk))
4. init.rc脚本处理

在init.rc脚本里面添加以下代码:

on property:init.svc.bootanim=stopped
    start preinstall

service preinstall /system/bin/preinstall.sh
    user root
    group root
    disabled
    oneshot
5. 创建vendor.mk文件

在vendor下创建vendor.mk文件,添加以下代码:

#Third Part App
PRODUCT_PACKAGES += \
        preinstall.sh \
        $(patsubst $(TOP)/vendor/packages/preinstall/%,%,$(wildcard $(TOP)/vendor/packages/preinstall/*.apk))
6. vendor.mk参与编译

在device.mk中添加

$(call inherit-product, vendor/vendor.mk)

三、其它

1. 注意
  • 集成路径随意修改。
  • device.mk一般指的是device/xxxx/芯片型号下的mk文件,不同芯片平台名称不同。
  • init.rc一般指的是init.xxx.rc,不同芯片平台名称不同。
  • 上面将apk存放至/system/preinstall目录下,实际使用时注意system分区的大小。
2. 参考

android4.4预装第三方apk,可卸载,工厂重置后能恢复

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值