Lariat เป็นเครื่องมือบรรทัดคำสั่งที่ทรงพลังที่ออกแบบมาเพื่อปรับปรุงการดำเนินการของคำสั่งและการรันของ Executables บนอุปกรณ์ Android ระยะไกล มันประสบความสำเร็จโดยการใช้ประโยชน์จาก API ของ DeviceFarmer และ Android Debug Bridge (ADB) ด้วย Lariat กระบวนการที่ยุ่งยากในการเชื่อมต่อกับอุปกรณ์ด้วยตนเองการผลักไฟล์การเรียกใช้คำสั่งและการดึงผลลัพธ์จะง่ายขึ้นและทำให้มีประสิทธิภาพมากขึ้น มันเป็นทางออกที่เหมาะสำหรับงานอัตโนมัติในท่อรวม (CI) อย่างต่อเนื่อง
Lariat มีอยู่ใน PYPI:
python -m pip install lariat
Lariat สนับสนุน Python 3.8+ อย่างเป็นทางการ
Lariat ใช้ไฟล์การกำหนดค่า JSON ตำแหน่งเริ่มต้นสำหรับไฟล์กำหนดค่านี้อยู่ในไดเรกทอรี .lariat
ภายในไดเรกทอรีบ้านของผู้ใช้ ( ~/.lariat/config.json
) ไฟล์กำหนดค่าใช้เพื่อระบุสิ่งต่อไปนี้:
device_farmer_url
: URL ของอินสแตนซ์ DEVISEFARMER เพื่อเชื่อมต่อ
.json
หรือ .yaml
access_token
: โทเค็นการเข้าถึงอุปกรณ์ของคุณ
adb_private_key_path
: (ไม่บังคับ) พา ธ ไปยังคีย์ส่วนตัว ADB ที่ไม่ใช่ default ค่าเริ่มต้นเป็น ~/.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
}
ตัวเลือกการกำหนดค่าทั้งหมดสามารถระบุได้บนบรรทัดคำสั่งเพื่อแทนที่ค่าเริ่มต้นใด ๆ ที่ตั้งไว้ในไฟล์ config ตัวอย่างเช่นตัวเลือกบรรทัดคำสั่ง --device_farmer_url
สามารถใช้เพื่อแทนที่ URL DeviceFarmer ที่ตั้งไว้ในไฟล์ config
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>
serial
ที่ device_farmer_url
เป็น URL ในการติดตั้งอุปกรณ์ ของอุปกรณ์ของคุณ ส่วนประกอบ /<serial>
สามารถละเว้นเพื่อดูฟิลด์ทั้งหมดของอุปกรณ์ทั้งหมด
ชื่อฟิลด์รองรับสัญลักษณ์ dot เพื่อเข้าถึงคีย์ซ้อนกัน ตัวอย่างเช่น battery.health
สามารถใช้ในการเข้าถึงคีย์ health
ซ้อนกันภายใน battery
โปรดทราบว่าการระบุ --filter
พร้อมกับ --select
จะรวมชื่อฟิลด์ใด ๆ ที่ระบุไว้ในตัวกรองโดยอัตโนมัติใน JSON ผลลัพธ์
abi
- อุปกรณ์ไบนารีแอปพลิเคชันอุปกรณ์ (เช่น armeabi-v7a
)manufacturer
- ผู้ผลิตอุปกรณ์marketName
- ชื่อการตลาดอุปกรณ์model
- ชื่อรุ่นอุปกรณ์provider.name
- ผู้ให้บริการ STF โฮสต์อุปกรณ์นี้version
- เวอร์ชัน Androidlariat --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 run --rm -v ~ /.android:/root/.android:ro -v ~ /.lariat:/root/.lariat:ro ghcr.io/zetier/lariat:latest -c ' echo hello '
คำสั่ง Docker Run นี้จะสร้างและเรียกใช้คอนเทนเนอร์ Docker ตาม Ghcr.io/zetier/lariat:latest Image มันดำเนินการดังต่อไปนี้:
สร้างการติดตั้งระดับเสียงแบบอ่านอย่างเดียวสำหรับไดเรกทอรี. และ. ดรอยด์บนเครื่องโฮสต์ซึ่งมีคีย์ ADB ไปยังไดเรกทอรี /root/.android ภายในคอนเทนเนอร์
สร้างการติดตั้งระดับเสียงแบบอ่านอย่างเดียวสำหรับไดเรกทอรี. lariat บนเครื่องโฮสต์ซึ่งมีไฟล์การกำหนดค่า Lariat ไปยังไดเรกทอรี /root/.lariat ภายในคอนเทนเนอร์
ธง -RM ทำให้มั่นใจได้ว่าคอนเทนเนอร์จะถูกลบออกโดยอัตโนมัติหลังจากออก
ภายในคอนเทนเนอร์คำสั่ง lariat -c 'echo 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 จะล็อคอุปกรณ์ก่อนดำเนินการใด ๆ เพื่อให้แน่ใจว่าการเข้าถึงแบบพิเศษ หลังจากการดำเนินการเสร็จสมบูรณ์อุปกรณ์จะถูกปลดล็อค
ตรวจสอบให้แน่ใจว่าได้ให้เส้นทางที่ถูกต้องไปยังไฟล์คีย์ส่วนตัว ADB ผ่าน ~/.lariat/config.json
หากแตกต่างจากตำแหน่งเริ่มต้น ( ~/.android/adbkey
)
โดยค่าเริ่มต้น Lariat จะแจกแจง ทั้งหมด อุปกรณ์ในช่วง DeviceFarmer รวมถึงอุปกรณ์ที่ไม่ 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