概述
Android Debug Bridge (adb) 是一個通用指令行工具,是 Android 開發/測試人員必備工具,關于adb的詳細介紹可以檢視谷歌 adb 官方中文文檔 Android Debug Bridge, 這裡隻是總結了一下常用的指令
文章中涉及的指令說明
- 文章中的指令隻針對于連接配接一個裝置的情況,如果連接配接多個裝置,需要在 adb shell -s 後面指定裝置序列号, 格式如下所示:
格式:
adb -s 225278f8 shell
擷取裝置序列号:
adb devices
-
: 裝置序列号<serial number>
-
: Apk 的包名<package_name>
-
: pc 端路徑<local>
-
: Android 裝置上的路徑<remote>
-
: Android 裝置的檔案路徑<filepath_in_device>
-
: pc 端 apk 的路徑<local_apk_path>
-
: Apk包名 / 啟動類,格式如下所示<package_name>/<main_class>
格式:
google.architecture.universal/.ActivityMain
打開Apk,然後輸入下面指令檢視:
adb shell dumpsys window | grep mCurrentFocus
指令總結
以下所有指令參考谷歌 adb 官方文檔 Android Debug Bridge,列出了經常用指令
常用指令
備注 | 指令 |
---|---|
檢視連接配接裝置 | |
檢視連接配接裝置清單資訊 | |
指定裝置 | |
上傳檔案和下載下傳檔案
備注 | 指令 |
---|---|
将電腦上的檔案上傳的裝置 | |
裝置中的檔案下載下傳到電腦 | |
安裝和解除安裝應用
備注 | 指令 |
---|---|
安裝Apk | |
安裝Apk 并且授予Apk所有權限 | |
覆寫安裝Apk且保留資料 | |
降級安裝Apk | |
解除安裝Apk | |
解除安裝Apk且保留資料 | |
靜默安裝應用 | |
解除安裝所有應用(包括系統應用) | |
pm
備注 | 指令 |
---|---|
顯示第三放應用 | |
顯示系統應用 | |
顯示apk檔案路徑和包名清單 | |
檢視apk路徑 | |
清除資料和緩存 | |
dumpsys
備注 | 指令 |
---|---|
檢視運作Apk的包名 | |
檢視Activity任務棧 | |
檢視堆的配置設定情況 | |
檢視應用資訊 | |
擷取裝置顯示屏參數資訊 | |
清除bugreport資訊 | |
從bugreport中過濾關鍵字資訊 | |
進入dozeModel deep狀态 | |
進入dozeModel light狀态 | |
退出dozeModel | |
重新激活裝置 | |
退出充電狀态 | |
禁用doze mode | |
getprop
備注 | 指令 |
---|---|
擷取裝置型号 | |
擷取裝置的Android系統版本 | |
wm
備注 | 指令 |
---|---|
擷取裝置螢幕分辨率 | |
擷取裝置螢幕密度(機關:dpi) | |
調試指令
備注 | 指令 |
---|---|
檢視應用的程序 | |
檢視記憶體占用情況 | |
檢視Activity的啟動時間 | |
強制關閉應用 | |
實時檢視裝置CPU、記憶體占用等資訊 | |
實時檢視記憶體占用排名前number的應用 | |
為Apk跑number次monkey測試 | |
擷取裝置的MAC位址 | |
擷取裝置的記憶體占用資訊 | |
其他指令
備注 | 指令 |
---|---|
檢視日志 | |
輸出日志到log.txt檔案 | |
截取螢幕 | |
錄制螢幕 | |
常見問題彙總
列舉一些常見問題,後續會不斷完善
1. ubuntu 下使用 adb 出現 no permissions 問題解決方案
運作 sudo adb devices 出現下列情況
List of devices attached
2aca417d no permissions
如何解決 no permissions?
在未連接配接 Android 裝置的情況下,運作指令 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 裝置, 打開 usb 調試模式,運作指令 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
通過對比兩個結果,可以檢視到新連接配接的 Android 裝置資訊,注意其 ID 号,這裡是18d1:4ee7
然後進入到 /etc/udev/rules.d/ 目錄下,檢視是否有 .rules 檔案.沒有則可以自己建立一個(名字可以随意取,不能有中文),添加端口資訊到檔案中
# 打開一個檔案
sudo vim 51-android.rules
# 添加端口資訊到51-android.rules
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"
這裡 18d1 和 4ee7 則分别是上一步中檢視到的 android 裝置的資訊,MODE 表示權限,完成之後執行下面指令
sudo chmod a+rx /etc/udev/rules.d/51-android.rules
sudo service udev restart
最後拔掉 usb 重新連接配接,然後在運作下面指令重新開機 adb 服務
sudo adb kill-server
sudo adb start-server
sudo adb devices
如果上述步驟都操作正确,運作 sudo adb devices 如下所示,就可以使用 adb 操作裝置了
List of devices attached
2aca417d device
參考文獻
- 谷歌adb官方中文文檔
- adb常用指令整理
- awesome-adb
- ADB-常用指令
- 針對低電耗模式和應用待機模式進行優化
結語
緻力于分享一系列 Android 系統源碼、逆向分析、算法相關的文章,每篇文章都會反複推敲,結合新的技術,帶來一些新的思考,如果你同我一樣喜歡 coding,一起來學習,期待與你一起成長
文章清單
Android 10 源碼系列
- 0xA01 Android 10 源碼分析:Apk 是如何生成的
- 0xA02 Android 10 源碼分析:Apk 的安裝流程
- 0xA03 Android 10 源碼分析:Apk 加載流程之資源加載
- 0xA04 Android 10 源碼分析:Apk 加載流程之資源加載(二)
- 0xA05 Android 10 源碼分析:Dialog 加載繪制流程以及在 Kotlin、DataBinding 中的使用
工具系列
- 為數不多的人知道的 AndroidStudio 快捷鍵(一)
- 為數不多的人知道的 AndroidStudio 快捷鍵(二)
- 關于 adb 指令你所需要知道的
- 如何高效擷取視訊截圖
- 10分鐘入門 Shell 腳本程式設計
- 如何在項目中封裝 Kotlin + Android Databinding
逆向系列
- 基于 Smali 檔案 Android Studio 動态調試 APP
- 解決在 Android Studio 3.2 找不到 Android Device Monitor 工具