今天要給一個機頂盒裝我們的產品,死活adb 不上。設置里沒有打開adb調試這項,沒輒,命令行下試試把。
參考http://hi.baidu.com/gaogaf/item/893832d6ac5b62cf1b72b472
試了下這幾個命令:
# setprop persist.service.adb.enable 1
# setprop service.adb.root 1
# setprop ctl.stop adbd
# setprop ctl.start adbd
adb 能 connect 上但是 devices 狀態是offline.
看看源碼里怎么干的。
參考:http://www.bangchui.org/simple/?t3280.html
在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。
結論:那幾條命令與源碼中效果是一樣的。
結果:都不好使,應該是板子的問題。