ここに辿り着いた方々は、Linux 上でAndroid のアプリを開発している人も多いかと思います。Android のアプリを開発するには、AndroidのSDKをインストールする必要があります。SDK の中には adb(Android Debug Bridge)というコマンドが含まれています。アプリ開発時 adb を使ってアプリのインストール、アンインストール、ログ解析などを行いますが、このツールを使えば、Linux からキー、タップ、スワイプなど Android を操作するイベントを送る事が出来るので Linux から接続した Android を思うように操作できるのです。
まずは Android をLinuxにつなぐ前にAndroidの開発者向けオプションを有効にする必要があり、「設定」->「システム」->「端末情報」->「ソフトウェア情報」の「ビルド番号」を7回タップすると有効になります。
すると「設定」->「システム」に「開発者向けオプション」メニューが出現するので「USBデバック」を有効にします。なお、ベンダーやAndroidのバージョンによって「ビルド番号」、「開発者向けオプション」メニューの設定の階層が
異なるのでお手持ちのAndroidの「設定」メニューから探して下さい。
また、Androidのバージョンにより「開発者向けオプション」メニューに「USB設定の選択」がある場合は、USBの設定を「MTP (Media Transfer Protocol)」(ファイル転送)モードにしておきます。
adbは、次のコマンドを実行するとインストールできます。
$ sudo apt -y install adb
adb devices と実行するとLinux に接続されているAndroidの一覧が表示されます。
$ adb devices
:
ABCD0123456789 device
接続時に、USB接続を許可するダイアログが表示されるのでOKをクリックします。
デバックモードになっていない場合は、以下のように表示されます。
ABCD0123456789 unauthorized
????????????>...no permissions
カメラの撮影は、カメラのアプリを起動して以下のコマンドを実行すると写真撮影が出来ます。複数のAndroidデバイスをPCに接続している場合は、adb devices コマンドで表示されるシリアル番号を-sオプションで指定します。
$ adb shell input keyevent KEYCODE_CAMERA
$ adb -s ABCD0123456789 shell input keyevent KEYCODE_CAMERA
もし、カメラアプリも自動で起動したい場合は、HOME ボタンをクリック、カメラアプリの座標(X Y)をタップ、カメラ撮影を行います。
$ adb shell input keyevent KEYCODE_HOME
$ adb shell input tap 580 1300
$ adb shell input keyevent KEYCODE_CAMERA
スワイプ処理が行いたい場合は、以下のように実行します。
$ adb shell input swipe X1 Y1 X2 Y2
スクリーンショットは、-p で保存先を指定して以下のように取得します。
データをLinuxに転送する場合は pull コマンドで、Androidに送信する場合は push コマンドを使用します。
$ adb shell screencap -p /sdcard/screen.png
$ adb pull /sdcard/screen.png .
$ adb push screen.png /sdcard/screen2.png
その他の主なキーイベント
KEYCODE_BACK バックキー
KEYCODE_POWER POWER
KEYCODE_A A
KEYCODE_MENU メニューキー
KEYCODE_SEARCH 検索キー
全てのキーコードを確認したい場合は、Android デベロッパーのキーコード一覧を参照してください。
https://developer.android.com/reference/android/view/KeyEvent