Lariatは、リモートAndroidデバイスでの実行可能ファイルの実行と実行を合理化するために設計された強力なコマンドラインツールです。これは、DeviceFarmerのAPIとAndroid Debug Bridge(ADB)を活用することで達成します。 Lariatを使用すると、デバイスに手動で接続し、ファイルをプッシュし、コマンドを実行し、結果を取得するという面倒なプロセスが簡素化され、より効率的になります。これは、継続的な統合(CI)パイプラインでタスクを自動化するための理想的なソリューションです。
LariatはPypiで入手できます:
python -m pip install lariat
LariatはPython 3.8+を正式にサポートしています。
LariatはJSON構成ファイルを使用します。この構成ファイルのデフォルトの場所は、ユーザーのホームディレクトリ( ~/.lariat/config.json
)内の.lariat
ディレクトリにあります。構成ファイルは、以下を指定するために使用されます。
device_farmer_url
:接続するDeviceFarmerインスタンスのURL。
.json
または.yaml
で終了する完全なURLを指定します。 access_token
:DeviceFarmer Access Token。
adb_private_key_path
:(オプション)非デフォルトADBプライベートキーへのパス。デフォルトは、指定されていない場合は~/.android/adbkey
になります
adb_shell_default_read_timeout_s
:(オプション)デバイスからデータを読むためのデフォルトの合計タイムアウト(秒単位)。この値は、特定のデバイス操作の10秒のデフォルト値から増加する必要がある場合があります。
{
"access_token" : " ef02da4fb3884395af4cf011061a2318ca5e9a04abd04de59c5c99afcce0b7fz " ,
"device_farmer_url" : " https://my.device-farmer-instance.com/ " ,
"adb_private_key_path" : " /custom/path/adb.key " ,
"adb_shell_default_read_timeout_s" : 32.5
}
すべての構成オプションをコマンドラインで指定して、設定されたファイルに設定されたデフォルトをオーバーライドできます。たとえば、コマンドラインオプション--device_farmer_url
を使用して、設定ファイルに設定されたデバイスファーマーURLをオーバーライドできます。
usage: lariat [-h] [-g | -e EXEC_FILE | -c COMMAND] [--config CONFIG] [-s SELECT [SELECT ...]] [-f FILTER [FILTER ...]]
[-p PUSH_FILES]
DeviceFarmer automation tool
optional arguments:
-h , --help show this help message and exit
-g , --get-devices Enumerate devices on DeviceFarmer instance. Does not execute any commands on devices. Prints JSON results
to stdout.
-e EXEC_FILE, --exec-file EXEC_FILE
Push a file and execute it. Pushes to /data/local/tmp/.
-c COMMAND, --command COMMAND
Run a command.
--config CONFIG Override the default path to the configuration file. Default:/home/larry.espenshade/.lariat/config.json
-s SELECT [SELECT ...], --select SELECT [SELECT ...]
Select the fields to be returned by --get-devices (-g). If not specified, all fields are returned.
-f FILTER [FILTER ...], --filter FILTER [FILTER ...]
Filter devices via a list of key-value pairs (e.g., sdk=27 manufacturer=SAMSUNG). Non boolean values are
regex matched
-p PUSH_FILES, --push-files PUSH_FILES
Specify the path to the file or directory to be pushed to the device. Pushes to /data/local/tmp/.
-v, --verbose Increase log level. Can be supplied multiple times to further increase log verbosity (e.g. -vv)
--select
と--filter
オプションはどちらも「フィールド名」を使用してそれぞれのアクションを実行します。これらのフィールド名は、REST APIの一部としてDeviceFarmerによって定義されているJSONキーです。次のURLに移動することにより、デバイスファーマーインストールのサポートされているフィールドを表示できます: https://<device_farmer_url>/api/v1/devices/<serial>
ここで、 device_farmer_url
はdevicefarmerのインストールとserial
数の1つのシリアルです。デバイスの。 /<serial>
コンポーネントは、すべてのデバイスのすべてのフィールドを表示するために省略できます。
フィールド名は、ネストされたキーにアクセスするためのドット表記をサポートします。たとえば、 battery.health
使用して、 battery
内のネストされたhealth
キーにアクセスできます。
--filter
と--select
とともにAを指定すると、結果のJSONのフィルターで指定されたフィールド名が自動的に含まれることに注意してください。
abi
デバイスアプリケーションバイナリインターフェイス(例: armeabi-v7a
)manufacturer
- デバイスメーカーmarketName
デバイスマーケティング名model
- デバイスモデル名provider.name
-STFプロバイダーこのデバイスをホストしていますversion
-Androidバージョンlariat --get-devices
--get-devices
で返されるフィールドを制限します。 lariat --get-devices --select serial model status
lariat --get-devices --filter manufacturer=SAMSUNG sdk=2[5-7]
lariat --get-devices --filter provider.name=my.devicefarmer.com
lariat --exec-file path/to/hello
lariat --command " echo hello " --filter abi=arm64-v8a
lariat --push-files path/to/files
Lariatは、フィルタリング基準を満たしている各デバイスの結果を返します。
以下は、 echo
コマンドのサンプル出力です。
lariat --command " echo hello " --filter abi=arm64-v8a
" A12345 " : {
" output " : " hello " ,
" exitcode " : 0,
},
" B54321 " : {
" output " : " hello " ,
" exitcode " : 0,
},
" C678910 " : {
" reason " : " Device is currently in use " ,
}
各結果には、デバイスの可用性に応じて異なるフィールドが含まれています。
デバイスが利用できない場合、結果には単一のフィールドがあります。
reason
:デバイスが現在使用されているなど、範囲に存在しないなど、デバイスが使用できない理由を指定します。デバイスが利用可能で、操作が実行された場合、結果には2つのフィールドが含まれます。
output
:実行されたコマンドのADBシェル出力、または実行されたアクションに関する詳細が含まれます。exitcode
:デバイスで実行されたコマンドまたはアクションの返品コード。デバイスには「理由」フィールド(利用できない場合)または「出力」および「exitcode」フィールドのいずれかを忘れないでください
便利なため、公式のLariat Docker画像が利用可能です。
Docker画像を使用するには、単に実行します
docker run --rm -v ~ /.android:/root/.android:ro -v ~ /.lariat:/root/.lariat:ro ghcr.io/zetier/lariat:latest -c ' echo hello '
このDocker Runコマンドは、ghcr.io/zetier/lariat:latest画像に基づいてDockerコンテナを作成および実行します。次のアクションを実行します。
ADBキーを含むホストマシンの.Androidディレクトリの読み取り専用ボリュームマウントを作成します。
コンテナ内の /root/.lariatディレクトリにLariat構成ファイルを含むホストマシンの.lariatディレクトリ用の読み取り専用ボリュームマウントを作成します。
-RMフラグは、容器が出てから自動的に削除されることを保証します。
コンテナ内では、コマンドlariat -c 'echo hello'
が実行されます。これは、デバイスファーマー範囲のすべてのロック可能なデバイスの出力として「Hello」を印刷します。
ADBキーと構成ファイルがホストマシンのさまざまなディレクトリにある場合は、それに応じてDocker Runコマンドを変更して、ボリュームマウントの正しいパスを提供する必要がある場合があります。
Lariatは、CIパイプラインへの簡単な統合のために設計されました。以下は、デバイスファーマー範囲でパイプラインに組み込まれたバイナリをテストするGitLabジョブの例です。
.lariat-test :
image :
name : ghcr.io/zetier/lariat:latest
entrypoint : [""]
stage : test
before_script :
# Copy keys and configs from private CI variables
- mkdir -p ~/.android
- echo "$CI_ADB_PUB_KEY" > ~/.android/adbkey.pub
- echo "$CI_ADB_PRI_KEY" > ~/.android/adbkey
- echo "$CI_FARMHAND_CONFIG" -> ~/.lariat/config.json
script :
- lariat --file $BINARY > test_results.json
artifacts :
paths :
- test_results.json
# Assumes a `build-android-binary` job that produces `android_binary`
# as an artifact.
android-range-test :
extends : .lariat-test
variables :
BINARY : android_binary
needs :
- build-android-binary
Lariatは、操作を実行する前にデバイスをロックして、排他的なアクセスを確保します。操作が完了した後、デバイスのロックが解除されます。
デフォルトの場所( ~/.android/adbkey
)とは異なる場合は~/.lariat/config.json
経由でADB秘密キーファイルへの正しいパスを必ず提供してください
デフォルトでは、Lariatは列挙します毎present
ない、またはready
ないものを含むデバイスファーマー範囲のデバイス。必要に応じて、 --filter ready=true present=true
指定して、これを変更できます。
注:Lariatは、Python 3.8でUbuntu 18.04で定期的にテストされており、定期的にテストされています。他の分布やバージョンは機能する可能性がありますが、現在はテストされていません。
リポジトリをクローンします
Lariat Pythonパッケージとともに依存関係をインストールします
sudo apt-get update
sudo apt-get install python3-venv python3.8-venv -y
python3.8 -m venv venv
source venv/bin/activate
(venv) pip install --upgrade pip
(venv) pip install .
構成ファイルを作成します
貢献は大歓迎です!問題が見つかった場合、または改善のための提案がある場合は、問題を開くか、プルリクエストを送信してください。
このプロジェクトは、GPLV2ライセンスの下でライセンスされています。