
概述
Android Debug Bridge (adb) 是一個(gè)通用命令行工具,是 Android 開(kāi)發(fā)/測(cè)試人員必備工具,關(guān)于adb的詳細(xì)介紹可以查看谷歌 adb 官方中文文檔 Android Debug Bridge, 這里只是總結(jié)了一下常用的命令
文章中涉及的命令說(shuō)明
- 文章中的命令只針對(duì)于連接一個(gè)設(shè)備的情況,如果連接多個(gè)設(shè)備,需要在 adb shell -s 后面指定設(shè)備序列號(hào), 格式如下所示:
格式:
adb -s 225278f8 shell
獲取設(shè)備序列號(hào):
adb devices
-
<serial number>: 設(shè)備序列號(hào) -
<package_name>: Apk 的包名 -
<local>: pc 端路徑 -
<remote>: Android 設(shè)備上的路徑 -
<filepath_in_device>: Android 設(shè)備的文件路徑 -
<local_apk_path>: pc 端 apk 的路徑 -
<package_name>/<main_class>: Apk包名 / 啟動(dòng)類(lèi),格式如下所示
格式:
google.architecture.universal/.ActivityMain
打開(kāi)Apk,然后輸入下面命令查看:
adb shell dumpsys window | grep mCurrentFocus
命令總結(jié)
以下所有命令參考谷歌 adb 官方文檔 Android Debug Bridge,列出了經(jīng)常用命令
常用命令
| 備注 | 命令 |
|---|---|
| 查看連接設(shè)備 | adb devices |
| 查看連接設(shè)備列表信息 | adb devices -l |
| 指定設(shè)備 | adb -s <serial number> shell |
上傳文件和下載文件
| 備注 | 命令 |
|---|---|
| 將電腦上的文件上傳的設(shè)備 | adb push <local> <remote> |
| 設(shè)備中的文件下載到電腦 | adb pull <remote> <local> |
安裝和卸載應(yīng)用
| 備注 | 命令 |
|---|---|
| 安裝Apk | ?adb install <local_apk_path>
|
| 安裝Apk 并且授予Apk所有權(quán)限 | ?adb install -g <local_apk_path>
|
| 覆蓋安裝Apk且保留數(shù)據(jù) | ?adb install <local_apk_path>
|
| 降級(jí)安裝Apk | ?adb install -d <local_apk_path>
|
| 卸載Apk | ?adb uninstall <package_name>
|
| 卸載Apk且保留數(shù)據(jù) | adb shell pm uninstall -k <package_name> |
| 靜默安裝應(yīng)用 | ?adb shell pm install -t -r <local_apk_path>
|
| 卸載所有應(yīng)用(包括系統(tǒng)應(yīng)用) | ?adb shell pm uninstall -k --user 0 <package_name>
|
pm
| 備注 | 命令 |
|---|---|
| 顯示第三放應(yīng)用 | adb shell pm list package -3 |
| 顯示系統(tǒng)應(yīng)用 | adb shell pm list packages -s |
| 顯示apk文件路徑和包名列表 | adb shell pm list packages -f |
| 查看apk路徑 | adb shell pm path <package_name> |
| 清除數(shù)據(jù)和緩存 | adb shell pm clear <package_name> |
dumpsys
| 備注 | 命令 |
|---|---|
| 查看運(yùn)行Apk的包名 | adb shell dumpsys window | grep mCurrentFocus |
| 查看Activity任務(wù)棧 | adb shell dumpsys activity activities |
| 查看堆的分配情況 | adb shell dumpsys meminfo <package_name> |
| 查看應(yīng)用信息 | adb shell dumpsys package <package_name> |
| 獲取設(shè)備顯示屏參數(shù)信息 | adb shell dumpsys window displays |
| 清除bugreport信息 | adb shell dumpsys batterystats --reset |
| 從bugreport中過(guò)濾關(guān)鍵字信息 | adb shell dumpsys batterystats | grep 關(guān)鍵字 |
| 進(jìn)入dozeModel deep狀態(tài) | adb shell dumpsys deviceidle force-idle |
| 進(jìn)入dozeModel light狀態(tài) | adb shell dumpsys deviceidle force-idle light |
| 退出dozeModel | adb shell dumpsys deviceidle unforce |
| 重新激活設(shè)備 | adb shell dumpsys battery reset |
| 退出充電狀態(tài) | adb shell dumpsys battery unplug |
| 禁用doze mode |
adb shell dumpsys deviceidle disable adb shell dumpsys deviceidle whitelist
|
getprop
| 備注 | 命令 |
|---|---|
| 獲取設(shè)備型號(hào) | adb shell getprop ro.product.model |
| 獲取設(shè)備的Android系統(tǒng)版本 | adb shell getprop ro.build.version.release |
wm
| 備注 | 命令 |
|---|---|
| 獲取設(shè)備屏幕分辨率 | adb shell wm size |
| 獲取設(shè)備屏幕密度(單位:dpi) | adb shell wm density |
調(diào)試命令
| 備注 | 命令 |
|---|---|
| 查看應(yīng)用的進(jìn)程 | adb shell ps -ef | grep <package_name> |
| 查看內(nèi)存占用情況 | adb shell ps | grep <package_name> | awk '{ print $2 }' |
| 查看Activity的啟動(dòng)時(shí)間 | ?adb shell am start -W <package_name>/<main_class> |
| 強(qiáng)制關(guān)閉應(yīng)用 | ?adb shell am force-stop <package_name> |
| 實(shí)時(shí)查看設(shè)備CPU、內(nèi)存占用等信息 | adb shell top |
| 實(shí)時(shí)查看內(nèi)存占用排名前number的應(yīng)用 | adb shell top -m <number> |
| 為Apk跑number次monkey測(cè)試 | adb shell monkey -v -p <package_name> <number> |
| 獲取設(shè)備的MAC地址 | adb shell cat /sys/class/net/wlan0/address |
| 獲取設(shè)備的內(nèi)存占用信息 | adb shell cat /proc/meminfo |
其他命令
| 備注 | 命令 |
|---|---|
| 查看日志 | adb shell logcat | grep '關(guān)鍵字' |
| 輸出日志到log.txt文件 | adb shell logcat | grep '關(guān)鍵字' > log.txt |
| 截取屏幕 | ?adb shell screencap -p <filepath_in_device>
|
| 錄制屏幕 | adb shell screenrecord -p <filepath_in_device> |
常見(jiàn)問(wèn)題匯總
列舉一些常見(jiàn)問(wèn)題,后續(xù)會(huì)不斷完善
1. ubuntu 下使用 adb 出現(xiàn) no permissions 問(wèn)題解決方案
運(yùn)行 sudo adb devices 出現(xiàn)下列情況
List of devices attached
2aca417d no permissions
如何解決 no permissions?
在未連接 Android 設(shè)備的情況下,運(yùn)行命令 lsusb, 查看一下 ubuntu 下的 usb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 413c:2113 Dell Computer Corp.
Bus 001 Device 002: ID 413c:301a Dell Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
連接 Android 設(shè)備, 打開(kāi) usb 調(diào)試模式,運(yùn)行命令 lsusb, 查看一下 ubuntu 下的 usb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 413c:2113 Dell Computer Corp.
Bus 001 Device 002: ID 413c:301a Dell Computer Corp.
Bus 001 Device 055: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
通過(guò)對(duì)比兩個(gè)結(jié)果,可以查看到新連接的 Android 設(shè)備信息,注意其 ID 號(hào),這里是18d1:4ee7
然后進(jìn)入到 /etc/udev/rules.d/ 目錄下,查看是否有 .rules 文件.沒(méi)有則可以自己新建一個(gè)(名字可以隨意取,不能有中文),添加端口信息到文件中
# 打開(kāi)一個(gè)文件
sudo vim 51-android.rules
# 添加端口信息到51-android.rules
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"
這里 18d1 和 4ee7 則分別是上一步中查看到的 android 設(shè)備的信息,MODE 表示權(quán)限,完成之后執(zhí)行下面命令
sudo chmod a+rx /etc/udev/rules.d/51-android.rules
sudo service udev restart
最后拔掉 usb 重新連接,然后在運(yùn)行下面命令重啟 adb 服務(wù)
sudo adb kill-server
sudo adb start-server
sudo adb devices
如果上述步驟都操作正確,運(yùn)行 sudo adb devices 如下所示,就可以使用 adb 操作設(shè)備了
List of devices attached
2aca417d device
參考文獻(xiàn)
結(jié)語(yǔ)
致力于分享一系列 Android 系統(tǒng)源碼、逆向分析、算法相關(guān)的文章,每篇文章都會(huì)反復(fù)推敲,結(jié)合新的技術(shù),帶來(lái)一些新的思考,如果你同我一樣喜歡 coding,一起來(lái)學(xué)習(xí),期待與你一起成長(zhǎng)
文章列表
Android 10 源碼系列
- 0xA01 Android 10 源碼分析:Apk 是如何生成的
- 0xA02 Android 10 源碼分析:Apk 的安裝流程
- 0xA03 Android 10 源碼分析:Apk 加載流程之資源加載
- 0xA04 Android 10 源碼分析:Apk 加載流程之資源加載(二)
- 0xA05 Android 10 源碼分析:Dialog 加載繪制流程以及在 Kotlin、DataBinding 中的使用
工具系列
- 為數(shù)不多的人知道的 AndroidStudio 快捷鍵(一)
- 為數(shù)不多的人知道的 AndroidStudio 快捷鍵(二)
- 關(guān)于 adb 命令你所需要知道的
- 如何高效獲取視頻截圖
- 10分鐘入門(mén) Shell 腳本編程
- 如何在項(xiàng)目中封裝 Kotlin + Android Databinding