標籤:參考 模式 提示 相關 內容 adb blank 程式 啟動
本文轉載自:http://www.wxtlife.com/2015/11/24/Android-set-adb-status/
想第一時間擷取我的最新文章,請關注公眾號: 技術特工隊
在整機系統開發中,一般系統預設的adb開發是開啟的,那麼在對外發布的系統中,肯定是不希望預設開啟adb的,但是在開發的過程中,肯定希望能夠通過某種操作開啟adb,便於調試,這就需要在系統的某個部位做一個開關了。那麼這篇文章就是說說這邊是如何做到在系統中增加一個adb開關。
-
- 在系統中有一個usb deubg的開關,此開關是開啟usb調試的對adb 但是通過預設設定的開發人員模式都可以將其開啟。
-
- adb 啟動肯定會啟動了一個
adbd
服務,那麼手動將該服務kill掉就可以關閉adb服務了.當然這樣是在adbd啟動後可以這麼做,但是還是直接預設就不啟動服務吧,需要的時候在開啟吧。
開啟adbd
服務實際是再系統啟動中 init.rc
檔案中啟動的,裡面有很很多部分有調用start adbd
或者restart adbd
這部分是Android啟動流程中zygote(受精卵)啟動的,這部分涉及整個安卓的啟動流程,以及init.rc
檔案的定義和使用大家可以查看網上資料。
首先要將所有系統中start adbd
和restart adbd
的部分將其注釋掉,不使用系統預設啟動方式。一般都是在init.rc
檔案中,在使用find . -iname "init*.rc" | xargs grep "adbd"
將系統中所有有關adbd服務的都將其搜尋出來,避免遺漏。
再開看看init.rc
檔案中的adbd服務是怎麼定義的:
123456 |
# adbd is controlled via property triggers in init.<platform>.usb.rcservice adbd /sbin/adbd class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0 |
實際上它是定義了一個sbin/adbd
檔案為adbd服務,在init.rc
檔案中定義服務,那我們就使用init.rc
檔案中的觸發器來控制adbd服務的開啟與關閉。定義一個屬性persist.sys.adbd.on
來標記adb的開關狀態,定義觸發器內容如下:
12345 |
on property:persist.sys.adbd.on=1 start adbd on property:persist.sys.adbd.on=0 stop adbd |
看字面上的意思也可以大致看出來當property系統屬性persist.sys.adbd.on
改變的時候在init.rc中能夠收到改變的訊息。且當屬性值為1的時候,則會調用start adbd
,當為0的時候則會調用stop adbd
,因為adbd是一個服務,通過start和stop即可控制,這樣通過程式中設定property屬性即可切換adb的狀態了。
大致的實現過程就是這樣了,口才文采不行,表達不好,見諒。
這裡面需要瞭解一些Android啟動過程,以及init檔案定義等。
提示:要設定系統屬性需要系統許可權才行,所以這種也只是自己開發系統應用才起作用。
關於許可權相關的文章參考http://blog.csdn.net/a345017062/article/details/6254402
Android系統設定Android adb 開關的方法【轉】