2012年9月26日水曜日

Androidのadbのメモ(12) adbdをTCPモードに切り替える

システムプロパティの値を直接書き直したりもしましたが、今のところ一番よいと思われる手順は以下です。

まずUSBでつながっている状態で、ネットワークのIPアドレスを確認します。

$ adb shell netcfg  lo       UP    127.0.0.1       255.0.0.0       0x00000049  eth0     UP    192.168.1.56    255.255.255.0   0x00001043  

TCPモードへの切り替えコマンドを実行します。指定するポート番号は5555から5585までの奇数です。

$ adb tcpip 5555  restarting in TCP mode port: 5555  $ adb devices  List of devices attached     $  

ここでadb deviceとしてUSBでの接続が切れたことを確認します。もしこれで切れない場合はTCPモードへの切り替えがうまくいっていません。そうなる原因については後述。

新たにTCP経由で接続するためには、まずadb serverを終了させ、環境変数ADBHOSTにさきほど調べたIPアドレスをセットしてadb serverを起動します。そのあとは通常通り使えるはずです。

$ adb kill-server  $ ADBHOST=192.168.1.56 adb start-server  * daemon not running. starting it now on port 5037 *  * daemon started successfully *  $ adb devices  List of devices attached   emulator-5554	device    $   

TCP経由で接続している場合は、emulatorであってもなくても"emulator-" + (ポート番号 - 1)の名前で認識されます。

"adb tcpip"を実行したときのadbdの動作

system/core/adb/services.c: restart_tcp_service を見てください。

property_set("service.adb.tcp.port", value);

でシステムプロパティを書き換えた後に、exit(1)で自分でプロセスを終了させます。するとinitがadbdを再起動するので、そのときに"service.adb.tcp.port"の値を見てTCPモードになります。

Android 4.0ではadbdがsecureモードでも問題なくTCPモードに切り替えることができますが、Android 2.3までだとadbdがroot権限で動いていないと"service.adb.tcp.port"のシステムプロパティの書き換えがPermission deniedで失敗します。その結果、adbdが再起動してもUSBモードのままです。

注意

adbdをTCPモードにしたときは、セキュリティ的には無防備です。誰でもパスワード無しでshellが使えてしまいますし、通信経路も暗号化されていません。公衆無線LANなどで使うべきではないですね。

Android 2.3でsecureモードでもadbをTCPに切り替え可能にするパッチ

initのソースコードの以下の一行を追加してリビルドしたものに置き換えることができれば、Android 2.3でsecureモードでもadbをTCPに切り替え可能になります。

system/core/init/property_service.c

$ diff -u property_service.c.2 property_service.c  --- property_service.c.2	2012-02-07 18:40:34.472414791 +0900  +++ property_service.c	2012-02-07 18:41:24.782801630 +0900  @@ -79,6 +79,7 @@       { "debug.",           AID_SHELL,    0 },       { "log.",             AID_SHELL,    0 },       { "service.adb.root", AID_SHELL,    0 },  +    { "service.adb.tcp.port", AID_SHELL,    0 },       { "persist.sys.",     AID_SYSTEM,   0 },       { "persist.service.", AID_SYSTEM,   0 },       { "persist.security.", AID_SYSTEM,   0 },  

KZM-A9-Dualボードで動作確認ずみ。

0 件のコメント:

コメントを投稿