【实现逻辑】 通过在property_service.c中设置标志位,在设置中实现接口改变标志位, 使用init.rc中声明的服务来侦听标志位的变化,显式启动声明的服务,执行对应的脚本,把应用后缀从apk重命名为bak,从而实现隐藏(显示逻辑相反)。
【实现步骤】以隐藏Google Play Store(system/priv-app/Phonesky.apk)为例: 1.首先在system/core/init/property_service.c中声明并初始化标志位,0为隐藏,1为显示,默认隐藏

?
1
2
3
     { app.launcher.start, AID_SYSTEM, 0},
+   { app.phonesky.show, AID_SYSTEM, 0}, //Add By zj
     { cdma.,        AID_RADIO,    0 },    //Add by gfzhu VIA

2.在设置的开发者选项中实现对应的接口: 文件路径:packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java ①声明和初始化:

?
1
2
3
private static final String SHOW_PHONESKY = show_phonesky;
private CheckBoxPreference mShowPhonesky;
mShowPhonesky = findAndInitCheckboxPref(SHOW_PHONESKY);

②CheckBox的逻辑:

?
1
2
3
4
5
6
7
8
9
       (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
+      } else if (preference == mShowPhonesky) { // ZJ Add
+           if(mShowPhonesky.isChecked())
+           {
+              SystemProperties.set(app.phonesky.show,1);
+           }else{
+              SystemProperties.set(app.phonesky.show,0);
+           }
         } else if (preference == mBtHciSnoopLog) {

③增加一个Preference: packages/apps/Settings/res/xml/development_prefs.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
     android:targetClass=com.android.settings.SetFullBackupPassword />
      
+       <checkboxpreference android:key="show_phonesky" android:title="@string/show_phonesky">
     <checkboxpreference pre="">
④添加对应语言的string字符:<pre class="brush:java;"><string name="show_phonesky">Show Google Play Store</string></pre>
<br>
<br>
⑤设置中新增一个监听,初始化Checkbox的逻辑: packages/apps/Settings/src/com/android/settings/BootReceiver.java 内容如下:
<pre class="brush:java;">package com.android.settings;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.SystemClock;
import android.util.Log;
import android.os.SystemProperties;
public class BootReceiver extends BroadcastReceiver{
     @Override
     public void onReceive(Context arg0, Intent arg1) {
          // TODO Auto-generated method stub
           
          String action = arg1.getAction();
          if(action.equals(Intent.ACTION_BOOT_COMPLETED))
          {
             SharedPreferences shared = arg0.getSharedPreferences(com.android.settings_preferences, Context.MODE_PRIVATE);
             boolean show_phonesky = shared.getBoolean(show_phonesky, false);
             if(show_phonesky){
                  SystemProperties.set(app.phonesky.show,1);    
               }else{
                    SystemProperties.set(app.phonesky.show,0);    
               }
          }
     }
}</pre>
<br>
<br>
⑥在Settings的AndroidManifest文件中添加BroadcastReceiver的权限和声明:
<pre class="brush:java;"><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED/">
</uses-permission></pre>
<br>
3.在init.rc中添加对应的服务和触发条件: 路径:mediatek/config/esky27_tb_ccn_mlc_kk/init.rc
<pre class="brush:java;">+# ZJ Add START
+#Hide or Show Google Play Dynamicly
+#disabled:服务不会自动运行,必须显式地通过服务器来启动。
+#oneshot:当此服务退出时不会自动重启。
+service hidePhonesky /system/bin/hidePhonesky
+       disabled
+       oneshot   
+service showPhonesky /system/bin/showPhonesky
+       disabled
+       oneshot   
+#on property:sys.boot_completed=1
+#   start renamePhonesky
+on property:app.phonesky.show=1
+   start showPhonesky
+on property:app.phonesky.show=0
+   start hidePhonesky
+# ZJ Add END</pre>
<br>
<br>
4.隐藏和显示应用的脚本: 隐藏应用:vendor/ThirdParty/App/dte/hidePhonesky 内容:<br>
<pre class="brush:java;">#!/system/bin/sh
#!/system/bin/busybox
mount -o remount,rw /system;
mv /system/priv-app/Phonesky.apk /system/priv-app/Phonesky.bak</pre>
<br>
显示应用:vendor/ThirdParty/App/dte/showPhonesky<br>
内容:<br>
<pre class="brush:java;">#!/system/bin/sh
#!/system/bin/busybox
mount -o remount,rw /system;
mv /system/priv-app/Phonesky.bak /system/priv-app/Phonesky.apk</pre>
<br>
<br>
5.拷贝脚本到system/bin目录下: 参考以下格式添加到对应的mk文件:
<pre class="brush:java;">+#添加重命名GooglePlay脚本
+PRODUCT_COPY_FILES +=
+       vendor/ThirdParty/App/dte/hidePhonesky:system/bin/hidePhonesky
+       vendor/ThirdParty/App/dte/showPhonesky:system/bin/showPhonesky
+       vendor/ThirdParty/App/dte/Phonesky.bak:system/priv-app/Phonesky.bak</pre>
</checkboxpreference></checkboxpreference><br>
<br>
<br>
<br>
<br>

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

转载于:https://www.cnblogs.com/rabbit-bunny/p/4205178.html

Android使用init.rc触发脚本实现隐藏内置应用相关推荐

  1. android 初始化 脚本,Android init language与init.rc初始化脚本

    微信公众号:杨源鑫 如果你觉得文章对你有帮助,欢迎在评论区交流讨论 参考: android源码目录里的system/core/init/readme.txt. Android系统里以*.rc为扩展名为 ...

  2. Android 的 init.rc 文件简介【转】

    转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177 init.rc由许多的Action和Service组成.每一个语句占 ...

  3. Android: 启动init.rc 中service的权限问题【转】

    转自:http://www.linuxidc.com/Linux/2011-04/35014.htm 通过property_set("ctl.start", service_xx) ...

  4. android 在init.rc中添加bootmusic,xboot-x4412开发板问题汇总-开发 - Powered by Discuz!

    Q1:编译android时,执行mk脚本提示如下错误信息: lqm@ubuntu:~/samba/x4412_ics_rtm_v10$ ./mk -s ./mk: 95: ./mk: source: ...

  5. 微信android返回上一页位置,解决微信内置浏览器返回上一页强制刷新问题方法...

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验.而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的 ...

  6. JSP的概念||原理||JSP的脚本||JSP的内置对象||response.getWriter()和out.write()的区别||案例:改造Cookie案例

    1. 概念 * Java Server Pages: java服务器端页面         * 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码         * ...

  7. android 存储卡 合并,安卓手机合并内存卡到内置存储

    本方法的优势是使用的都是官方工具,成功率极高 1:mac需要安装adb工具 首先需要打开Mac的终端 1.1:安装homebrew:在终端中输入以下代码回车 ruby -e "$(curl ...

  8. android one 壁纸,三星手机系统?One UI 3内置原生壁纸提取分享

    One UI(前身:Samsung Experience.TouchWiz)是Samsung在2018年11月22日的Samsung开发者大会发布的全新用户界面.用以接替上一版本的 Samsung E ...

  9. Android动态换肤(一、应用内置多套皮肤)

    动态换肤在很多android应用中都有使用,用户根据自己的喜好设置皮肤主题,可以增强用户使用应用的舒适度. Android换肤可以分为很多种,它们从使用方式,用户体验以及项目框架设计上体现了明显的差异 ...

最新文章

  1. iMeta:青岛大学苏晓泉组开发跨平台可交互的微生物组分析套件PMS(全文翻译,PPT,视频)...
  2. 开发日记-20190731 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 17
  3. 如何评价英伟达9月2日凌晨发布的30系列新显卡?
  4. 计算机健康教育应用的意义,健康教育路径计算机模块的建立与应用  (3)
  5. mysql修改表结构权限_mysql 修改表结构操作
  6. Java怎么学?一些非常有用的书单和网站推荐
  7. 太强了!用200个LED做一个智能手表
  8. mysql写入监控_zabbix 自定义key 监控mysql增删查改
  9. ASP.NET状缓存Cache的应用-提高数据库读取速度
  10. Spring Boot 终极清单
  11. Linux(Ubuntu)内存查询top命令详解
  12. mdadm中文man帮助
  13. OpenCVQt学习之一——打开图片文件并显示
  14. 微软推出Windows Sandbox:可安全运行任何应用的一次性VM\n
  15. Pytest 自动化测试框架
  16. 搞清字库表、编码字符集、字符编码
  17. iOS 仿微信朋友圈实现
  18. mt6573集成MCP nandflash的详细方法
  19. View和ViewGroup中的mParent
  20. 软件测试周刊(第54期):管他乐观还是悲观,都滚蛋,干就完了。

热门文章

  1. CentOS8设置桥接网络模式,并配置静态IP及外网访问
  2. linux的O的字体让我满意那些
  3. LINUX 邮件服务器qmail 架设
  4. 2022-03-13 转载 Dockerfile 高阶使用指南及镜像优化
  5. 新疆克拉玛依有没有考计算机一级的,新疆维吾尔自治区克拉玛依2018年3月计算机等级考试公告...
  6. mysql——逗号分割字段情况
  7. 技术篇-符号制作-标记符号制作
  8. 官方文档——一篇文章弄懂Flutter中的布局
  9. JVM的7种垃圾收集器
  10. go mod 几个常用命令