1. 程式人生 > >Android 8.0 高通程式碼預製apk可解除安裝,恢復出廠設定apk可恢復

Android 8.0 高通程式碼預製apk可解除安裝,恢復出廠設定apk可恢復

1:做個指令碼去實現拷貝APK都data/app目錄下面:

#!/vendor/bin/sh
sleep 1
cp /system/pre_install/RunUiTest/RunUiTest.apk /data/app/

chmod 777 /data/app/RunUiTest.apk

2:把指令碼加入編譯:

    1》把指令碼放到device/qcom/common/rootdir/etc/copy_apps.sh目錄下面,

    2》修改device/qcom/common/base.mk

        INIT += copy_apps.sh   

    3》修改device/qcom/common/rootdir/Android.mk

         include $(BUILD_PREBUILT)
 
         include $(CLEAR_VARS)
        +LOCAL_MODULE       := copy_apps.sh
        +LOCAL_MODULE_TAGS  := optional eng
        +LOCAL_MODULE_CLASS := ETC
        +LOCAL_SRC_FILES    := etc/copy_apps.sh
        +LOCAL_MODULE_PATH  := $(TARGET_OUT_VENDOR_EXECUTABLES)
        +include $(BUILD_PREBUILT)
        +
        +include $(CLEAR_VARS)
         LOCAL_MODULE       := init.class_main.sh
         LOCAL_MODULE_TAGS  := optional eng

         LOCAL_MODULE_CLASS := ETC

3,啟動這個SH腳本當服務:

    修改新增啟動服務:

    device/qcom/common/rootdir/etc/init.qcom.rc

    新增:

    +service copy_apps  /vendor/bin/copy_apps.sh
+    class core
+    user root

+    oneshot

此處不需要去想正常的服務啟動一樣去新增TE的啟動判斷:

+#on property:sys.boot_completed=1

+#   start copy_apps

4,要啟動服務,必須給這個服務加個SELinux domain

但是我們的sh指令碼可以直接新增到qti_init_shell_exec系統已有的,所以不需要去單獨新增te檔案來做這個domain新增的程序增加域、執行許可權

修改device/qcom/sepolicy/common/file_contexts

新增:

+/(vendor|system/vendor)/bin/copy_apps.sh                u:object_r:qti_init_shell_exec:s0

到此就結束了。

附帶不需要的TE檔案內容:

########################################
# sepolicy rules for copy_apps
########################################


type copy_apps, domain;


type copy_apps_exec, exec_type, vendor_file_type, file_type;
domain_auto_trans(init, copy_apps_exec, copy_apps);------程式碼都用這個,沒有去管它什麼意思

#init_daemon_domain(copy_apps);-------------網上都用這個

#allow copy_apps sysfs:file { read open };

如果是要加獨立te的方式,那device/qcom/sepolicy/common/file_contexts的修改要換成自己的te:

/vendor/bin/copy_apps.sh                u:object_r:copy_apps_exec:s0

這樣會報很多avc許可權問題,自己log列印有很多,但是apk還是正常拷貝過去了,~~

題外話:

正常的服務啟動是要加te檔案,因為有很多許可權,針對log報什麼avc就加對應的許可權檔案

下面有關別人的解說拷貝轉載:供TE新增參考:

沒有定義SELinux domain,導致服務xxx無法自啟動。為了解決這個問題我們按如下方式修改或新增sepolicy檔案:

修改seplicy/file_contexts檔案,新增以下內容:
/system/bin/xxx     u:object_r:xxx_exec:s0
  • 1
新增xxx.te檔案,並在其中新增如下內容:
需要為新增的程序增加域、執行許可權
type xxx, domain;
type xxx_exec, exec_type, file_type;
然後啟用這個域
init_daemon_domain(xxx)