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)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用代码实现恢复出厂设置,你需要具有系统权限和系统签名。首先,在你的Android APP的manifest文件中添加android:sharedUserId="android.uid.system"以获取系统权限。接下来,你可以参照系统源码的广播形式来实现恢复出厂设置。具体代码如下所示: ```java public void resetSystem() { Intent intent = new Intent("android.intent.action.FACTORY_RESET"); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.setPackage("android"); intent.putExtra("android.intent.extra.REASON", "FactoryMode"); //是否擦除SdCard intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", true); intent.putExtra("android.intent.extra.EXTRA_WIPE_ESIMS", true); sendBroadcast(intent); } ``` 以上代码可以实现恢复出厂设置的功能。其中,你需要注意根据不同的系统版本选择不同的intent action,例如在Android 8.0中使用"android.intent.action.FACTORY_RESET",而在Android 9.0中使用"android.intent.action.MASTER_CLEAR"。此外,你还可以根据需要决定是否擦除SD卡和ESIM卡的内容。这段代码将发送一个广播,将设备重置为出厂设置。 另外,还有一种实现方式是通过PhoneWindowManager.java文件接收来自内核的按键信息,然后发送广播来进行恢复出厂设置。你可以使用event.getDownTime()和event.getEventTime()来计算按键的时间。这种方式的核心是通过广播来实现恢复出厂设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Android APP 代码实现恢复出厂设置](https://blog.csdn.net/susanyuanaijia/article/details/106557086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2021-11-12 Android 11 长按按键进入恢复出厂设置的实现方法-PhoneWindowManager里面用发广播的模式](https://blog.csdn.net/qq_37858386/article/details/121293375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值