usb debugging的实现机制 转载

在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

代码如下

  1. class ServerThread extends Thread {
  2.     private static final String TAG = "SystemServer";
  3.     private final static boolean INCLUDE_DEMO = false;
  4.     private static final int LOG_BOOT_PROGRESS_SYSTEM_RUN = 3010;
  5.     private ContentResolver mContentResolver;
  6.     private class AdbSettingsObserver extends ContentObserver {
  7.         public AdbSettingsObserver() {
  8.             super(null);
  9.         }
  10.         @Override
  11.         public void onChange(boolean selfChange) {
  12.             boolean enableAdb = (Settings.Secure.getInt(mContentResolver,
  13.                 Settings.Secure.ADB_ENABLED, 0) > 0);
  14.             // setting this secure property will start or stop adbd
  15.            SystemProperties.set("persist.service.adb.enable", enableAdb ? "1" : "0");
  16.         }
  17.     }

复制代码

在linux的启动配置文件init.rc中有这样的配置。

  1. # adbd is controlled by the persist.service.adb.enable system property
  2. service adbd /sbin/adbd
  3.     disabled
  4. # adbd on at boot in emulator
  5. on property:ro.kernel.qemu=1
  6.     start adbd
  7. on property:persist.service.adb.enable=1
  8.     start adbd
  9. on property:persist.service.adb.enable=0
  10.     stop adbd

复制代码

从这里我们可以看出来其实设定adb_enabled与否其实就是在控制是否启动adbd这个daemon。

你可能感兴趣的:(usb debugging的实现机制 转载)