Android
adb
PokemonGo
ポケモン

ポケモンを一括で博士に送りたい:AndroidDebugBridge (ADB) を使ってちょっとだけ楽にする

More than 1 year has passed since last update.

ポケモンGoブームもそろそろ陰りが見えてきましたね。

私は格安スマホを使っているため、ARモードができないのはもとよりPokemonGo全体的に動作がもっさりしています。特に博士にポケモンを送るのが大変で、ポケモン詳細画面のスクロールがうまく行かない上に一匹ずつしか送れないので、かなりストレスフル。ということでADBとBashの練習がてら、博士へのポケモン転送を軽く自動化することで、半一括みたいな感じにして負担を減らしてみました。
思いつきなのでもっと簡単にリピートタスク自動化する方法は他にありそう。ぜひ教えてください。

免責:バグ等があっても責任は負いません。私は開発中に誤ってラッタを送ってしまいました。なお、間違えたくないポケモンはお気に入りに追加しておくと、誤送信を防げるようです。

ADBの導入

adbコマンド Windowsなどでググってください。ここが一番ハードルが高い。

実行

  1. source pokemon-go.sh
    コードはあとで。

  2. スマホとPCをUSBで繋ぎ、USBデバッグをオンにする。

  3. ポケモンGoを起動してポケモン一覧を表示
    pokelist

  4. 番号順にソートして消したい送りたいポケモン(コラッタ)を一番上に持ってくる
    sorted-pokelist

  5. send-pokemons right 3
    今回は、一番上の右から順に3体のポケモンを博士に送ります。

  6. 待つ
    sendbutton.png
    順に博士に送り始めます。日付の下の空白はなんなんでしょうね。

  7. 完了!
    sendend.png

コード

数値とか自分の実機専用です。
2016年7月31日に「博士に送る」周りのUIが変更されてからのものに対応をしました。
ゆっくりスクロールを強制されるバグがなくなり、送信時間が短縮されました。

pokemon-go-after-2016_07_31.sh
function send-pokemons () {
  echo "Begin";
  for ((i=1; i<=$2; i++)); do
    echo $i
    send-pokemon $1
  done
  echo "Finished";
}


function send-pokemon () {
  case "$1" in
    "left")   x=130;;
    "center") x=360;;
    "right")  x=590;;
    *) echo "unknown position"
       return;;
  esac

  # ポケモンリストで、一番上の指定した位置のポケモンをタップ
  adb shell input tap $x 360
  sleep 1

  # フローティングアクションボタンをタップ
  adb shell input tap 620 1180

  # 「博士に送る」ボタンを押し確認画面で「はい」を押す
  adb shell input tap 620 1040
  adb shell input tap 360 670
  sleep 3
}
pokemon-go-before-2016_07_30.sh
function send-pokemons () {
  echo "Begin";
  for ((i=1; i<=$2; i++)); do
    echo $i
    send-pokemon $1
  done
  echo "Finished";
}


function send-pokemon () {
  case "$1" in
    "left")   x=130;;
    "center") x=360;;
    "right")  x=590;;
    *) echo "unknown position"
       return;;
  esac

  # ポケモンリストで、一番上の指定した位置のポケモンをタップ
  adb shell input tap $x 360
  sleep 1

  # 「博士に送る」ボタンが表示されるまでスクロール。
  #  私の場合時間をかけてゆっくりスクロールしないとアプリに認識されませんでした。
  adb shell input swipe 700 1200 700 250 4300
  sleep 1

  # 「博士に送る」ボタンを押し確認画面で「はい」を押す
  adb shell input tap 360 1050
  adb shell input tap 360 670
  sleep 3
}

解説

座標・待機時間を自分のスマホに調整する必要があります。
各値を調べるときは開発者向けオプションポインタの位置をオンにすると便利です。
画面サイズはadb shell dumpsys window | grep "mUnrestrictedScreen"で取れます。

send-pokemons (position) (count)
特に説明することも無いかと思いますが指定された(count)回数だけsend-pokemon (position)を実行します。

send-pokemon (position)
一番上の(position)の位置にあるポケモンを博士に送ります。

adb shell input tap X Y
adb shell input swipe X1 Y1 X2 Y2 DURATION
adbのコマンドです。タップやスワイプを再現します。

sleep N
N秒停止するbashのコマンドです。スマホがサクサクなら必要ないかも。

ToDo

  • もっといっぺんにいろんなポケモンを送れるようにする
  • 以下でスクリーンショットができるので画像識別してもっと簡単にやりたい。
    • adb shell screencap -p | sed 's/\r$//' > XXX.png