一、预置platform应用编译到/system/preinstall
二、新建preload.sh脚本,将app 复制到/data/app
具体步骤:
1.屏蔽 /build/core/Makefile内的限制
1 diff --git a/build/core/Makefile b/build/core/Makefile 2 --- a/build/core/Makefile 3 +++ b/build/core/Makefile 4 @@ -21,10 +21,10 @@ endif 5 # The filter part means "only eval the copy-one-file rule if this 6 # src:dest pair is the first one to match the same dest" 7 #$(1): the src:dest pair 8 -define check-product-copy-files 9 -$(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error 10 - Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)) 11 -endef 12 +#define check-product-copy-files 13 +#$(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error 14 +# Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)) 15 +#endef 16 # filter out the duplicate <source file>:<dest file> pairs. 17 unique_product_copy_files_pairs :=
2.添加preload.sh脚本和对应的PRODUCT_COPY_FILES
1 diff --git a/device/qcom/common/preload.sh b/device/qcom/common/preload.sh 2 new file mode 100644 3 --- /dev/null 4 +++ b/device/qcom/common/preload.sh 5 @@ -0,0 +1,7 @@ 6 +#!/system/bin/sh 7 +if [ ! -f "/data/app/installed" ]; then 8 + chmod 777 /data/app/ 9 + cp -rf /system/preinstall/* /data/app/ 10 + echo "1" > /data/app/installed 11 + chmod -R 777 /data/app/* 12 +fi
diff --git a/device/qcom/xxx/xxx.mk b/device/qcom/xxx/xxx.mk --- a/device/qcom/xxx/xxx.mk +++ b/device/qcom/xxx/xxx.mk @@ -179,7 +179,10 @@ endif PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.opengles.aep.xml:system/etc/permissions/android.hardware.opengles.aep.xml PRODUCT_PROPERTY_OVERRIDES += persist.radio.phone.matchnum=11 + +PRODUCT_COPY_FILES += device/qcom/common/preload.sh:system/bin/preload.sh
3.在项目对应的init.xxx.rc里面创建service
1 --- a/device/qcom/xxx/init.xxx.rc 2 +++ b/device/qcom/xxx/init.xxx.rc 3 @@ -55,6 +55,8 @@ on post-fs-data 4 mkdir /data/system/devices 0777 system system 5 mkdir /data/system/devices/keylayout 0777 system system 6 7 + start preload 8 + 9 10 @@ -117,3 +119,7 @@ on property:gsm.xxx.xxx=* 11 chmod 644 /data/data/sn 12 chown system system /data/data/sn 13 14 +service preload /system/bin/sh /system/bin/preload.sh 15 + user root 16 + group root 17 + oneshot
4.添加对应的selinux权限
1 --- a/device/qcom/sepolicy/xxx/init_shell.te 2 +++ b/device/qcom/sepolicy/xxx/init_shell.te 3 @@ -36,6 +36,8 @@ allow qti_init_shell powerctl_prop:property_service set; 4 allow qti_init_shell fuse:dir create_dir_perms; 5 allow qti_init_shell fuse:file create_file_perms; 6 allow qti_init_shell fuse:dir search; 7 +allow qti_init_shell apk_data_file:dir { create read write open search getattr setattr add_name }; 8 +allow qti_init_shell apk_data_file:file { create read write open getattr setattr }; 9 10 #for oem operation in slientinstall .etc. 11 allow qti_init_shell oem_file:dir search;
5.最后别忘了修改对应应用的Android.mk,添加LOCAL_MODULE_PATH 属性
1 --- a/packages/thirdparty/xxx/xxx/Android.mk 2 +++ b/packages/thirdparty/xxx/xxx/Android.mk 3 @@ -8,6 +8,7 @@ LOCAL_JAVA_LIBRARIES := xxxxxxx 4 LOCAL_SRC_FILES :=$(call all-java-files-under, src) 5 LOCAL_PACKAGE_NAME := xxx 6 LOCAL_PRIVILEGED_MODULE := true 7 +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/preinstall 8 LOCAL_CERTIFICATE := platform 9 LOCAL_PROGUARD_ENABLED := full obfuscation 10 LOCAL_STATIC_JAVA_LIBRARIES := \
原文:https://www.cnblogs.com/darinning/p/14758676.html