Androidのリモート管理ツール「DeviceFarmer」をMacで動かす

ヨメレバCSS
オリジナルCSS

 Androidを複数台リモート管理できる DeviceFarmerをMacで動かすためにやったことです。

DeviceFarmerはOpenSTFではないの?

 どうもOpenSTFのREADMEを見ると、DeviceFarmerに開発は移行したみたいです。

 OpenSTFはAndroid9までの対応で止まっており、Android10や11に対応するにはDeviceFarmerへアップデートする必要があります。

事前準備

Docker Desktop for Macのインストール

 起動はdocker-composeで行います。ので、Docker Desktop for Macはインストール済みです。

adbサービス

 後述しますが、Macではadbサービスをマシンに直接インストールし、起動する必要がありました。

 adbもインストール済みで、 adb devices で接続した端末が認識される状態になっています。

DeviceFarmerの起動 (docker-compose)

 インストールおよび起動、といってもリポジトリにdocker-compose.yamlが含まれているので、これを元にカスタマイズしました。

version: "3"

services:
  rethinkdb:
    container_name: rethinkdb
    image: rethinkdb:2.3
    restart: unless-stopped
    volumes:
        - "rethinkdb-data:/data"
    command: "rethinkdb --bind all --cache-size 2048"

#  adb:
#    container_name: adb
#    image: devicefarmer/adb:latest
#    restart: unless-stopped
#    volumes: 
#      - "/dev/bus/usb:/dev/bus/usb"
#    privileged: true

  stf:
    container_name: stf
    image: devicefarmer/stf
    ports:
      - "7100:7100"
      - "7110:7110"
      - "7400-7500:7400-7500"
    environment:
      - TZ='America/Los_Angeles'
      - RETHINKDB_PORT_28015_TCP=tcp://rethinkdb:28015
      - STF_ADMIN_EMAIL=<YOUR_EMAIL>
      - STF_ADMIN_NAME=<YOUR_NAME>
    restart: unless-stopped
#    command: stf local --adb-host adb --public-ip YOUR_IP --provider-min-port 7400 --provider-max-port 7500
    command: stf local --adb-host host.docker.internal --public-ip localhost --provider-min-port 7400 --provider-max-port 7500 --no-screen-reset --no-cleanup

volumes:
  rethinkdb-data: {}

 コメントアウトの部分が元のコードです。(YOUR_IPには公開するIPアドレスを指定します)

 このファイルをdocker-compose.yamlとして保存し、そのディレクトリで docker-compose up すれば完了。

 あとは http://localhost:7100 にアクセスすると、DeviceFarmerのログイン画面が開きます。

 起動まで何も躓くこと無く終わりました…

–public-ip:公開IPの設定

 ローカルで使うだけなのでlocalhostに指定しました。アクセスした後、ここに書かれているホストへリダイレクトするみたいです。

 もし社内サーバーなどローカルでは無い環境で起動する場合、そのホストを指定します。

–adb-host:adbとの接続

 元のdocker-compose.yamlでは、adbのコンテナを使うようになっていましたが、Macでは使えなかったためホストマシンに向けています。

  Docker for macはUSBデバイスが使えないため、adbサービスはローカルで起動させています。

 --adb-host docker.for.mac.localhost を指定することで、Dockerが動作しているマシンに接続先を向けています。

–no-cleanup:インストールしたアプリなどが自動的に消されるのを防ぐ

 DeviceFarmerはデフォルトで、端末の使用を止めたときにインストールしたアプリなどを消したりして、使用前の状態に戻してくれるようでした。

 テスト端末としては正しい動作かもしれませんが、使い勝手が悪いので --no-cleanupオプションを付けて状態をリセットしないようにしました。

  --cleanup                    Attempt to reset the device between uses by
                               uninstallingapps, resetting accounts and clearing
                               caches. Does not do a perfect job currently.
                               Negate with --no-cleanup.
                                                       [boolean] [default: true]

–no-screen-reset:自動回転をオンにすることを防ぐ

 また、端末の使用を止めるとなぜか画面の自動回転が毎回オンにされていました。

 これも使い勝手が悪かったので、--no-screen-reset を指定して変更されないようにしました。

  --screen-reset               Go back to home screen and reset screen rotation
                               when user releases device. Negate with
                               --no-screen-reset.      [boolean] [default: true]

コンテナを共通化/ディレクトリ別に管理したい場合

 このyamlでは、container_nameとrethinkdbのvolumesが別途指定されています。

 この設定ままだと、どのディレクトリで起動しても同じコンテナ名、共有されたデータで起動することができます。

 普通に使う分には良いのですが、別ディレクトリで試してみたいなどといった場合には不便かもしれません。

 もしディレクトリごとに管理を分けたい場合は、conainter_nameを消して、rethinkdbサービスのvolumesでカレントディレクトリをマウントするようにすれば、大丈夫だと思います。 

    volumes:
#        - "rethinkdb-data:/data"
        - "./data:/data"

Windowsでも動く

 Macと書きましたが…そのままのdocker-comopseファイルでWindowsでも動きます!

参考

スポンサーリンク
GoogleAdSence レクタングル(大)