2015年3月14日土曜日

Android Debug Bridge(ADB)の導入から使い方


ADBの導入方法からその使い方を手順として残しておく。


【Java(JDK)のインストール】
画像つきで非常に分かりやすい手順があったため参照先の紹介で終わる
http://andmem.blogspot.jp/2014/04/installjdkandroidsdkadb.html



【Android SDKのインストールと設定】
同上



【Android SDKの環境変数(Path)の設定】
同上



【ドライバのインストール】
Android SDKをインストールしたフォルダ内のドライバを見せてやれば足りることが多い
<sdk> -> extras -> google -> usb_driver
http://andmem.blogspot.jp/2012/10/android.html

対象ドライバが見つからなければここから探せる
https://sh-dev.sharp.co.jp/android/modules/driver/



【Android端末の設定】
設定 -> 開発者向けオプション

このあたりにチェックを入れておく
  USBデバッグ
  スリープモードにしない
  ポインタの位置


あとはPCとモバイル端末をUSBケーブルでつなげばよい



ここからはよく利用したコマンド類をメモしておく
【コマンド】
● adbのバージョン確認
adb version


● 接続したデバイス情報の確認
adb devices


● adbシェルの利用
/system/bin/ 配下のコマンドをシェルから叩いて利用できる
adb shell ls
adb shell ping
など


● directional pad(十字キー)の操作
adb shell input keyevent 19
adb shell input keyevent 20
adb shell input keyevent 21
adb shell input keyevent 22
adb shell input keyevent 23

(参考)
19 : KEYCODE_DPAD_UP
20 : KEYCODE_DPAD_DOWN
21 : KEYCODE_DPAD_LEFT
22 : KEYCODE_DPAD_RIGHT
23 : KEYCODE_DPAD_CENTER(確定用、十字キーの真ん中)


● 検索
adb shell input keyevent 84
adb shell input text test
adb shell input keyevent 66


● ファイルの操作
(PCからandroidへ転送)
adb push test.txt /storage/sdcard0/

(androidからPCへ転送)
adb pull /storage/sdcard0/test.txt .

(android上のファイルを削除)
adb rm /storage/sdcard0/test.txt


● 電話をかける
adb shell am start -a android.intent.action.CALL tel:090********


● メールを送る
adb.exe shell am start -a  android.intent.action.SENDTO -d mailto:***@example.com --es android.intent.extra.SUBJECT test_subject --es android.intent.extra.TEXT messeage
※メールアプリは起動するが、送信するところまでは実施しない
directional pad(十字キー)を操作し、送信ボタンを選択して押せばいい


● パッケージ周り
インストール済みパッケージの確認
adb shell pm list package -f
adb shell ls system/app/YouTube.apk


● 時計の設定
adb shell date -s YYYYMMDD.hhmmss


● 撮影(カメラで画面のスクリーンショットを取得)
adb shell screencap -p /storage/sdcard0/test.png

何かの操作後に画面の正常性を定期的に確かめたければ、
スクリーンのmd5値をとり前後で比較すればよいだろう
adb shell md5 /storage/sdcard0/test.png


● タッチ
adb shell input touchscreen tap x y
(例)
adb shell input touchscreen tap 890 840


● スワイプ
adb shell input touchscreen swipe x1 y1 x2 y2
(例)
adb shell input touchscreen swipe 900 1200 -500 0


● タッチ、スワイプの応用(タッチ操作を覚えて、再現)
adb shell getevent /dev/input/event1 | ./touch.rb > touch.sh
adb push touch.sh /storage/sdcard0/
adb shell sh /storage/sdcard0/touch.sh


(参考)
touch.rb
#!/usr/bin/ruby
time_b = Time.now

$stdin.each_line do |line|
  if line =~ /^([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+)$/
    array = [$1.to_i(16), $2.to_i(16), $3.to_i(16)] 
  else
    next
  end

  time_a = Time.now
  $stdout.puts "sleep #{time_a - time_b}" if time_a - time_b > 0.1
  $stdout.puts "sendevent /dev/input/event1 #{array[0]} #{array[1]} #{array[2]}"
  time_b = time_a
end