black android smartphone on brown wooden table

STF(Smartphone Test Farm)の構築について

black android smartphone on brown wooden table

STF(Smartphone Test Farm)の構築について

Androidの開発においては、デバイス(機種)毎に違いがあるものが多いです。特にカメラについては各メーカーでの独自実装をしているものが多いのとその独自実装されているのですがそれをプログラムでコントローする手段(API)が提供されていません。(されているかもしれませんがなかなか見つからないのかもですが)

そこで登場するのがSTFという仕組みです。 ※ステップオーバー・トーホールド・ウィズ・フェイスロック(STF)とは関係ありません。

OpenSTF→DeviceFarmerとしてオープンソース(Apache License 2.0)で公開されています。 もともとはCyberAgentで作られ管理されていたもの。

オフィスで構築してみました。以下。まだ1台しかAndroid端末がありませんが、複数台可能です。

構成としては、以下のとおり Docker上→STF ローカルPC(Mac)→adb (Android SDK Platform-Tools)

docker-compose.ymlには、docker上にadbを構成するようになっているけど、Docker Desktop for Macは、adb対応していない(dockerからUSBアクセスができない)ので、ローカルにあるadbを利用する。

dockerを使う理由としては、Nodejsが以下のとおり、ドキュメントに記載あり。

Requirements Node.js 8.x required (some dependencies don’t support newer versions)

現在2023.03.06時点では、最新バージョンは、19.7.0ということで古すぎで、Macにインストールできない。pkgを取得してインストールも可能だが、セキュリティの警告がでる。無理やりインストールしようとしてもビルド時にエラーで構築できない。おそらくパッケージがNodejs 8.xで動作しないのかな?なので、Dockerを使う。

STF構築手順 for mac

$ git clone https://github.com/DeviceFarmer/stf
$ cd stf
$ vim docker-compose.yaml
以下、docker-compose.yamlファイル
version: "3"

services:
  rethinkdb:
    container_name: rethinkdb
    image: rethinkdb:2.4.2
    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

# 以下、adbをlocal(mac)を指定する
#    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 192.168.1.xxx --provider-min-port 7400 --provider-max-port 7500

volumes:
  rethinkdb-data: {}

変更箇所

  • adb: コメントアウト
  • command : ホストマシンのadbを使用する。 (–adb-host host.docker.internal )
  • command :端末を切断するたびにインストールされたアプリを消さない。 (–no-cleanup)
  • command :自動回転をオンにしない。 (–no-screen-reset)
  • command :公開IPを自分の割当られたIPに指定 –public-ip 192.168.1.xxx

adb設定

android studioにはついてきますが、個別にインストールする場合は、以下からダウンロードします。
https://developer.android.com/studio/releases/platform-tools?hl=ja
Android Studioもあったほうがよいので、基本的にはAndroid Stuidoも入れておく。
以下はAndroid  Stuidoのパスを通す指定方法
export PATH=$PATH:/Users/[user_name]/Library/Android/sdk/platform-tools
コマンドプロンプトで adbと入力してなんかしらの返事が返ってきたらOK。
ネットワーク設定
local networkのIPアドレスがDHCPなので、ルーターに固定ローカルIPが割り当てられるように設定。
※指定Macアドレスに対して割当IPアドレスを固定化する
IPアドレスをhostsに指定
/private/etc/hostsにIPを指定する。外部アクセスのみの場合は不要。ローカルマシンでも確認したい場合は記載。

vim /private/etc/hosts
192.168.1.xx localhost

STF起動

ようやくSTFインストール完了したので、デバイスを接続し起動する。起動順も大事。以下。
$ adb start-server
$ cd ~/stf/docker-compose up -d

ついでにOpenVPN設定 外部アクセス可能に

これは、AsusのASUS ZenWiFi AX (XT8)を使うと管理画面かかなり簡単にVPN構築できます。OpenVPNの構築をしてみましたが、設定方法については割愛(^^)
(次回)

関連記事一覧

  1. この記事へのコメントはありません。