1. 程式人生 > 其它 >ADB 常用命令整理

ADB 常用命令整理

技術標籤:Androidandroid

遠端連線Android 使用adb,遠端操作螢幕推薦使用Scrcpy,以下為個人學習記錄使用

1、命令語法

adb [-d|-e|-s <serialNumber>] <command>

如果只有一個裝置/模擬器連線時,可以省略掉[-d|-e|-s <serialNumber>]這一部分,直接使用adb <command>。

如果有多個裝置/模擬器連線,則需要為命令指定目標裝置。

引數含義
-d指定當前唯一通過 USB 連線的 Android 裝置為命令目標
-e指定當前唯一執行的模擬器為命令目標
-s <serialNumber>
指定相應 serialNumber 號的裝置/模擬器為命令目標

2、裝置查詢

adb devices

輸出格式為[serialNumber] [state],serialNumber 即我們常說的 SN,state 有如下幾種:

  • offline—— 表示裝置未連線成功或無響應。

  • device—— 裝置已連線。注意這個狀態並不能標識 Android 系統已經完全啟動和可操作,在裝置啟動過程中裝置例項就可連線到 adb,但啟動完畢後系統才處於可操作狀態。

  • no device—— 沒有裝置/模擬器連線。

3、列印螢幕解析度資訊

adb shell dumpsys window displays

列印簡單方式:
adb shell wm size

4、啟動/停止

啟動:adb start-server

停止:adb kill-server

5、無線連結/斷開

連結:adb connect <device-ip-address>

斷開:adb disconnect <device-ip-address>

如果連線不了,請確認 Android 裝置與電腦是連線到了同一個 WiFi,然後再次執行adb connect <device-ip-address>那一步;

如果還是不行的話,通過adb kill-server重新啟動 adb 然後從頭再來一次試試。

6、檢視應用列表

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

檢視所有應用:adb shell pm list packages

引數顯示列表
所有應用
-f顯示應用關聯的 apk 檔案
-d只顯示 disabled 的應用
-e只顯示 enabled 的應用
-s只顯示系統應用
-3只顯示第三方應用
-i顯示應用的 installer
-u包含已解除安裝應用
<FILTER>包名包含<FILTER>字串

7、安裝APK

adb install [-lrtsdg] <path_to_apk>

adb install後面可以跟一些可選引數來控制安裝 APK 的行為,可用引數及含義如下:

引數含義
-l將應用安裝到保護目錄 /mnt/asec
-r允許覆蓋安裝
-t允許安裝 AndroidManifest.xml 裡 application 指定android:testOnly="true"的應用
-s將應用安裝到 sdcard
-d允許降級覆蓋安裝
-g授予所有執行時許可權

常見安裝失敗輸出程式碼、含義及可能的解決辦法如下:

輸出含義解決辦法
INSTALL_FAILED_ALREADY_EXISTS應用已經存在,或解除安裝了但沒解除安裝乾淨adb install時使用-r引數,或者先adb uninstall <packagename>再安裝
INSTALL_FAILED_INVALID_APK無效的 APK 檔案
INSTALL_FAILED_INVALID_URI無效的 APK 檔名確保 APK 檔名裡無中文
INSTALL_FAILED_INSUFFICIENT_STORAGE空間不足清理空間
INSTALL_FAILED_DUPLICATE_PACKAGE已經存在同名程式
INSTALL_FAILED_NO_SHARED_USER請求的共享使用者不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE以前安裝過同名應用,但解除安裝時資料沒有移除;或者已安裝該應用,但簽名不一致adb uninstall <packagename>再安裝
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE請求的共享使用者存在但簽名不一致
INSTALL_FAILED_MISSING_SHARED_LIBRARY安裝包使用了裝置上不可用的共享庫
INSTALL_FAILED_REPLACE_COULDNT_DELETE替換時無法刪除
INSTALL_FAILED_DEXOPTdex 優化驗證失敗或空間不足
INSTALL_FAILED_OLDER_SDK裝置系統版本低於應用要求
INSTALL_FAILED_CONFLICTING_PROVIDER裝置裡已經存在與應用裡同名的 content provider
INSTALL_FAILED_NEWER_SDK裝置系統版本高於應用要求
INSTALL_FAILED_TEST_ONLY應用是 test-only 的,但安裝時沒有指定-t引數
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不相容裝置 CPU 應用程式二進位制介面的 native code
INSTALL_FAILED_MISSING_FEATURE應用使用了裝置不可用的功能
INSTALL_FAILED_CONTAINER_ERRORsdcard 訪問失敗; 2. 應用簽名與 ROM 簽名一致,被當作內建應用確認 sdcard 可用,或者安裝到內建儲存; 2. 打包時不與 ROM 使用相同簽名
INSTALL_FAILED_INVALID_INSTALL_LOCATION不能安裝到指定位置; 2. 應用簽名與 ROM 簽名一致,被當作內建應用切換安裝位置,新增或刪除-s引數; 2. 打包時不與 ROM 使用相同簽名
INSTALL_FAILED_MEDIA_UNAVAILABLE安裝位置不可用一般為 sdcard,確認 sdcard 可用或安裝到內建儲存
INSTALL_FAILED_VERIFICATION_TIMEOUT驗證安裝包超時
INSTALL_FAILED_VERIFICATION_FAILURE驗證安裝包失敗
INSTALL_FAILED_PACKAGE_CHANGED應用與呼叫程式期望的不一致
INSTALL_FAILED_UID_CHANGED以前安裝過該應用,與本次分配的 UID 不一致清除以前安裝過的殘留檔案
INSTALL_FAILED_VERSION_DOWNGRADE已經安裝了該應用更高版本使用-d引數
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE已安裝 target SDK 支援執行時許可權的同名應用,要安裝的版本不支援執行時許可權
INSTALL_PARSE_FAILED_NOT_APK指定路徑不是檔案,或不是以.apk結尾
INSTALL_PARSE_FAILED_BAD_MANIFEST無法解析的 AndroidManifest.xml 檔案
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION解析器遇到異常
INSTALL_PARSE_FAILED_NO_CERTIFICATES安裝包沒有簽名
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES已安裝該應用,且簽名與 APK 檔案不一致先解除安裝裝置上的該應用,再安裝
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING解析 APK 檔案時遇到CertificateEncodingException
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest 檔案裡沒有或者使用了無效的包名
INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest 檔案裡指定了無效的共享使用者 ID
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED解析 manifest 檔案時遇到結構性錯誤
INSTALL_PARSE_FAILED_MANIFEST_EMPTY在 manifest 檔案裡找不到找可操作標籤(instrumentation 或 application)
INSTALL_FAILED_INTERNAL_ERROR因系統問題安裝失敗
INSTALL_FAILED_USER_RESTRICTED使用者被限制安裝應用
INSTALL_FAILED_DUPLICATE_PERMISSION應用嘗試定義一個已經存在的許可權名稱
INSTALL_FAILED_NO_MATCHING_ABIS應用包含裝置的應用程式二進位制介面不支援的 native code
INSTALL_CANCELED_BY_USER應用安裝需要在裝置上確認,但未操作裝置或點了取消在裝置上同意安裝
INSTALL_FAILED_ACWF_INCOMPATIBLE應用程式與裝置不相容
does not contain AndroidManifest.xml無效的 APK 檔案
is not a valid zip file無效的 APK 檔案
Offline裝置未連線成功先將裝置與 adb 連線成功
unauthorized裝置未授權允許除錯
error: device not found沒有連線成功的裝置先將裝置與 adb 連線成功
protocol failure裝置已斷開連線先將裝置與 adb 連線成功
Unknown option: -sAndroid 2.2 以下不支援安裝到 sdcard不使用-s引數
No space left on device空間不足清理空間
Permission denied … sdcard …sdcard 不可用
signatures do not match the previously installed version; ignoring!已安裝該應用且簽名不一致先解除安裝裝置上的該應用,再安裝

8、解除安裝應用

adb uninstall [-k] <packagename>

<packagename>表示應用的包名,-k引數可選,表示解除安裝應用但保留資料和快取目錄。

9、檢視正在執行的Service

adb shell dumpsys activity services [<packagename>]

<packagename>引數不是必須的,指定<packagename>表示檢視與某個包名相關的 Services,不指定表示檢視所有 Services。

<packagename>不一定要給出完整的包名,比如執行adb shell dumpsys activity services org.mazhuang,那麼包名org.mazhuang.demo1org.mazhuang.demo2org.mazhuang123等相關的 Services 都會列出來。

10、調起Activity

adb shell am start [options] <INTENT>

例如:

adb shell am start -n com.tencent.mm/.ui.LauncherUI

表示調起微信主介面。

adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

表示調起org.mazhuang.boottimemeasure/.MainActivity並傳給它 string 資料鍵值對toast - hello, world

11、調起Service

adb shell am startservice [options] <INTENT>

例如:

adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

12、強制停止應用

adb shell am force-stop <packagename>

命令示例:

adb shell am force-stop com.qihoo360.mobilesafe

13、複製裝置檔案到電腦

adb pull <裝置裡的檔案路徑> [電腦上的目錄]

其中電腦上的目錄引數可以省略,預設複製到當前目錄。

例:

adb pull /sdcard/sr.mp4 ~/tmp/
  • 小技巧:裝置上的檔案路徑可能需要 root 許可權才能訪問,如果你的裝置已經 root 過,可以先使用adb shellsu命令在 adb shell 裡獲取 root 許可權後,先cp /path/on/device /sdcard/filename將檔案複製到 sdcard,然後adb pull /sdcard/filename /path/on/pc

14、複製電腦裡檔案到裝置

adb push <電腦上的檔案路徑> <裝置裡的目錄>

例:

adb push ~/sr.mp4 /sdcard/
  • 小技巧:裝置上的檔案路徑普通許可權可能無法直接寫入,如果你的裝置已經 root 過,可以先adb push /path/on/pc /sdcard/filename,然後adb shellsu在 adb shell 裡獲取 root 許可權後,cp /sdcard/filename /path/on/device