2012年02月10日

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

Androidのadbのメモ(9) Android端末同士をadbでつなぐ」のおまけのところにadbdをUSBモードから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ボードで動作確認ずみ。



トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード