【实现逻辑】 通过在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

Android使用init.rc触发脚本实现隐藏内置应用的更多相关文章

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

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

  2. Android修改init.rc和init.xx.rc文件【转】

    本文转载自:https://blog.csdn.net/u013686019/article/details/47981249 一.文件简介 init.rc:Android在启动过程中读取的启动脚本文 ...

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

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

  4. android中init.rc文件的解析问题

    init.rc中文件里会通过import /init.${ro.hardware}.rc文件,这个ro.hardware应该是某个详细的属性.而这个ro.hardware赋值应该是在Init进程中赋值 ...

  5. Android 重定向 init.rc中服务的输出

    在init.rc中运行的服务,由于系统启动的时候将标准输出重定向到了/dev/null, 所以服务中的打印信息都不可见. 但调试时可能需要看到其中的打印信息,因此就有了logwrapper这个工具:l ...

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

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

  7. 开源的Android开发框架-------PowerFramework使用心得(三)内置浏览器BrowserActivity

    使用内置浏览器必须是引用源码的方式(因为jar中不能打包布局文件等资源).内置浏览器是一个继承自BaseActivity的普通Activity,使用WebView实现. 1.简单的打开内置浏览器 In ...

  8. Android启动脚本init.rc(2)

    在Android中使用启动脚本init.rc,可以在系统的初始化中进行简单的操作. init.rc启动脚本路径:system/core/rootdir/init.rc 内容: Commands:命令 ...

  9. Android init.rc解析【转】

    转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...

随机推荐

  1. [官网]关于EPEL

    EPEL/zh-cn https://fedoraproject.org/wiki/EPEL/zh-cn Contents [hide]  1企业版 Linux 附加软件包(EPEL) 1.1什么是企 ...

  2. WorkStation Linux 客户端 虚拟机的使用过程

    1. 安装Workstation 版本选择 12.5 以上的版本 2. 安装完成之后 选择 打开虚拟机->选择 ovf文件 选择 ovf 文件 选择读入即可 3. 设置虚拟机的选项: 3.1  ...

  3. OSCHINA 公布 2019 年度最受欢迎中国开源软件

    https://www.oschina.net/project 此文章从此处转载:https://www.oschina.net/project/top_cn_2019?utm_source=star ...

  4. [MtOI2019]永夜的报应 题解

    题面 题面说的乱糟糟的看起来似乎是个可持久化线性基: 然而~ 一个式子搞定一切: a^b<=a+b 那么把所有数异或起来便是答案: #include <bits/stdc++.h> ...

  5. SpringMVC-JSON数据交换

    在上Springmvc-JSON数据交换的时候,老师提出了两个问题: 1.JSON数据交互两个注解的作用? 2.静态资源访问的几种配置方式,并简述? 老师刚提出这两个问题的时候我一头雾水的.JSON数 ...

  6. alembic 实践操作

    1. alembic [--config */alembic.ini ] current 2. alembic revision -m "add columns" 编辑生产的模板文 ...

  7. 手把手带你了解sass

    sass的使用 减少重复的工作 1.变量的声明: 是以$开头给变量命名; $height-color: #F30 2.变量的使用范围: 变量可以在多个地方存在,不一定限制在代码块中.但是如果定义在了代 ...

  8. 简单了解 node net 模块

    简单了解 node net 模块 文章记录了对net 模块的简单理解分析. net模块 简单使用 net.Server 类 net.Socket 类 总结 1.1 net模块 Node.js 的 Ne ...

  9. 修改MIGO或者ML81N产生的会计凭证项目文本增强

    在程序:MM07MFF9_F_BELEG_ERGAENZEN下做隐式增强

  10. WebApi 生成帮助文档及顺便创建简单的测试工具

    http://www.2cto.com/kf/201607/522971.html ==========最终的效果图========== ==========下面开始干活========== 一.创建 ...