天天看點

關于adb指令你所需要知道的

關于adb指令你所需要知道的

概述

Android Debug Bridge (adb) 是一個通用指令行工具,是 Android 開發/測試人員必備工具,關于adb的詳細介紹可以檢視谷歌 adb 官方中文文檔 Android Debug Bridge, 這裡隻是總結了一下常用的指令

文章中涉及的指令說明

  • 文章中的指令隻針對于連接配接一個裝置的情況,如果連接配接多個裝置,需要在 adb shell -s 後面指定裝置序列号, 格式如下所示:
格式:
adb -s 225278f8 shell

擷取裝置序列号:
adb devices
           
  • <serial number>

    : 裝置序列号
  • <package_name>

    : Apk 的包名
  • <local>

    : pc 端路徑
  • <remote>

    : Android 裝置上的路徑
  • <filepath_in_device>

    : Android 裝置的檔案路徑
  • <local_apk_path>

    : pc 端 apk 的路徑
  • <package_name>/<main_class>

    : Apk包名 / 啟動類,格式如下所示
格式:
google.architecture.universal/.ActivityMain

打開Apk,然後輸入下面指令檢視:
adb shell dumpsys window | grep mCurrentFocus
           

指令總結

以下所有指令參考谷歌 adb 官方文檔 Android Debug Bridge,列出了經常用指令

常用指令

備注 指令
檢視連接配接裝置

adb devices

檢視連接配接裝置清單資訊

adb devices -l

指定裝置

adb -s <serial number> shell

上傳檔案和下載下傳檔案

備注 指令
将電腦上的檔案上傳的裝置

adb push <local> <remote>

裝置中的檔案下載下傳到電腦

adb pull <remote> <local>

安裝和解除安裝應用

備注 指令
安裝Apk

adb install <local_apk_path>

安裝Apk 并且授予Apk所有權限

adb install -g <local_apk_path>

覆寫安裝Apk且保留資料

adb install <local_apk_path>

降級安裝Apk

adb install -d <local_apk_path>

解除安裝Apk

adb uninstall <package_name>

解除安裝Apk且保留資料

adb shell pm uninstall -k <package_name>

靜默安裝應用

adb shell pm install -t -r <local_apk_path>

解除安裝所有應用(包括系統應用)

adb shell pm uninstall -k --user 0 <package_name>

pm

備注 指令
顯示第三放應用

adb shell pm list package -3

顯示系統應用

adb shell pm list packages -s

顯示apk檔案路徑和包名清單

adb shell pm list packages -f

檢視apk路徑

adb shell pm path <package_name>

清除資料和緩存

adb shell pm clear <package_name>

dumpsys

備注 指令
檢視運作Apk的包名

adb shell dumpsys window | grep mCurrentFocus

檢視Activity任務棧

adb shell dumpsys activity activities

檢視堆的配置設定情況

adb shell dumpsys meminfo <package_name>

檢視應用資訊

adb shell dumpsys package <package_name>

擷取裝置顯示屏參數資訊

adb shell dumpsys window displays

清除bugreport資訊

adb shell dumpsys batterystats --reset

從bugreport中過濾關鍵字資訊

adb shell dumpsys batterystats | grep 關鍵字

進入dozeModel deep狀态

adb shell dumpsys deviceidle force-idle

進入dozeModel light狀态

adb shell dumpsys deviceidle force-idle light

退出dozeModel

adb shell dumpsys deviceidle unforce

重新激活裝置

adb shell dumpsys battery reset

退出充電狀态

adb shell dumpsys battery unplug

禁用doze mode

adb shell dumpsys deviceidle disable

adb shell dumpsys deviceidle whitelist

getprop

備注 指令
擷取裝置型号

adb shell getprop ro.product.model

擷取裝置的Android系統版本

adb shell getprop ro.build.version.release

wm

備注 指令
擷取裝置螢幕分辨率

adb shell wm size

擷取裝置螢幕密度(機關:dpi)

adb shell wm density

調試指令

備注 指令
檢視應用的程序

adb shell ps -ef | grep <package_name>

檢視記憶體占用情況

adb shell ps | grep <package_name> | awk '{ print $2 }'

檢視Activity的啟動時間

​adb shell am start -W <package_name>/<main_class>

強制關閉應用

​adb shell am force-stop <package_name>

實時檢視裝置CPU、記憶體占用等資訊

adb shell top

實時檢視記憶體占用排名前number的應用

adb shell top -m <number>

為Apk跑number次monkey測試

adb shell monkey -v -p <package_name> <number>

擷取裝置的MAC位址

adb shell cat /sys/class/net/wlan0/address

擷取裝置的記憶體占用資訊

adb shell cat /proc/meminfo

其他指令

備注 指令
檢視日志

adb shell logcat | grep '關鍵字'

輸出日志到log.txt檔案

adb shell logcat | grep '關鍵字' > log.txt

截取螢幕

adb shell screencap -p <filepath_in_device>

錄制螢幕

adb shell screenrecord -p <filepath_in_device>

常見問題彙總

列舉一些常見問題,後續會不斷完善

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 工具

繼續閱讀