usb debugging的實現機制
阿新 • • 發佈:2019-02-02
在settings中,有一個控制是否允許遠端除錯的選項usb debugging,當這個開關為off的時候,無法使用adb,也不能把**當作ms-storage來使用。 java中能訪問的設定儲存在/data/data/com.android.providers.settings/databases/settings.db裡面。
欄位名字叫做 adb_enabled。使用者操作settings來修改設定時,實際上就是改變這個欄位。
android程序system server中起了一個執行緒在一直監視db的這個欄位。
根據這個欄位的值來修改system propertity,其實也就是修改linux的環境變數
persist.service.adb.enable
程式碼如下
- class ServerThread extends Thread {
- private static final String TAG = "SystemServer";
- private final static boolean INCLUDE_DEMO = false;
- private static final int LOG_BOOT_PROGRESS_SYSTEM_RUN = 3010;
- private ContentResolver mContentResolver;
- private class AdbSettingsObserver extends ContentObserver {
- public AdbSettingsObserver() {
- super(null);
- }
- @Override
- public void onChange(boolean selfChange) {
- boolean enableAdb = (Settings.Secure.getInt(mContentResolver,
- Settings.Secure.ADB_ENABLED, 0) > 0);
- // setting this secure property will start or stop adbd
- SystemProperties.set("persist.service.adb.enable", enableAdb ? "1" : "0");
- }
- }
在linux的啟動配置檔案init.rc中有這樣的配置 - # adbd is controlled by the persist.service.adb.enable system property
- service adbd /sbin/adbd
- disabled
- # adbd on at boot in emulator
- on property:ro.kernel.qemu=1
- start adbd
- on property:persist.service.adb.enable=1
- start adbd
- on property:persist.service.adb.enable=0
- stop adbd
從這裡我們可以看出來其實設定adb_enabled與否其實就是在控制是否啟動adbd這個daemon。