Lariat는 원격 Android 장치에서 명령 실행 및 실행 파일 실행을 간소화하도록 설계된 강력한 명령 줄 도구입니다. DeviceFarmer의 API 및 Android Debug Bridge (ADB)를 활용하여이를 달성합니다. Lariat를 사용하면 장치에 수동으로 연결하고 파일을 푸시, 명령 실행 및 결과 검색의 번거로운 프로세스가 단순화되고보다 효율적입니다. CI (Continuous Integration) 파이프 라인에서 작업을 자동화하는 데 이상적인 솔루션입니다.
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
: 장치 운반기 액세스 토큰.
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
을 사용하여 구성 파일에서 설정된 DeviceFarmer 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
옵션은 "필드 이름"을 사용하여 해당 조치를 수행합니다. 이 필드 이름은 DeviceFarmer가 REST API의 일부로 정의한 JSON 키입니다. 다음 URL로 탐색하여 DeviceFarmer 설치를 device_farmer_url
지원 serial
필드를 볼 수 있습니다 https://<device_farmer_url>/api/v1/devices/<serial>
장치의. 모든 장치의 모든 필드를 볼 수 있도록 /<serial>
구성 요소를 생략 할 수 있습니다.
필드 이름은 중첩 키에 액세스하기위한 도트 표기법을 지원합니다. 예를 들어, battery.health
battery
내 중첩 health
키에 액세스하는 데 사용될 수 있습니다.
--filter
필터와 --select
과 함께 -필터를 지정하면 결과 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
: 현재 사용중인 제품과 같이 장치를 사용할 수없는 이유를 지정합니다.장치를 사용할 수 있고 작업이 수행 된 경우 결과에는 두 개의 필드가 포함됩니다.
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 Command는 ghcr.io/zetier/lariat:latest 이미지를 기반으로 Docker 컨테이너를 생성하고 실행합니다. 다음 작업을 수행합니다.
ADB 키가 포함 된 호스트 시스템의 .android 디렉토리에 대한 읽기 전용 볼륨 마운트를 생성합니다.
Lariat 구성 파일이 포함 된 호스트 시스템의 .lariat 디렉토리에 대한 읽기 전용 볼륨 마운트를 컨테이너 내부의 /root/.lariat 디렉토리에 만듭니다.
--rm 플래그는 컨테이너가 종료 된 후 자동으로 제거되도록합니다.
컨테이너 내부에는 lariat -c 'echo hello'
명령이 실행되며, "Hello"는 DeviceFarmer 범위의 모든 잠금 장치의 출력으로 인쇄합니다.
ADB 키와 구성 파일이 호스트 시스템의 다른 디렉토리에있는 경우, 볼륨 장착에 대한 올바른 경로를 제공하기 위해 Docker Run 명령을 수정해야 할 수도 있습니다.
Lariat는 CI 파이프 라인에 간단한 통합을 위해 설계되었습니다. 아래는 DeviceFarmer 범위의 파이프 라인에 내장 된 이진을 테스트하는 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는 독점 액세스를 보장하기 위해 모든 작업을 수행하기 전에 장치를 잠그게합니다. 작업이 완료되면 장치가 잠금 해제됩니다.
기본 위치와 다른 경우 ~/.lariat/config.json
통해 ADB 개인 키 파일에 대한 올바른 경로를 제공하십시오 ( ~/.android/adbkey
).
기본적으로 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 라이센스에 따라 라이센스가 부여됩니다.