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


代码如下

  • 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。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值