1. 程式人生 > >android preinstall 預置應用及資源

android preinstall 預置應用及資源

全志平臺不打包data分割槽,但是有些應用必須放在data分割槽才能正常使用,放system/app下面安裝後執行會因為缺少lib庫而退出,system/app和data/app(pm) 安裝方式不一樣。網上找了些資料,最終使用preinstall的方式實現。

1 首先,修改初始化指令碼init.rc, 啟動preinstall.sh指令碼,判斷及拷貝相應的檔案。一般廠商可以配置額外的初始化設定置,例如init.sun7i.rc。

service preinstall /sbin/busybox sh /system/bin/preinstall.sh
    user root
    group root
    disabled
    oneshot

on property:sys.boot_completed=1
    start preinstall

2 preinstall.sh會被拷貝到system/bin/下面,修改如下:

MARK=/data/app/*

PKGS=/system/preinstall/

#判斷檔案是否存在

if [! -e $MARK ];then
echo "cp daohang to data"
apk_list=$(busybox find $PKGS -name "*\.apk")

echo $apk_list for apk in $apk_list do echo "install: " $apk mkdir -p /data/app cp -f $apk /data/app/app_to_install.apk chmod
644 /data/app/app_to_install.apk
/system/bin/pm install -r /data/app/app_to_install.apk rm /data/app/app_to_install.apk done
fi

3 預置檔案到system/preinstall/, 修改prebuild/preinstall/android.mk

LOCAL_PATH := $(call my-dir)

########################################
include $(CLEAR_VARS)
LOCAL_MODULE := flashplayer
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall
LOCAL_MODULE_CLASS := APPS
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)

#######################################

這樣基本上就可以了。

參考:http://www.2cto.com/kf/201505/402769.html