adb功能速查

最近需要弄android調試,把adb功能列於此方便查看。本文內容主要來自以下地址

https://developer.android.com/tools/adb?hl=zh-cn

 

查詢設備

adb devices -l

 

將命令發送至特定設備

adb -s [device-name] install helloworld.apk

注意設備名稱可以是查詢設備時得到的名稱。如果有多個可用設備,但只有一個是模擬器,可使用-e選項將命令發送至該模擬器;如果有多個設備,但只連接了一個硬件設備,可使用-d選項將命令發送至該硬件設備。此處install爲安裝命令,也可以執行其他指令。

 

設置端口轉發

adb forward tcp:6100 tcp:7100    # 主機端口6100到設備端口7100的轉發
adb forward tcp:6100 local:logd   # 主機端口6100到設備日誌

 

文件複製

adb pull remote_path local_path    # 從設備複製某個文件或目錄
adb push local_path remote_path    # 將某個文件或目錄複製到設備

 

停止adb服務器

adb kill-server

停止後再執行任意adb命令將重新啓動adb服務器。

 

發出adb命令

adb [-d | -e | -s serial_number] command

若只有一個設備或模擬器連接,將默認發送命令至該設備;否則需使用-d, -e, -s選項指定發送命令的目標設備。可使用以下命令查看所有支持的adb命令

adb --help

 

發出shell命令

adb [-d | -e | -s serial_number] shell shell_command

也可在設備上啓動交互式shell

adb [-d | -e | -s serial_number] shell

android 提供了大多數常見的unix命令行工具。如需查看可用工具列表,可使用以下命令

adb shell ls /system/bin

 

模擬點擊

adb shell input tap <x> <y>     # 點擊座標(x, y)
adb shell input swipe <x1> <y1> <x2> <y2)     # 從(x1, y1)滑動到(x2, y2)
adb shell input keyevent <keycode>      # 發送按鍵事件

常用keycode如下:

3           HOME鍵
4           返回鍵
5           打開撥號應用
6           掛斷電話
24          增加音量
25          降低音量
26          電源鍵
27          拍照(需在相機應用中)
64          打開瀏覽器
82          菜單鍵
85          播放/暫停
86          停止播放
87          播放下一首
88          播放上一首
122         移動光標到行首或列表頂部
123         移動光標到行末或列表底部
126         恢復播放
127         暫停播放
164         靜音
176         打開系統設置
187         切換應用
207         打開聯繫人
208         打開日曆
209         打開音樂
210         打開計算器
220         降低屏幕亮度
221         提高屏幕亮度
223         系統休眠
224         點亮屏幕
231         打開語音助手
276         如果沒有wakelock則讓系統休眠

 

調用activity管理器

adb shell am start -a android.intent.action.VIEW

在shell中,activity管理器(am)的語法爲

am command

可用的am命令爲

start [options] intent     # 啓動由intent指定的activity
startservice [options] intent         # 啓動由intent指定的service
force-stop package         # 強行停止與package關聯的所有進程
kill [options] package     # 中止與package關聯的所有進程,此命令僅中止可安全中止且不影響用戶體驗的進程
kill-all                   # 中止所有後臺進程
broadcast [options] intent            # 發出廣播intent
instrument [options] component        # 使用Instrumentation實例啓動監控,目標component採用package/class格式
profile start process file            # 啓動process的性能分析器,將結果寫入file
profile stop process       # 停止process的性能分析器
dumpheap [options] process file       # 轉儲process的堆,寫入file
set-debug-app [options] package       # 設置要調試的應用package
clear-debug-app            # 清除之前使用set-debug-app設置的用於調試的軟件包
monitor [options]          # 開始監控崩潰或ANR
screen-compat {on | off} package      # 控制package的屏幕兼容性模式
display-size [reset | WIDTHxHEIGHT]   # 替換設備顯示尺寸
display-density dpi        # 替換設備顯示密度
to-uri intent              # 以URI的形式輸出給定的intent規範
to-intent-uri intent       # 以intent:uri的形式輸出給定的intent規範

 

調用軟件包管理器(pm)

adb shell pm uninstall com.example.myapp

在shell中pm的語法爲

pm command

可用的pm命令如下

list packages [options] filter     # 輸出所有的軟件包,或輸出包含filter中文字的軟件包
list permission-groups             # 輸出所有已知的權限組
list permissions [options] group   # 輸出所有已知的權限,或僅輸出group的權限
list instrumentation [options]     # 列出所有測試軟件包
list features                      # 輸出系統的所有功能
list libraries                     # 輸出當前設備支持的所有庫
list users                         # 輸出系統中的所有用戶
path package                       # 輸出給定package的apk路徑
install [options] apk_path         # 將軟件包安裝到系統
uninstall [options] package        # 移除軟件包
clear package                      # 刪除與軟件包關聯的所有數據
enable package_or_component        # 啓用給定的軟件包或組件(package/class形式)
disable package_or_component       # 金庸給定的軟件包或組件(package/class形式)
disable-user --user [user_id] package_or_component      # 禁用用戶對包或組件的訪問
grant package_name permission      # 嚮應用授予權限
revoke package_name permission     # 從應用撤銷權限
set-install-location location      # 更改默認安裝位置。0:自動-讓系統決定 1:內部-安裝在內部存儲空間  2:外部-安裝在外部介質
get-install-location               # 返回當前安裝位置,含義同上
set-permission-enforced permission [true | false]       # 指定是否應強制執行指定權限
trim-caches desired_free_space     # 減少緩存文件以達到給定的可用空間
create-user user_name              # 創建新用戶
remove-user user_id                # 刪除用戶
get-max-users                      # 輸出設備支持的最大用戶數
get-app-links [options] [package]  # 輸出給定package的域名驗證狀態,若未給定則輸出所有包的域名驗證狀態
reset-app-links [options] [package]                     # 重置給定軟件包的域名驗證狀態
verify-app-links [--re-verify] [package]                # 廣播給定package的域名驗證請求
set-app-links [--package package] state domains         # 設置軟件包的域名狀態
set-app-links-user-selection --user user_id [--package package] enabled domains     # 設置用戶針對軟件包的域名狀態
set-app-links-allowed --user user_id [--package package] allowed                    # 切換軟件包的自動驗證鏈接處理
get-app-link-owners --user user_id [--package package] domains                      # 爲給定用戶輸出特定域名的所有者

 

調用設備管理器(dpm)

adb shell dpm command

在shell中dpm語法爲

dpm command

可用的dpm命令如下

set-active-admin [options] component          # 將component設爲活躍管理員
set-profile-owner [options] component         # 將component設爲活躍管理員,並將其軟件包設爲現有用戶文件所有者
set-device-owner [options] component          # 將component設爲活躍管理員,並將其軟件包設爲設備所有者
remove-active-admin [options] component       # 停用活躍管理員
clear-freeze-period-record                    # 清除設備系統OTA更新凍結期記錄
force-network-logs                            # 強制系統讓任何現有網絡日誌隨時可供DPC檢索
force-security-logs                           # 強制系統向DPC提供安全日誌

 

屏幕截圖

adb shell screencap /sdcard/screen.png

在shell中screencap語法爲

screencap filename

 

錄製視頻

adb shell screenrecord /sdcard/demo.mp4

在shell中screenrecord語法爲

screenrecord [options] filename

按Ctrl+C可停止錄製,否則到3分鐘或--time-limit所設置的時間限制時錄製將自動停止。注意音頻不與視頻同時錄製,且不支持錄製時旋轉屏幕,若發生旋轉可能會導致錄製內容被切斷。

screenrecord選項如下:

--help                # 顯示幫助
--size WIDTHxHeight   # 設置視頻分辨率
--bit-rate rate       # 設置碼率,默認爲4Mbps
--time-limit time     # 設置最長錄製時間,單位爲秒,默認180
--rotate              # 將輸出旋轉90度
--verbose             # 在命令行顯示日誌信息,若不設置則運行時不會顯示任何信息

 

讀取應用的ART配置文件

從android7.0(API 24)開始,android運行時(ART)會收集已安裝應用的執行配置文件,這些配置文件用於優化性能。可檢查收集到的配置文件,瞭解應用啓動期間,系統頻繁執行了哪些方法和使用了哪些類。

adb shell cmd package dump-profiles package       # 生成文本格式的配置文件信息
adb pull /data/misc/profman/package.prof.txt      # 檢索生成的文件

 

重置測試設備

adb shell cmd testharness enable

使用testharness恢復設備時,設備會自動將允許通過當前工作站調試設備的RSA密鑰備份在持久性位置,這樣重置設備後,工作站可繼續調試設備併發出adb指令,無需手動註冊新密鑰。此外,testharness還會更改以下設備設置:1. 不出現初始設備設置嚮導;2. 停用鎖定屏幕,停用緊急警報,停用賬號自動同步,停用系統自動更新;3. 停用預安裝的安全應用。

 

以上是adb的一些用法說明。

下面給出自動化測試工具UIAutomator2的一些說明和用法。

本來官方提供了UI Automator viewer用於界面測試,但目前官方標記爲obsolete,改爲採用espresso了。

一般測試採用python方式更簡單方便,故此處介紹UI Automator2。

 

首先是安裝

pip3 install --pre -U uiautomator2
pip3 install --pre -U weditor

 

初始化

python3 -m uiautomator2 init   # 安裝com.github.uiautomator.test和atx
python3 -m weditor             # 打開weditor

注意需要在手機上打開atx啓動uiautomator,此時可在瀏覽器界面操作連接並dump hierarchy將手機界面顯示在瀏覽器中。

 

控制手機

import uiautomator2 as u2

c = u2.connect('192.168.1.101')    # wifi連接
c = u2.connect_usb('device serial_id')     # usb連接

c.app_install('http://domain.com/xxx.apk')   # 安裝應用
c.app_start("app_package_name")              # 打開應用

c.press("recent")                          # 點擊 recent 鍵
c(resourceId="com.alibaba.android.launcher:id/clear_all_recent_image_button").click()   # 點擊某按鍵

# 元素定位的方法
element1 = c(resourceID="abc")
element2 = c(text="abc")
element3 = c(description=value)   # 通過description=value定位控件
element4 = c(className=value)     # 通過className=value定位控件

# 單擊控件
element1[index].click()   # 定位控件有多個,通過index指定一個
element2.click()          # 定位控件只有一個
c.click(x, y)      # 點擊具體座標

# 雙擊控件
element3[index].double_click()
element4.double_click()
c.double_click(x, y)     # 雙擊具體座標

# 長按控件
element1[index].long_click()
element2.long_click()
c.long_click(x, y, duration=0.5)  # 長按具體座標持續0.5秒

# 輸入文本
element3[index].set_text("abc")
c.set_fastinput_ime(True)       # 打開輸入法
c.send_keys(text)               # 輸入文本
c.set_fastinput_ime(False)      # 關閉輸入法

# 清除文本
element4.clear_text()

# 獲取文本
element4.get_text()

# 手勢控制
c.swipe(sx, sy, ex, ey, duration=0.5)  # 滑動
c.drag(sx, sy, ex, ey, duration=0.5)   # 拖拽

# 系統控制
key = {"back", "home", "recent", "power", "volume_up", "volume_down", "volume_mute", "enter"}
c.press(key[index])

# 旋轉
orientation = c.orientation  # 獲取屏幕方向,值爲natural, left, right, upsidedown
c.freeze_rotation()   # 鎖定屏幕方向
c.freeze_rotation(True)   # 解除鎖定屏幕方向
c.set_orientation("left")   # 設置屏幕方向向左轉爲橫屏
c.set_orientation("natural")   # 設置屏幕爲正常狀態

# 截屏
image = c.screenshot()
image.save("path.jpg")
c.screenshot("path.jpg")  # 截屏並保存

# 文件交換
c.push(pc_file_path, phone_dir_path)    # 將pc文件複製到設備,若設備目錄不存在會自動創建
c.pull(phone_file_path, pc_dir_path)    # 將設備文件複製到pc端

c.app_stop("app_package_name")               # 關閉應用
c.app_stop_all()                           # 關閉所有應用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章