ADB 常用命令整理
遠端連線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_DEXOPT | dex 優化驗證失敗或空間不足 | |
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_ERROR | sdcard 訪問失敗; 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_NAME | manifest 檔案裡沒有或者使用了無效的包名 | |
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID | manifest 檔案裡指定了無效的共享使用者 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: -s | Android 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.demo1
、org.mazhuang.demo2
和org.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 shell
和su
命令在 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 shell
和su
在 adb shell 裡獲取 root 許可權後,cp /sdcard/filename /path/on/device
。