入力装置がなにもなくadbだけできる端末にタッチイベントを送りたい(挫折)
そんな変態な環境は普通はないよね... orz
キーイベントは普通に送れるのだけどね。
sendevent
普通は、sendeventでできる。
# sendevent use: sendevent device type code value
http://stackoverflow.com/questions/4386449/send-touch-event-from-adb-to-a-device
こっちのが詳しいな。
http://softteco.blogspot.jp/2011/03/android-low-level-shell-click-on-screen.html
でも、ターゲット環境には、/dev/input/event*がない。
デバイスないんじゃ、使えないじゃん...
WiFiInputMethod
WPSで無線LANを設定する。
wpa_cliは普通ないから入れてね。
サプリカント6だけね。
あとライブラリもいくつかいるかも。
# wpa_cli -p wlan0 wps_pbc
WiFiKeyboard入れる。
$ ./adb install /Users/kinneko/Downloads/WiFiKeyboard.apk
adb shellしてIMEを設定する。
# ime list -a com.volosyukivan/.WiFiInputMethod: mId=com.volosyukivan/.WiFiInputMethod mSettingsActivityName=null mIsDefaultResId=0x0 Service: priority=0 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=false ServiceInfo: name=com.volosyukivan.WiFiInputMethod packageName=com.volosyukivan labelRes=0x0 nonLocalizedLabel=WiFiKeyboard icon=0x0 enabled=true exported=true processName=com.volosyukivan permission=android.permission.BIND_INPUT_METHOD # ime list -s
なにも有効になっていない。
# ime enable com.volosyukivan/.WiFiInputMethod Input method com.volosyukivan/.WiFiInputMethod: now enabled # ime list -s com.volosyukivan/.WiFiInputMethod
有効になった。
アプリを開く。
back2回でアプリボタンにフォーカス。
# input keyevent 19 # input keyevent 19
リターン。
# input keyevent 66
アプリアイコンは一番右端。4つ目。
# input keyevent 22 # input keyevent 22 # input keyevent 22 # input keyevent 66
IPアドレスとポート7777が表示される。
ブラウザで開く。
開かない... orz
こいつも、/dev/input/event*疑惑。
uinputを使う
bluetoothデバイスのためのinputデバイス。
HIDコマンドを受け取れるそうな。
しかしそれもな... orz
RemoteInputなるものを見つけた。
http://www.math.bme.hu/~morap/RemoteInput/
RemoteInput.kcm.binと、RemoteInput.klを置き、RemoteInputを起動したらいいようだ。
adb install RemoteInput.kcm.bin /system/usr/keychars/
adb install RemoteInput.kl /system/usr/keylayout/
adb install RemoteInput /system/bin/
やってみるかね。
$ ./adb push /Users/kinneko/Downloads/RemoteInput/RemoteInput.kcm.bin /system/usr/keychars/ failed to copy '/Users/kinneko/Downloads/RemoteInput/RemoteInput.kcm.bin' to '/system/usr/keychars//RemoteInput.kcm.bin': Read-only file system
いてて。
/dev/block/mmcblk0p5 /system ext4 ro,relatime,barrier=1,data=ordered 0 0
まぁそうだよね。
めんどくさいので、この先はパス。
monkey使う
むらかみさんにmonkeyならと教えてもらう。
なるほどtouch送れるみたい。
http://tools.oesf.biz/android-4.0.4_r1.0/xref/development/cmds/monkey/
そういう使い方もできるのね。
ランダムぶったたきプログラムってわけでもないのか。
$ ./adb forward tcp:1080 tcp:1080 $ ./adb shell monkey --port 1080 key down menu
対話コンソールに入ったけど、コマンド送ってもOKが返らない。
タッチイベントは、
touch [down|up|move] x y
でできるということだけど...
終了は^C。
"Error binding to network socket."と出るときは、まだAndroid上でcom.android.commands.monkeyが動いている。
そういう場合は、killする。
monkeyも/dev/input使うのではないかという... orz