sidebar: auto # Android 調試橋 (adb) Android 調試橋 (adb) 是一種功能多樣的命令行工具,可讓您與設備進行通信。adb 命令可用於執行各種設備操作,例如安裝和調試應用。adb 提供對 Unix shell(可用來在設備上運行各種命令)的訪問許可權。它是一種客戶 ...
sidebar: auto
Android 調試橋 (adb)
Android 調試橋 (adb) 是一種功能多樣的命令行工具,可讓您與設備進行通信。adb 命令可用於執行各種設備操作,例如安裝和調試應用。adb 提供對 Unix shell(可用來在設備上運行各種命令)的訪問許可權。它是一種客戶端-伺服器程式,包括以下三個組件:
- 客戶端:用於發送命令。客戶端在開發機器上運行。您可以通過發出 adb 命令從命令行終端調用客戶端。
- 守護程式 (adbd):用於在設備上運行命令。守護程式在每個設備上作為後臺進程運行。
- 伺服器:用於管理客戶端與守護程式之間的通信。伺服器在開發機器上作為後臺進程運行。
命令
查看已連接設備
# 查看已連接設備
$ adb devices
List of devices attached
35643218009**** device
連接設備
無線調試需要連接後才能出現在 adb devices
中
-
- 打開
無線調試
- 打開
系統設置 -> 開發者選項 -> 調試 -> 無線調試
-
- 連接ip地址和埠
這裡ip沒有固定的話會經常變, 埠每次打開無線調試也會變
# 連接 網路設備:ip
$ adb connect <IP地址:埠>
connected to 192.168.10.168:39773
# 再查看一下設備列表
$ adb devices
List of devices attached
35643218009*** device
192.168.10.168:39773 device # ++
斷開連接
$ adb disconnect <IP地址:埠>
success
安裝應用/卸載應用
$ adb install <apk路徑>
success
$ adb uninstall <包名>
success
查看已安裝應用包名
$ adb shell pm list packages
package:com.android.wallpaperpicker
package:com.android.providers.contacts
package:com.android.captiveportallogin
package:com.mediatek.dataprotection
...
搜索包 (僅 Linux/Mac/Git Bash
)
$ adb shell pm list packages | grep "com.android"
package:com.android.wallpaperpicker
package:com.android.providers.contacts
打開應用
adb shell am start -W -n <包名>/<Activity>
$ adb shell am start -W -n com.example.myapplication/com.example.myapplication.MainActivity
Starting: Intent { cmp=com.example.myapplication/.MainActivity }
Status: ok
Activity: com.example.myapplication/.MainActivity
ThisTime: 191
TotalTime: 191
WaitTime: 246
Complete
Activity 獲取方式:
使用 apktool
工具解包, 用文本編輯器打開 AndroidManifest.xml
拿到 activity
的 android:name
第一個是首屏
# 如何解包
$ ./apktool.bat d woc.apk
關閉應用
$ adb shell am kill <包名>
success
# 殺死後臺所有進程
$ adb shell am kill-all
上傳文件
adb push <本地文件> <設備中目標文件>
$ adb push README.md /data/tmp/woc.md
README.md: 1 file pushed, 0 skipped. 4.1 MB/s (683 bytes in 0.000s)
下載文件
# 下載文件到電腦中
$ adb pull 路徑
查看日誌
adb logcat *
# 過濾指定關鍵詞 macos / linux
$ adb logcat * | grep "connect to RTMP server by url"
...
# 過濾指定關鍵詞 windows
$ adb logcat * | find "connect to RTMP server by url"
...
截圖
TODO
模擬操作
TODO
打開網頁
# 瀏覽器打開百度
$ adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com
提取應用 apk
# 獲取包文件
$ adb shell pm list packages | grep "teamviewer"
# 獲取應用安裝包所在位置
$ adb shell pm path com.teamviewer.quicksupport.addon.universal
# 根據 path 獲取 apk
$ adb pull /data/app/com.teamviewer.quicksupport.addon.universal-6gbqnHHmnLCq7BiaQln5Bg==/base.apk
模擬輸入文本
# 註意需要轉碼, 比如 \e3 這種, 不能輸入中文
$ adb shell input text "hello,world"
發送廣播
adb shell am broadcast -a <action> -p <package> --e <鍵> <值> ...
# 發送廣播模擬
# 附加數據類型說明 --ei(nt), --es(tring), --eb(ool)
$ adb shell am broadcast -a com.lhs.xcam.cmdaction -p cn.alauncher.dvr --ei camtype 1 --es cmd startrtc --es url "rtmp://xxxx/live/livestream/233"
參考
- 指令
am
: 是activity manager
的縮寫, 可以啟動Activity、打開或關閉進程、發送廣播等操作