Awesome Adb——一份超全超詳細的ADB 用法大全 - 程式前沿

文章推薦指數: 80 %
投票人數:10人

ADB,即Android Debug Bridge,它是Android 開發/測試人員不可替代的強大工具,也是Android 裝置玩家的 ... adb [-d|-e|-s ] . 程式語言前端開發IOS開發Android開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具AwesomeAdb——一份超全超詳細的ADB用法大全2018.05.27Android開發androidHOMEAndroid開發AwesomeAdb——一份超全超詳細的ADB用法大全AdvertisementADB,即AndroidDebugBridge,它是Android開發/測試人員不可替代的強大工具,也是Android裝置玩家的好玩具。

持續更新中,歡迎補充指正,覺得有用的可以將此GitHub倉庫Star收藏備用。

注:有部分命令的支援情況可能與Android系統版本及定製ROM的實現有關。

保持最新內容的GitHub倉庫地址:https://github.com/mzlogin/aw…目錄1.基本用法1.0.1.命令語法1.0.2.為命令指定目標裝置1.0.3.啟動/停止1.0.4.檢視adb版本1.0.5.以root許可權執行adbd1.0.6.指定adbserver的網路埠2.裝置連線管理2.0.1.查詢已連線裝置/模擬器2.0.2.USB連線2.0.3.無線連線3.應用管理3.0.1.檢視應用列表3.0.2.所有應用3.0.3.系統應用3.0.4.第三方應用3.0.5.包名包含某字串的應用3.0.6.安裝APK3.0.7.解除安裝應用3.0.8.清除應用資料與快取3.0.9.檢視前臺Activity4.與應用互動4.0.1.調起Activity4.0.2.調起Service4.0.3.傳送廣播4.0.4.強制停止應用5.檔案管理5.0.1.複製裝置裡的檔案到電腦5.0.2.複製電腦裡的檔案到裝置6.模擬按鍵/輸入6.0.1.電源鍵6.0.2.選單鍵6.0.3.HOME鍵6.0.4.返回鍵6.0.5.音量控制6.0.6.媒體控制6.0.7.點亮/熄滅螢幕6.0.8.滑動解鎖6.0.9.輸入文字7.檢視日誌7.0.1.Android日誌7.0.1.1.1.按級別過濾日誌7.0.1.2.2.按tag和級別過濾日誌7.0.1.3.日誌格式7.0.1.4.清空日誌7.0.2.核心日誌8.檢視裝置資訊8.0.1.型號8.0.2.電池狀況8.0.3.螢幕解析度8.0.4.螢幕密度8.0.5.顯示屏引數8.0.6.android_id8.0.7.IMEI8.0.8.Android系統版本8.0.9.Mac地址8.0.10.CPU資訊8.0.11.更多硬體與系統屬性9.實用功能9.0.1.螢幕截圖9.0.2.錄製螢幕9.0.3.重新掛載system分割槽為可寫9.0.4.檢視連線過的WiFi密碼9.0.5.設定系統日期和時間9.0.6.重啟手機9.0.7.檢測裝置是否已root9.0.8.使用Monkey進行壓力測試10.刷機相關命令10.0.1.重啟到Recovery模式10.0.2.從Recovery重啟到Android10.0.3.重啟到Fastboot模式10.0.4.通過sideload更新系統11.更多adbshell命令11.0.1.檢視程序11.0.2.檢視實時資源佔用情況11.0.3.其它12.參考連結基本用法命令語法adb命令的基本語法如下:adb[-d|-e|-s]如果只有一個裝置/模擬器連線時,可以省略掉[-d|-e|-s]這一部分,直接使用adb

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

引數含義-d指定當前唯一通過USB連線的Android裝置為命令目標-e指定當前唯一執行的模擬器為命令目標-s指定相應serialNumber號的裝置/模擬器為命令目標在多個裝置/模擬器連線的情況下較常用的是-s引數,serialNumber可以通過adbdevices命令獲取。

如:$adbdevices Listofdevicesattached cf264b8fdevice emulator-5554device輸出裡的cf264b8f和emulator-5554即為serialNumber。

比如這時想指定cf264b8f這個裝置來執行adb命令獲取螢幕解析度:adb-scf264b8fshellwmsize遇到多裝置/模擬器的情況均使用這幾個引數為命令指定目標裝置,下文中為簡化描述,不再重複。

啟動/停止啟動adbserver命令:adbstart-server(一般無需手動執行此命令,在執行adb命令時若發現adbserver沒有啟動會自動調起。

)停止adbserver命令:adbkill-server檢視adb版本命令:adbversion示例輸出:AndroidDebugBridgeversion1.0.32 Revision09a0d98bebce-android以root許可權執行adbdadb的執行原理是PC端的adbserver與手機端的守護程序adbd建立連線,然後PC端的adbclient通過adbserver轉發命令,adbd接收命令後解析執行。

所以如果adbd以普通許可權執行,有些需要root許可權才能執行的命令無法直接用adbxxx執行。

這時可以adbshell然後su後執行命令,也可以讓adbd以root許可權執行,這個就能隨意執行高許可權命令了。

命令:adbroot正常輸出:restartingadbdasroot現在再執行adbshell,看看命令列提示符是不是變成#了?有些手機root後也無法通過adbroot命令讓adbd以root許可權執行,比如三星的部分機型,會提示adbdcannotrunasrootinproductionbuilds,此時可以先安裝adbdInsecure,然後adbroot試試。

相應地,如果要恢復adbd為非root許可權的話,可以使用adbunroot命令。

指定adbserver的網路埠命令:adb-Pstart-server預設埠為5037。

裝置連線管理查詢已連線裝置/模擬器命令:adbdevices輸出示例:Listofdevicesattached cf264b8fdevice emulator-5554device輸出格式為[serialNumber][state],serialNumber即我們常說的SN,state有如下幾種:offline——表示裝置未連線成功或無響應。

device——裝置已連線。

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

nodevice——沒有裝置/模擬器連線。

以上輸出顯示當前已經連線了兩臺裝置/模擬器,cf264b8f與emulator-5554分別是它們的SN。

從emulator-5554這個名字可以看出它是一個Android模擬器。

常見異常輸出:沒有裝置/模擬器連線成功。

Listofdevicesattached裝置/模擬器未連線到adb或無響應。

Listofdevicesattached cf264b8fofflineUSB連線通過USB連線來正常使用adb需要保證幾點:硬體狀態正常。

包括Android裝置處於正常開機狀態,USB連線線和各種介面完好。

Android裝置的開發者選項和USB除錯模式已開啟。

可以到「設定」-「開發者選項」-「Android除錯」檢視,如果在設定裡找不到開發者選項,那需要通過一個彩蛋來讓它顯示出來:在「設定」-「關於手機」連續點選「版本號」7次。

裝置驅動狀態正常。

這一點貌似在Linux和MacOSX下不用操心,在Windows下有可能遇到需要安裝驅動的情況,確認這一點可以右鍵「計算機」-「屬性」,到「裝置管理器」裡檢視相關裝置上是否有黃色感嘆號或問號,如果沒有就說明驅動狀態已經好了。

否則可以下載一個手機助手類程式來安裝驅動先。

通過USB線連線好電腦和裝置後確認狀態。

adbdevices如果能看到xxxxxxdevice說明連線成功。

無線連線除了可以通過USB連線裝置與電腦來使用adb,也可以通過無線連線——雖然連線過程中也有需要使用USB的步驟,但是連線成功之後你的裝置就可以在一定範圍內擺脫USB連線線的限制啦!操作步驟:將Android裝置與將執行adb的電腦連線到同一個區域網,比如連到同一個WiFi。

將裝置與電腦通過USB線連線。

應確保連線成功(可執行adbdevices看是否能列出該裝置)。

讓裝置在5555埠監聽TCP/IP連線:adbtcpip5555斷開USB連線。

找到裝置的IP地址。

一般能在「設定」-「關於手機」-「狀態資訊」-「IP地址」找到。

通過IP地址連線裝置。

adbconnect這裡的就是上一步中找到的裝置IP地址。

確認連線狀態。

adbdevices如果能看到:5555device說明連線成功。

如果連線不了,請確認Android裝置與電腦是連線到了同一個WiFi,然後再次執行adbconnect那一步;如果還是不行的話,通過adbkill-server重新啟動adb然後從頭再來一次試試。

斷開無線連線命令:adbdisconnect應用管理檢視應用列表檢視應用列表的基本命令格式是adbshellpmlistpackages[-f][-d][-e][-s][-3][-i][-u][--userUSER_ID][FILTER]即在adbshellpmlistpackages的基礎上可以加一些引數進行過濾檢視不同的列表,支援的過濾引數如下:引數顯示列表無所有應用-f顯示應用關聯的apk檔案-d只顯示disabled的應用-e只顯示enabled的應用-s只顯示系統應用-3只顯示第三方應用-i顯示應用的installer-u包含已解除安裝應用包名包含字串所有應用命令:adbshellpmlistpackages輸出示例:package:com.android.smoketest package:com.example.android.livecubes package:com.android.providers.telephony package:com.google.android.googlequicksearchbox package:com.android.providers.calendar package:com.android.providers.media package:com.android.protips package:com.android.documentsui package:com.android.gallery package:com.android.externalstorage ... //otherpackageshere ...系統應用命令:adbshellpmlistpackages-s第三方應用命令:adbshellpmlistpackages-3包名包含某字串的應用比如要檢視包名包含字串mazhuang的應用列表,命令:adbshellpmlistpackagesmazhuang當然也可以使用grep來過濾:adbshellpmlistpackages|grepmazhuang安裝APK命令:adbinstall引數:adbinstall後面可以跟一些引數來控制安裝APK的行為,常用引數及含義如下:引數含義-r允許覆蓋安裝。

-s將應用安裝到sdcard。

-d允許降級覆蓋安裝。

完整引數列表及含義可以直接執行adb命令然後檢視adbinstall[-lrtsdg]一節。

如果見到類似如下輸出(狀態為Success)代表安裝成功:12040KB/s(22205609bytesin1.801s) pkg:/data/local/tmp/SogouInput_android_v8.3_sweb.apk Success而如果狀態為Failure則表示安裝失敗。

常見安裝失敗輸出程式碼、含義及可能的解決辦法如下:輸出含義解決辦法INSTALL_FAILED_ALREADY_EXISTS應用已經存在使用-r引數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已經安裝過簽名不一樣的同名應用,且資料沒有移除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裝置裡已經存在與應用裡同名的contentproviderINSTALL_FAILED_NEWER_SDK裝置系統版本高於應用要求INSTALL_FAILED_TEST_ONLY應用是test-only的,但安裝時沒有指定-t引數INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不相容裝置CPU應用程式二進位制介面的nativecodeINSTALL_FAILED_MISSING_FEATURE應用使用了裝置不可用的功能INSTALL_FAILED_CONTAINER_ERRORsdcard訪問失敗確認sdcard可用,或者安裝到內建儲存INSTALL_FAILED_INVALID_INSTALL_LOCATION不能安裝到指定位置切換安裝位置,新增或刪除-s引數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已安裝targetSDK支援執行時許可權的同名應用,要安裝的版本不支援執行時許可權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檔案時遇到CertificateEncodingExceptionINSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest檔案裡沒有或者使用了無效的包名INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest檔案裡指定了無效的共享使用者IDINSTALL_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應用包含裝置的應用程式二進位制介面不支援的nativecodeINSTALL_CANCELED_BY_USER應用安裝需要在裝置上確認,但未操作裝置或點了取消在裝置上同意安裝INSTALL_FAILED_ACWF_INCOMPATIBLE應用程式與裝置不相容doesnotcontainAndroidManifest.xml無效的APK檔案isnotavalidzipfile無效的APK檔案Offline裝置未連線成功先將裝置與adb連線成功unauthorized裝置未授權允許除錯error:devicenotfound沒有連線成功的裝置先將裝置與adb連線成功protocolfailure裝置已斷開連線先將裝置與adb連線成功Unknownoption:-sAndroid2.2以下不支援安裝到sdcard不使用-s引數Nospaceleftondevicerm空間不足清理空間Permissiondenied…sdcard…sdcard不可用參考:PackageManager.java解除安裝應用命令:adbuninstall[-k]表示應用的包名,-k引數可選,表示解除安裝應用但保留資料和快取目錄。

命令示例:adbuninstallcom.qihoo360.mobilesafe表示解除安裝360手機衛士。

清除應用資料與快取命令:adbshellpmclear表示應用名包,這條命令的效果相當於在設定裡的應用資訊介面點選了「清除快取」和「清除資料」。

命令示例:adbshellpmclearcom.qihoo360.mobilesafe表示清除360手機衛士的資料和快取。

檢視前臺Activity命令:adbshelldumpsysactivityactivities|grepmFocusedActivity輸出示例:mFocusedActivity:ActivityRecord{8079d7eu0com.cyanogenmod.trebuchet/com.android.launcher3.Launchert42}其中的com.cyanogenmod.trebuchet/com.android.launcher3.Launcher就是當前處於前臺的Activity。

與應用互動主要是使用am命令,常用的如下:command用途start[options]啟動指定的Activitystartservice[options]啟動指定的Servicebroadcast[options]傳送指定的廣播force-stop停止相關的程序引數很靈活,和寫Android程式時程式碼裡的Intent相對應。

用於決定intent物件的選項如下:引數含義-a指定action,比如android.intent.action.VIEW-c指定category,比如android.intent.category.APP_CONTACTS-n指定完整component名,用於明確指定啟動哪個Activity,如com.example.app/.ExampleActivity裡還能帶資料,就像寫程式碼時的Bundle一樣:引數含義--esnnull值(只有key名)`-e–es`string值--ezboolean值--eiinteger值--ellong值--effloat值--euURI--ecncomponentname--eia[,[,例如:adbshellamstart-ncom.tencent.mm/.ui.LauncherUI表示調起微信主介面。

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

調起Service命令格式:adbshellamstartservice[options]例如:adbshellamstartservice-ncom.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService表示調起微信的某Service。

傳送廣播命令格式:adbshellambroadcast[options]例如:adbshellambroadcast-aandroid.intent.action.BOOT_COMPLETED-norg.mazhuang.boottimemeasure/.BootCompletedReceiver表示向org.mazhuang.boottimemeasure/.BootCompletedReceiver傳送一個BOOT_COMPLETED廣播,這類用法在測試的時候很實用,比如某個廣播的場景很難製造,可以考慮通過這種方式來傳送廣播。

強制停止應用命令:adbshellamforce-stop命令示例:adbshellamforce-stopcom.qihoo360.mobilesafe表示停止360安全衛士的一切程序與服務。

檔案管理複製裝置裡的檔案到電腦命令:adbpull[電腦上的目錄]其中電腦上的目錄引數可以省略,預設複製到當前目錄。

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

複製電腦裡的檔案到裝置命令:adbpush例:adbpush~/sr.mp4/sdcard/小技巧:裝置上的檔案路徑普通許可權可能無法直接寫入,如果你的裝置已經root過,可以先adbpush/path/on/pc/sdcard/filename,然後adbshell和su在adbshell裡獲取root許可權後,cp/sdcard/filename/path/on/device。

模擬按鍵/輸入在adbshell裡有個很實用的命令叫input,通過它可以做一些有趣的事情。

input命令的完整help資訊如下:Usage:input[][...] Thesourcesare: mouse keyboard joystick touchnavigation touchpad trackball stylus dpad gesture touchscreen gamepad Thecommandsanddefaultsourcesare: text(Default:touchscreen) keyevent[--longpress]...(Default:keyboard) tap(Default:touchscreen) swipe[duration(ms)](Default:touchscreen) press(Default:trackball) roll(Default:trackball)比如使用adbshellinputkeyevent命令,不同的keycode能實現不同的功能,完整的keycode列表詳見KeyEvent,摘引部分我覺得有意思的如下:keycode含義3HOME鍵4返回鍵5開啟撥號應用6結束通話電話24增加音量25降低音量26電源鍵27拍照(需要在相機應用裡)64開啟瀏覽器82選單鍵85播放/暫停86停止播放87播放下一首88播放上一首122移動游標到行首或列表頂部123移動游標到行末或列表底部126恢復播放127暫停播放164靜音176開啟系統設定187切換應用207開啟聯絡人208開啟日曆209開啟音樂210開啟計算器220降低螢幕亮度221提高螢幕亮度223系統休眠224點亮螢幕231開啟語音助手276如果沒有wakelock則讓系統休眠下面是input命令的一些用法舉例。

電源鍵命令:adbshellinputkeyevent26執行效果相當於按電源鍵。

選單鍵命令:adbshellinputkeyevent82HOME鍵命令:adbshellinputkeyevent3返回鍵命令:adbshellinputkeyevent4音量控制增加音量:adbshellinputkeyevent24降低音量:adbshellinputkeyevent25靜音:adbshellinputkeyevent164媒體控制播放/暫停:adbshellinputkeyevent85停止播放:adbshellinputkeyevent86播放下一首:adbshellinputkeyevent87播放上一首:adbshellinputkeyevent88恢復播放:adbshellinputkeyevent126暫停播放:adbshellinputkeyevent127點亮/熄滅螢幕可以通過上文講述過的模擬電源鍵來切換點亮和熄滅螢幕,但如果明確地想要點亮或者熄滅螢幕,那可以使用如下方法。

點亮螢幕:adbshellinputkeyevent224熄滅螢幕:adbshellinputkeyevent223滑動解鎖如果鎖屏沒有密碼,是通過滑動手勢解鎖,那麼可以通過inputswipe來解鎖。

命令(引數以機型Nexus5,向上滑動手勢解鎖舉例):adbshellinputswipe3001000300500引數3001000300500分別表示起始點x座標起始點y座標結束點x座標結束點y座標。

輸入文字在焦點處於某文字框時,可以通過input命令來輸入文字。

命令:adbshellinputtexthello現在hello出現在文字框了。

檢視日誌Android系統的日誌分為兩部分,底層的Linux核心日誌輸出到/proc/kmsg,Android的日誌輸出到/dev/log。

Android日誌命令格式:[adb]logcat[



請為這篇文章評分?