1. 程式人生 > 實用技巧 >adb和adb shell常用指令

adb和adb shell常用指令

前言 

 adb原生的命令列工具,預設使用埠為5037,在安裝目錄\SDK\platform-tools下可以找到它。

  主要分三部分

1.執行在PC端的client,可以通過它對Android應用進行安裝、解除安裝和除錯

2.執行在PC端的service,管理客戶端到Android裝置上的adb後臺程序的連線。

3.執行在android裝置上的adb後臺程序,通過adb shell ps|findstr adbd可以找到它。

常用的指令

1.adb kill-server 結束adb服務

adb start-server 啟動adb服務

adb kill-server && adb start-server

2.adb devices 獲取裝置列表

3.adb get-state 獲取裝置狀態

4.安裝應用

adb install 選項 filepath

  • -r 覆蓋安裝
  • -d 降級安裝
  • -s 安裝在SDcard
  • -l 安裝到保護目錄/mnt/asec
  • -g 授予所有執行時的許可權
  • -t:允許安裝 AndroidManifest.xml 裡 application 指定 android:testOnly=“true” 的應用

5.push和pull

複製檔案/夾到手機中

adb push resource_file target_path

複製手機中的檔案/夾到本地

adb pullresource_file target_path

logcat

1.命令列選項,複製自官網文件

選項說明
-b<buffer> 載入可供檢視的備用日誌緩衝區,例如eventsradio。預設使用mainsystemcrash緩衝區集。請參閱檢視備用日誌緩衝區
-c,--clear 清除(清空)所選的緩衝區並退出。預設緩衝區集為mainsystemcrash。要清除所有緩衝區,請使用-b all -c
-e <expr>,--regex=<expr> 只輸出日誌訊息與<expr>匹配的行,其中<expr>是一個正則表示式。
-m <count>,--max-count=<count>
輸出<count>行後退出。這樣是為了與--regex配對,但可以獨立執行。
--print --regex--max-count配對,使內容繞過正則表示式過濾器,但仍能夠在獲得適當數量的匹配時停止。
-d 將日誌轉儲到螢幕並退出。
-f<filename> 將日誌訊息輸出寫入<filename>。預設值為stdout
-g,--buffer-size 輸出指定日誌緩衝區的大小並退出。
-n<count> 將輪替日誌的數量上限設定為<count>。預設值為 4。需要使用-r選項。
-r<kbytes> 每輸出<kbytes>時輪替日誌檔案。預設值為 16。需要使用-f選項。
-s 相當於過濾器表示式'*:S';它將所有標記的優先順序設為“靜默”,並用於放在可新增內容的過濾器表示式列表之前。要了解詳情,請轉到有關過濾日誌輸出的部分。
-v<format> 設定日誌訊息的輸出格式。預設格式為threadtime。有關支援的格式列表,請參閱介紹控制日誌輸出格式的部分。
-D,--dividers 輸出各個日誌緩衝區之間的分隔線。
-c 清空(清除)整個日誌並退出。
-t <count> 僅輸出最新的行數。此選項包括-d功能。
-t '<time>' 輸出自指定時間以來的最新行。此選項包括-d功能。如需瞭解如何引用帶有嵌入空格的引數,請參閱-P 選項
adb logcat -t '01-26 20:52:41.820'
-T <count> 輸出自指定時間以來的最新行數。此選項不包括-d功能。
-T '<time>' 輸出自指定時間以來的最新行。此選項不包括-d功能。如需瞭解如何引用帶有嵌入空格的引數,請參閱-P 選項
adb logcat -t '01-26 20:52:41.820'
-L,-last 在最後一次重新啟動之前轉儲日誌。
-B,--binary 以二進位制檔案形式輸出日誌。
-S,--statistics 在輸出中包含統計資訊,以幫助您識別和定位日誌垃圾資訊傳送者。
-G <size> 設定日誌環形緩衝區的大小。可以在結尾處新增KM,以指示單位為千位元組或兆位元組。
-p,--prune 輸出(讀取)當前的白名單和黑名單,不採用任何引數,如下所示:
    adb logcat -p
    
-P '<list>...'
--prune '<list>...'-P '<white_and_black_list>'
寫入(設定)白名單和黑名單,以出於特定目的調整日誌記錄內容。您可以提供<white>~<black>列表條目的混合內容,其中<white><black>可以是 UID、UID/PID 或 /PID。 在 Logcat 統計資訊 (logcat -S) 的指導下,您可以考慮出於各種目的調整白名單和黑名單,例如:
  • 通過 UID 選擇使特定日誌記錄內容具有最長保留期限。
  • 將正在消耗相應資源的人 (UID) 或物 (PID) 列入黑名單,以幫助增加日誌跨度,從而更深入地瞭解正在診斷的問題。

預設情況下,日誌記錄系統會自動以動態方式將日誌統計資訊中最嚴重的違規內容列入黑名單,以便為新的日誌訊息騰出空間。一旦它用盡啟發法,系統便會刪除最舊的條目,以便為新訊息騰出空間。

新增白名單可保護您的 Android 識別碼 (AID),它會變成程序的 AID 和 GID,而不會被宣告為違規內容;新增黑名單有助於在相應內容被視為最嚴重的違規內容之前即釋放空間。 您可以選擇刪除內容的程度和頻率;也可以關閉刪除功能,這樣,系統便僅會移除各個日誌緩衝區中最舊條目的內容。

引號

adb logcat不會保留引號,因此指定白名單和黑名單的語法如下所示:

    $ adb logcat -P '"<white_and_blacklist>"'

    or

    adb shell
    $ logcat -P '<white_and_blacklist>'
    

以下示例指定了一個包含 PID 32676 和 UID 675 的白名單和一個包含 PID 32677 和 UID 897 的黑名單。黑名單中的 PID 32677 經過加權處理,以便可以更快刪除。

    adb logcat -P '"/32676 675 ~/32677 897"'
    

其他您可以使用的黑名單和白名單命令變體如下所示:

    ~! worst uid blacklist
    ~1000/! worst pid in system (1000)
    
--pid=<pid>... 僅輸出來自給定 PID 的日誌。
--wrap 休眠 2 小時或者當緩衝區即將封裝時(兩者取其先)。通過提供即將封裝喚醒來提高輪詢的效率。

2.日誌級別

  • V:最低級別,輸出最詳細的日誌資訊
  • D:除錯資訊
  • I:資訊
  • W:warning
  • E:錯誤
  • F:嚴重錯誤,
  • S:什麼也不輸出

eg.adb logcat -v time 分別是日誌級別/tag

可以通過過濾器tag:priority輸出指定的日誌內容,一條指令可以指定多個過濾器,用空格隔開

eg.adb logcat ActivityManager:I MyApp:D *:S 只輸出標記為ActivityManager的資訊和MyApp的除錯資訊。*s將所有標記的優先順序設為靜默,從而確保系統僅顯示標記為ActivityManager和MyApp的日誌訊息。

3.日誌輸出格式

-v <選項>指定日誌輸出格式,只能指定一種輸出格式

  • brif:顯示優先順序、標記以及發出資訊的程序PID
  • long:顯示所有元資料欄位,並使用空白行分隔訊息
  • process:僅顯示PID
  • raw:顯示不包含其他資料欄位的原始日誌訊息
  • tag:僅顯示優先順序和標記
  • thread:舊版格式,顯示優先順序、PID、以及發出訊息的執行緒TID
  • threadtime:預設值,顯示日期、呼叫時間、優先順序、標記、PID以及發出訊息的執行緒TIP
  • time:日期、呼叫時間、優先順序、標記以及發出訊息的程序PID

4.日誌緩衝區

  Android 日誌系統為日誌訊息保留了多個環形緩衝區,並非所有的日誌資訊都會到預設的緩衝區,可以檢視指定緩衝區。

-b +<選項> 可以指定檢視多個緩衝區的日誌,用空格隔開

  • radio:檢視包含無線裝置/電話相關訊息的緩衝區
  • events:檢視已經解譯的二進位制系統事件緩衝區訊息
  • main:主日誌緩衝區,預設值,不包含系統和崩潰日誌訊息
  • system:系統日誌 預設
  • crash:檢視崩潰日誌緩衝區
  • all:檢視所有
  • default:報告main、system和crash緩衝區

5.常用指令

  • adb logcat>filepath 輸出日誌到路徑patch下
  • adb logcat|findstr ** 過濾輸出含有***的日誌
  • adb logcat -c 清除螢幕上的日誌記錄
  • adb logcat -c && adb logcat -s ActivityManager|findstr "Dispalyed" 客戶端啟動時間獲取 -s相當於 *:S

難點:緩衝區的理解

shell命令

  前面的adb指令是adb程式中的指令,shell指令是指android系統中的指令

pm包管理

pm list package 列出安裝在裝置上的應用

  • adb shell pm list package(列出全部)
  • adb shell pm list package –s (列出系統應用)
  • adb shell pm list package –3(列出第三方應用)
  • adb shell pm list package –f(列出應用包名及對應的apk名及存放位置)
  • adb shell pm list package –i(命令最後增加過濾關鍵字 eg.adb shell pm list package -i com.tencent.mm)
  • adb shell path -packagename (列出對應包名的 .apk 位置)
  • adb shell dump packageName 列出指定應用的dump資訊
  • adb shell pm install apk_path 此時apk儲存在手機中
  • adb shell pm uninstall packageName 解除安裝應用
  • adb shell pm clear packageName 清除指定apk的資料

am控制應用

adb shell

  • am start -n packageName/activityName 啟動應用
  • am start -S packageName/activityName 先停止再啟動應用
  • am start -W packageName/activityName 等待應用啟動完成啟動
  • am force-stop packageName 結束應用
  • am startservice 啟動一個服務
  • am broadcast 傳送一個廣播
  • am monitor 監控crash和anr

常用指令:

獲取應用啟動時間

adb shell am start -W -npackageName/activityName

input

  • adb shell input keyevent 傳送按鍵事件
  • adb shell input text text 傳送文字內容
  • adb shell input swipe x0 y0 x1 y1 傳送一個滑動事件
  • adb shell input tab x y 傳送一個點選事件