コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

XPERIA内部から自身へのadb接続

ようやく、XPERIA mini proをVersion 4.0(ICS)にアップデートできました。そこで、兼ねてよりやってみたかった自分自身から自分自身へのadb接続を試してみたいと思います。
先ず、必要なものとして、Android Terminal Emulatorをインストールします。
そして、ターミナルを開いてadbと打ちます。下記のような画面に・・・。XPERIA単体で、adbが使えることが判ります。

ここで、adb devicesと打って、接続できるデバイスを見てみます。何もアタッチされていません。

内部的にもadb用のポートが見られるようにする必要が有ります。このポートを開く一番簡単な方法は、USB経由で外部からポートを開くことです。
と言うことで、PCとUSB接続してコマンドプロンプトを起動します。そしてadb devices

>adb devices
List of devices attached
BX902HA9V6      device

はい、見えていますね。そこで、adb tcpip 5555とします。adb接続のデフォルトのポートが5555です。tcpip 5555とすることで、5555ポートがtcpip側に開きます。と同時に通常のUSBからはデバイスが見えなくなります。

>adb tcpip 5555
restarting in TCP mode port: 5555

この状態で、もう一度、adb devicesとすると、同様に List of devices attached BX902HA9V6 deviceと表示されます。これは、PCのadbサーバがデタッチされたことを取得できていないことが原因です。デタッチを認識していないと、PCのadbがハングアップするので、PCのadbをリスタートします。下記のようにadb kill-serverして、adb start-serverします。

>adb kill-server

>adb start-server
* daemon not running. starting it now on port
* daemon started successfully *

>adb devices
List of devices attached
BX902HA9V6      offline

バイスの認識がofflineとなりました。
5555ポートがtcpipに開いたので、XPERIA内部からデバイスを認識させたいと思います。adb connect 127.0.0.1と打ちます。そうすると、自分自身にアタッチできます。adb devicesとすると127.0.0.1:5555がデバイスとして見えています。

PC側からも同時にアタッチしてみます。adb connect 192.168.24.53と打ちます。IPアドレスXPERIAIPアドレスです。

>adb connect 192.168.24.53
connected to 192.168.24.53:5555

>adb devices
List of devices attached
BX902HA9V6      offline
192.168.24.53:5555      device

192.168.24.53:5555 deviceは、USB経由ではなくて、LANを通したWifi経由で繋がっていることになります。なので、LAN内にいる別のPCからでもadb connect 192.168.24.53とすれば接続できます。セキュリティ的には最悪ですね。
ちなみに、PC側(外側)からXPERIAにログインする場合は、adb -e shellとすれば入れます。何故か、emulatorとして接続できるみたいです。こんな状態。

>adb -e shell
shell@android:/ $ netstat
netstat
Proto Recv-Q Send-Q Local Address          Foreign Address        State
 tcp       0      0 127.0.0.1:5038         0.0.0.0:*              LISTEN
 tcp       0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN
 tcp       0      0 192.168.24.53:5555     192.168.24.98:63250    ESTABLISHED
 tcp       0      0 127.0.0.1:46304        127.0.0.1:5555         ESTABLISHED
 tcp       0      0 127.0.0.1:5555         127.0.0.1:46304        ESTABLISHED
tcp6       0     38 ::ffff:192.168.24.53:47853 ::ffff:199.47.219.158:443 CLOSE_WAIT
tcp6       0     38 ::ffff:192.168.24.53:39109 ::ffff:23.48.14.216:443 CLOSE_WAIT
tcp6       0      0 ::ffff:192.168.24.53:34042 ::ffff:74.125.31.188:5228 ESTABLISHED
tcp6       0      1 ::ffff:192.168.24.53:49388 ::ffff:74.125.235.142:80 CLOSE_WAIT
tcp6       0      0 ::ffff:192.168.24.53:36416 ::ffff:199.167.177.40:1227 ESTABLISHED
tcp6       0     38 ::ffff:192.168.24.53:54305 ::ffff:23.48.14.216:443 CLOSE_WAIT
shell@android:/ $ exit
exit

いよいよ、XPERIAのターミナルからadb shellを行ってみます。app_134@androidがshell@androidに変わりましたね。ログインできたようです。

exitします。

adb経由で自分自身にキーイベントを飛ばす

さて、やりたいことの本題に近づいて来ました。すまべんの和歌山合宿でいろいろと調べていた成果ですが、先ず、ホームキーイベントを投げてみます。adb shell input keyevent 3

おおお、ホーム画面が出てきました。(注:ホーム画面のキャプチャはしていないです)
それでは、メニュキーイベントをは、adb shell input keyevent 82、ポちっとな。おおメニューが出る。(注:メニュのキャプチャはしていないです)
それでは、それでは、メニュを出して、直ぐ閉じるとというのに挑戦してみます。adb shell input keyevent 82;adb shell input keyevent 4、行け。

おおおお、メニューが開いて、直ぐに閉じました。成功、成功。

なるほど、なるほど、では、次は自作アプリからadb叩く方法を考えてみたいと思います。

ちょっと追試

adb shell geteventしてみたいと思います。

タッチイベントは/dev/input/event3で取っているようですね。これを解析すれば、adb shell sendevent /dev/input/event3でタッチ情報も飛ばせるわけですね。どこかに解析情報無いのかな?