AWS Device FarmのホストマシンでAndroid SDKを利用する方法をメモする。
なお通常Device Farmのホストマシンでは、ビルド済みのapkを端末へインストールする程度のことしか行わないので、基本的にAndroid SDKは必要ない。( adb
などの platform-tools はプリインストールされているので)
とはいえ、あると便利な場合もまれにある(ホストマシン上でapkのビルドをしたいなど)ので、ここで方法をまとめる。
はじめに
AWS Device Farmのテスト実行環境は、
- モバイル端末(クライアント)
- そのクライアントと接続されたLinuxサーバー(ホスト)
から構成されている。
今回は、上記のホストマシンにAndroid SDKをインストールする方法をまとめる。
方法
Device Farmのカスタムテスト環境の機能を用いる。
適当なスタンダードテスト環境に対して、カスタマイズした test_spec.yml
をアップロードすれば良い。
phases:
install:
commands:
- mkdir ~/android_sdk
- cd ~/android_sdk
# download and install commandline tools
- curl https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -o sdk.zip
- unzip sdk.zip
# set environment variables for android sdk
- export ANDROID_HOME_OLD=$ANDROID_HOME
- export ANDROID_HOME=$HOME/android_sdk
- export ANDROID_SDK_ROOT=$HOME/android_sdk
# install android sdk
- yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager "build-tools;28.0.3" "platforms;android-29" --sdk_root=$ANDROID_HOME
# use existing platform-tools (which is a specific build for AWS device farm)
- rm -rf $ANDROID_HOME/platform-tools
- ln -s $ANDROID_HOME_OLD/platform-tools $ANDROID_HOME
- export PATH="$PATH":"$ANDROID_HOME/platfom-tools"
# return to the previous directory
- cd -
ポイントは下記3点:
1. commandline toolsを利用した最小限のインストール
Android Studioをインストールすると必要なものが全部入る認識だが、サイズが大きく不要なものも多いので、今回は利用しない。
sdkmanager
を利用すると、必要なものだけをインストールできる。参照
また、Command line toolsのURLはこちらから入手できる。
2. platform-tools は既存の物を使う
新規にインストールされるplatform-toolsを利用すると、端末との通信ができなくなるなどの不具合があった。
もともとインストールされているplatform-toolsは、AWS Device Farm用にカスタマイズされたものらしい。
このため、新しい$ANDROID_HOME
下にシンボリックリンクを張って、既存のplatform-toolsが参照されるようにする。
3. test_spec.yml
のアップロード方法
文法はこちらを参照: Working with Custom Test Environments in AWS Device Farm
アップロードする際は、既存のスタンダードテスト環境をベースに、カスタムされたtest_spec.ymlをアップロードする形になる。
Appium等を用いる場合は、素直に対応する環境を選べば良い。
一方で、Flutter driveを用いる場合は、そもそも対応するスタンダード環境が存在しない。
この場合は、適当な環境(e.g. APPIUM_PYTHON
)を選んだ上で、テストパッケージもアップロードし、その上で test_spec.yml をアップロードする。
次のStackoverflowに方法がまとめられている: Running Flutter Integration Tests in AWS Device Farm, Saucelabs, Firebase Test Lab etc
以上です。