Python adb library for adb service (Only support Python3.6+)
pip install adbutils
Example
import adbutils
adb = adbutils.AdbClient(host="127.0.0.1", port=5037)
print(adb.devices())
The above code can be short to from adbutils import adb
from adbutils import adb
for d in adb.devices():
print(d.serial) # print device serial
d = adb.device(serial="33ff22xx")
# You do not need to offer serial if only one device connected
# RuntimeError will be raised if multi device connected
d = adb.device()
The following code will not write from adbutils import adb
for short
Same as command adb connect
output = adb.connect("127.0.0.1:5555")
print(output)
# output: already connected to 127.0.0.1:5555
Same as adb forward --list
# list all forwards
for item in adb.forward_list():
print(item.serial, item.local, item.remote)
# 8d1f93be tcp:10603 tcp:7912
# 12345678 tcp:10664 tcp:7912
# list only one device forwards
for item in adb.forward_list("8d1f93be"):
print(item.serial, item.local, item.remote)
# 8d1f93be tcp:10603 tcp:7912
# 12345678 tcp:10664 tcp:7912
I assume there is only one device connected.
import io
from adbutils import adb
d = adb.device()
print(d.serial) # 获取序列号
print(d.shell(["getprop", "ro.serial"])) # 获取Prop信息
d.sync.push(io.BytesIO(b"Hello Android"), "/data/local/tmp/hi.txt") # 推送文件
# 读取文件
for chunk in d.sync.iter_content("/data/local/tmp/hi.txt"):
print("Chunk", chunk)
# 拷贝到本地
d.sync.pull("/data/local/tmp/hi.txt", "hi.txt")
# 获取包的信息
info = d.package_info("com.example.demo")
if info:
print(info) # expect {"version_name": "1.2.3", "version_code": "12", "signature": "0xff132"}
# List devices
$ python -m adbutils -l
8d1f93be MI 5s
192.168.190.101:5555 Google Nexus 5X - 7.0.0 - API 24 - 1080x1920
# Show adb server version
$ python -m adbutils -V
39
# Install apk from local filesystem 安装本地apk(带有进度)
$ python -m adbutils -i some.apk
# Install apk from URL 通过URL安装apk(带有进度)
$ python -m adbutils -i http://example.com/some.apk
# Uninstall 卸载应用
$ python -m adbutils -u com.github.example
# List installed packages 列出所有应用
$ python -m adbutils --list-packages
com.android.adbkeyboard
com.buscode.whatsinput
com.finalwire.aida64
com.github.uiautomator
For more usage, please see the code for details. (Sorry I'm too lazy.)
AdbUtils provided some custom functions for some complex operations.
You can use it like this:
# simulate click
d.click(100, 100)
# swipe from(10, 10) to(200, 200) 500ms
d.swipe(10, 10, 200, 200, 0.5)
d.list_packages()
# example output: ["com.example.hello"]
d.window_size()
# example output: (1080, 1920)
d.rotation()
# example output: 1
# other possible valus: 0, 1, 2, 3
d.package_info("com.github.uiautomator")
# example output: {"version_name": "1.1.7", "version_code": "1007"}
d.keyevent("HOME")
# There still too many functions, please see source codes
For further usage, please read mixin.py for details.
Logcat is really important in android development and test. And you can use it easily:
import adbutils
import time
adb = adbutils.AdbClient(host="127.0.0.1", port=5037)
device = adb.device()
# clean logcat before catching
device.logcat.clean()
# start catching log, and save them to /sdcard/something.txt (in your phone)
device.logcat.start('/sdcard/something.txt')
# with some extra args?
# same as: `adb logcat -v long ActivityManager:I *:S`
device.logcat.start('/sdcard/something.txt', arg_str='-v long ActivityManager:I *:S')
time.sleep(5)
# and you can sync the log file anytime
device.logcat.sync_to_pc('./something1.txt')
time.sleep(5)
# stop catching log
device.logcat.stop()
# or you can stop it and pull it to your pc easily
device.logcat.stop('./something1.txt')
# with removing the origin file in your phone?
device.logcat.stop('./something1.txt', remove=True)
More about logcat: awesome-adb
git clone https://github.com/openatx/adbutils adbutils
pip install -e adbutils # install as development mode
Now you can edit code in adbutils
and test with
import adbutils
# .... test code here ...
Run tests requires one device connected to your computer
# change to repo directory
cd adbutils
pip install pytest
pytest tests/