Lariat是一种强大的命令行工具,旨在简化远程Android设备上的命令执行和运行。它通过利用DeviceFarmer的API和Android调试桥(ADB)来实现这一目标。借助Lariat,可以简化并更有效地手动连接到设备,推动文件,运行命令和检索结果的繁琐过程。它是在连续集成(CI)管道中自动化任务的理想解决方案。
PYPI可用lariat:
python -m pip install lariat
Lariat正式支持Python 3.8+。
Lariat使用JSON配置文件。此配置文件的默认位置位于用户主目录( ~/.lariat/config.json
)中的.lariat
目录中。配置文件用于指定以下内容:
device_farmer_url
:要连接到的设备FARMER实例的URL。
.json
或.yaml
结尾的完整URL。 access_token
:您的DeviceFarmer访问令牌。
adb_private_key_path
:(可选)非默认ADB专用密钥的路径。如果未指定,则默认为~/.android/adbkey
adb_shell_default_read_timeout_s
:(可选)默认的总超时(以秒为单位)用于从设备读取数据。对于某些设备操作的默认值10s,此值可能需要增加。
{
"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
可以用来覆盖配置文件中设置的设备farmer 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
选项都使用“字段名称”来执行各自的操作。这些字段名称是JSON键,由DeviceFarmer定义为REST API的一部分。您可以通过导航到以下URL: https://<device_farmer_url>/api/v1/devices/<serial>
来查看deviceFarmer安装的支持字段,其中device_farmer_url
是您设备的安装的URL,并且是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
符合过滤标准的每个设备的套索返回结果。
以下是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命令创建并根据GHCR.IO/ZETIER/LARAIT:LATEST IMAGE创建Docker容器。它执行以下操作:
为在容器内部的 /root/.android目录中为主机计算机上的.android目录创建一个只读音量安装。
为在容器内部的 /root/.lariat目录中为主机计算机上的.lariat目录创建一个只读音量安装。
-RM标志可确保容器退出后自动删除。
在容器内部,执行了命令lariat -c 'echo hello'
,它将“ Hello”打印为设备范围内每个可锁定设备上的输出。
请注意,如果您的ADB键和配置文件位于主机计算机上的不同目录中,则可能需要相应地修改Docker Run命令,以提供正确的音量安装路径。
Lariat设计用于简单地集成到CI管道中。以下是GitLab作业的一个示例,该作业测试了在DeviceFarmer范围内内置的二进制文件:
.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
提供正确的路径,如果它与默认位置不同( ~/.android/adbkey
)
默认情况下,Lariat将枚举每一个设备范围内的设备,包括未present
或ready
就绪的设备。您可以通过指定--filter ready=true present=true
如果需要)来修改它。
注意:Lariat是在Ubuntu 18.04上经常在Python 3.8上开发并定期测试的。其他发行版和版本可能会起作用,但目前未经测试。
克隆存储库
安装依赖项以及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许可证获得许可的。