AppiumでAndroid端末にインストールされたあらゆるアプリの操作を自動化してみよう


Appiumで端末にインストールされたアプリの操作を自動化しクローリングしたいと思います。

AppiumはSeleniumのようなAPIでアプリの操作をできるツールです。

端末に入っているapkをpullしてAppiumで操作するのでどんなアプリでも操作ができます。

Appiumをインストール

Appium公式サイトからアプリをダウンロードします。
http://appium.io/

端末に接続する方法

下記からは端末に接続する方法を書いていきます。
下記に公式のドキュメントがありますので、うまくいかない場合はチェックしてみてください。
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

下記の項目を取得することでAppiumのSessionを開始することができます。

appPackage
appActivity
platformVersion
deviceName
app(任意)

Packageの取得

その後、PCにスマートフォンをつなぎ(自分の場合はAndroidです)、下記のコマンドを実行

adb shell pm list packages

パッケージ一覧を取得できますので、そこから操作したいアプリのパッケージ名をメモしておきます。(package: は不要)

Launch Activityの取得

操作したいアプリを立ち上げ、下記のコマンドを実行することでLaunch Activityを取得することができます。

adb shell dumpsys window windows | grep -E "mCurrentFocus"

メモしておいてください。

deviceNameの取得

adb shell getprop ro.product.model

これもメモしておきます。

platformVersionの取得

adb shell getprop ro.build.version.release 

これもメモ

appの取得(任意)

ここではapkファイルを端末からpullして、PCのapkへのパスを取得します。

まず、端末内のアプリのパスを取得します。

adb shell pm list packages -f | grep com.hoge

その後、上記で取得できたパスを使ってapkファイルをダウンロードします

adb pull /data/app/com.hoge-2NCYKBV5gI-ISQMHfmhcoA==/base.apk

ダウンロードしたapkのPCでのパスをメモしておいてください。

これまでにメモしておいた内容で下記のJSONを作成します。

{
  "automationName": "Appium",
  "platformName": "Android",
  "appPackage": "上記で取得した値",
  "appActivity": "上記で取得した値",
  "platformVersion": "上記で取得した値",
  "deviceName": "上記で取得した値",
  "app": "上記で取得した値(任意)"
}

JSONを読み込ませてアプリを起動

JSON Representationの部分に上記で作成したJSONを設定してStart Session をすることで
端末からpullしたapkを端末に送り込み、インスペクタが起動します。

上記のインスペクタを使えばxpathが取得できるので、あとはそれをつかってseleniumを書くようにスクリプトを書いたり、レコーディングの機能を使って端末の操作をコード化することができます。

コードは自分はWebdriver.ioで記述しますが、Ruby,Java,PythonなどでもOKです。
ここはSeleniumの話になってしまうので割愛します。