1.init.rc配置:
on property:init.svc.bootanim=stopped
start preinstall
service preinstall /system/bin/preinstall.sh
user root
group root
disabled
oneshot
2./system/bin/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源码device/....../apps/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.android源码device/....../device.mk增加:
#Third Part Apps
PRODUCT_PACKAGES += \
preinstall.sh \
$(patsubst $(DEVICE_SOURCES)/apps/preinstall/%,%,$(wildcard $(DEVICE_SOURCES)/apps/preinstall/*.apk))
本文介绍了如何在Android 4.4系统中预装第三方APK,并使其成为可卸载状态。通过在init.rc配置启动preinstall服务,使用/system/bin/preinstall.sh脚本来管理预装应用,以及在android源码中进行相关模块和包的定义,使得这些应用在工厂重置后仍能恢复。这一方法为Android设备提供了更灵活的预装应用管理方案。
9419

被折叠的 条评论
为什么被折叠?



