天天看點

Android系統設定Android adb 開關的方法【轉】

想第一時間擷取我的最新文章,請關注公衆号: ​​技術特工隊​​

在整機系統開發中,一般系統預設的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服務是怎麼定義的:

1

2

3

4

5

6

# adbd is controlled via property triggers in init.<platform>.usb.rc

service 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的開關狀态,定義觸發器内容如下:

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檔案定義等。

提示:要設定系統屬性需要系統權限才行,是以這種也隻是自己開發系統應用才起作用。