Android-如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
2018-03-14 11:36
621 查看
方案:
第一步:把apk编译到/system/preloadapp/
第二步:在系统启动时将其安装到/data/app/
第三步:配置各种相关权限
---------------------------------------------------------------------------------
|----preloadapp.sh #安装脚本
|----HelloWorld.apk #要预置的Apk.
Android.mk:LOCAL_PATH := $(call my-dir)
#preloadapp.sh
just_copy_to:=$(PRODUCT_OUT)/system/bin/
just_copy_from:=$(LOCAL_PATH)/preloadapp.sh
$(shell mkdir -p $(just_copy_to))
$(shell cp $(just_copy_from) $(just_copy_to))
#HelloWorld.apk
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWrold.apk
LOCAL_MODULE_TAGS := optional userdebug
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)做了两件事:1.把当前目录的preloadapp.sh拷贝到/system/bin/
2.把当前目录所有的apk拷贝到/system/preloadapp/
(preloadapp.sh负责在首次启动时把/system/preloadapp/下的apk拷贝到/data/app/)
preloadapp.sh:#!/system/bin/sh
PATH=/sbin:/system/sbin:/system/bin:/system/xbin
export PATH
PRELOAD_DEST=/data/app
PRELOAD_FLAG=${PRELOAD_DEST}/preloadapp
PRELOAD_SOURCE=/system/preloadapp
if [ ! -d ${PRELOAD_DEST} ]; then
mkdir -p ${PRELOAD_DEST}
fi
if [ ! -f ${PRELOAD_FLAG} ]; then
cp -f -p ${PRELOAD_SOURCE}/* ${PRELOAD_DEST}/
echo "abcd" > ${PRELOAD_FLAG}
fi
service preloadapp system/bin/preloadapp.sh
class main
user system
group system
oneshot
on property:sys.boot_completed=1
chown system shell /system/bin/preloadapp.sh
chmod 0500 /system/bin/preloadapp.sh
chown system system /system/preloadapp/*
chmod 0701 system /system/preloadapp/*
start preloadapp
# preloadapp - service
type preloadapp, domain;
type preloadapp_exec, exec_type, file_type;
init_daemon_domain(preloadapp)
allow preloadapp app_data_file:file { read write create getattr };
在external/sepolicy/service_contexts中添加:/system/bin/preloadapp.sh u:object_r:preloadapp_exec:s0
第一步:把apk编译到/system/preloadapp/
第二步:在系统启动时将其安装到/data/app/
第三步:配置各种相关权限
---------------------------------------------------------------------------------
详解:
【编译】创建preloadapp目录:
|----Android.mk #Makefile|----preloadapp.sh #安装脚本
|----HelloWorld.apk #要预置的Apk.
Android.mk:LOCAL_PATH := $(call my-dir)
#preloadapp.sh
just_copy_to:=$(PRODUCT_OUT)/system/bin/
just_copy_from:=$(LOCAL_PATH)/preloadapp.sh
$(shell mkdir -p $(just_copy_to))
$(shell cp $(just_copy_from) $(just_copy_to))
#HelloWorld.apk
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWrold.apk
LOCAL_MODULE_TAGS := optional userdebug
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)做了两件事:1.把当前目录的preloadapp.sh拷贝到/system/bin/
2.把当前目录所有的apk拷贝到/system/preloadapp/
(preloadapp.sh负责在首次启动时把/system/preloadapp/下的apk拷贝到/data/app/)
preloadapp.sh:#!/system/bin/sh
PATH=/sbin:/system/sbin:/system/bin:/system/xbin
export PATH
PRELOAD_DEST=/data/app
PRELOAD_FLAG=${PRELOAD_DEST}/preloadapp
PRELOAD_SOURCE=/system/preloadapp
if [ ! -d ${PRELOAD_DEST} ]; then
mkdir -p ${PRELOAD_DEST}
fi
if [ ! -f ${PRELOAD_FLAG} ]; then
cp -f -p ${PRELOAD_SOURCE}/* ${PRELOAD_DEST}/
echo "abcd" > ${PRELOAD_FLAG}
fi
【安装】boot完成后拷贝:
在system/ore/rootdir/****/init.rc中增加以下内容:service preloadapp system/bin/preloadapp.sh
class main
user system
group system
oneshot
on property:sys.boot_completed=1
chown system shell /system/bin/preloadapp.sh
chmod 0500 /system/bin/preloadapp.sh
chown system system /system/preloadapp/*
chmod 0701 system /system/preloadapp/*
start preloadapp
【权限】
增加external/sepolicy/preloadapp.te:# preloadapp - service
type preloadapp, domain;
type preloadapp_exec, exec_type, file_type;
init_daemon_domain(preloadapp)
allow preloadapp app_data_file:file { read write create getattr };
在external/sepolicy/service_contexts中添加:/system/bin/preloadapp.sh u:object_r:preloadapp_exec:s0
相关文章推荐
- MTK android6.0 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复
- 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
- 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?
- 预置APK使用户可以卸载,并且恢复出厂设置时能够恢复
- Android如何将第三方预装的AP安装在data/app下面,用户可以选择卸载,但是在用户恢复出厂设置后,会再次自动安装
- Android如何将第三方预装的AP安装在data/app下面,用户可以选择卸载,但是在用户恢复出厂设置后,会再次自动安装
- Android高通预置apk可卸载,恢复出厂设置可恢复
- Android 高通代码预制apk可卸载,恢复出厂设置apk可恢复
- Android 高通代码预制apk可卸载,恢复出厂设置apk可恢复 Android M 6.0
- Android 8.0 高通代码预制apk可卸载,恢复出厂设置apk可恢复
- android启动:app_process实现恢复出厂设置可恢复的apk预置
- Android 如何才能捕获系统的恢复出厂设置事件
- Android 如何才能捕获系统的恢复出厂设置事件
- Android 如何才能捕获系统的恢复出厂设置事件
- Android 如何才能捕获系统的恢复出厂设置事件
- 关于mac OS X如何恢复网络出厂设置,基本可以解决mac各种网络链接问题。
- Android 如何才能捕获系统的恢复出厂设置事件
- Android 如何才能捕获系统的恢复出厂设置事件
- android 双SD卡切换(SD SWAP) 方案,如何恢复“设置->存储->默认存储器”的用户选择功
- Android 如何才能捕获系统的恢复出厂设置事件