init程序的啟動流程,Android使用init.rc觸發腳本實現隱藏內置應用

 2023-11-18 阅读 23 评论 0

摘要:【實現邏輯】 通過在property_service.c中設置標志位,在設置中實現接口改變標志位, 使用init.rc中聲明的服務來偵聽標志位的變化,顯式啟動聲明的服務,執行對應的腳本,把應用后綴從apk重命名為bak,從而實現隱藏(顯示邏輯相反

【實現邏輯】 通過在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

init程序的啟動流程。推推族,免費得門票,游景區:www.tuituizu.com

轉載于:https://www.cnblogs.com/rabbit-bunny/p/4205178.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/175170.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息