adb經常使用命令的使用

與設備相關的命令java

獲取全部鏈接上的設備:android

adb devicesshell

指定惟一USB鏈接設備:緩存

adb –d <serialNumber> <command>app

指定惟一emulator:eclipse

adb –e <serialNumber> <command>ui

當有多個手機和emulator時:線程

adb –s <serialNumber> <command>調試

adb服務相關日誌

關閉adb server

adb kill-server

啓動adb server

adb start-server 

獲取/system的讀寫權限:adb remount

與Data操做相關的命令:

安裝apk

adb install –r <path_to_apk>

reinstall the app,keep its data

abd install –s <path_to_apk>

     install on SD card

adb install <path_to_apk>

 eg. adb install c:\Launcher2.apk

卸載apk

adb uninstall –k <packagename>

     keep the data and cache directories

若是要卸載android系統自帶的app,請先獲取root權限,而後將apk刪掉,再卸載package如右邊所示卸載默認Launcher2的命令:

adb uninstall <packagename>

eg. adb uninstall com.android.launcher2

eg.

adb remount

adb shell rm system/app/Launcher2.apk

adb uninstall com.android.launcher

從device/emulator拷貝文件出來到本地

adb pull <remote> <local>

eg. adb pull mnt/sdcard/mtklog/ d:\log\

將本地文件拷貝到device/emulator

adb push <local> <remote>

eg. adb push d:\Test.apk system/app

adb shell 相關命令

命令格式:adb [-d|-e|-s {serialNumber}] shell <shellCommand>

退出shell:Ctrl + C / exit

消除緩存命令:

adb shell rm –R /data/dalvik-cache

傳送keyevent:

當客戶手機有硬體鍵盤,而內部手機沒有相應按鍵時,能夠用命令發送key來模塊按鍵

adb shell input keyevent keycode

各個key的keycode 可在KeyEvent.java這個類中查到,經常使用keycode以下:

HOME:3  BACK:4  POWER:26  MENU:82

傳送text文本:

adb shell input text 「xxx」

獲取系統全部屬性

或某一個屬性:

adb shell getprop

adb shell getprop propertyName

設置系統某個屬性:

adb shell setprop propertyName value

eg. adb shell setprop launcher2.allappsgrid 2d

還有兩個比較好的命令是adb shell am和adb shell pm,這兩個命令在frameworks/base/cmds下面;

am命令主要用於管理Activity,例如啓動,中止Activity(eclipse在運行Activity就使用了這個命令),發送intent;

格式爲:

adb shell am start -n 包名/包名+類名(-n 類名,-a action,-d date,-m MIME-TYPE,-c category,-e 擴展數據,等)。

實例1:adb shell am start -n com.android.camera/.Camera

實例2:adb shell am start -n com.android.contacts/.activities.PeopleActivity content://contacts/people

pm命令則主要用於管理應用package的管理,有點像控制面板的添加和刪除程序。

adb shell pm list packages 得到當前系統安裝了哪些包 

frameworks/base/cmds下面還有一個別的命令,以下:

dumpstate 

dumpsys 

ime 

input 

installd 

service 

servicemanager 

surfaceflinger 

system_server

dumpsys命令

這個查看系統信息,用的仍是比較多的.

dumpsys [options]

               meminfo 顯示內存信息

               cpuinfo 顯示CPU信息

               account 顯示accounts信息

               activity 顯示全部的activities的信息

               window 顯示鍵盤,窗口和它們的關係

               wifi 顯示wifi信息

其餘命令我這邊就不一一展開說明了

Debug 相關

adb logcat 命令格式:adb logcat [–b <buffer>] [–v <format>] > log_file.txt

buffer:radio/events/main  default is main

format: time- Display the date, invocation time, priority/tag, and PID of the originating process.

brief-Display priority/tag and PID of originating process (the default format).

             process - Display PID only.

      tag- Display the priority/tag only.  

usb鏈接device抓取main log

adb logcat –b main –v time > main.txt

adb logcat –v time >main.txt -b default is main

usb鏈接device抓取events log

adb logcat –b events –v time > events.txt

usb鏈接device抓取radio log

adb logcat –b radio –v time > radio.txt

usb鏈接device抓取kernel log

adb shell cat /proc/kmsg > kernel.log

設置log輸出的filter

每個Android log都有一個tag和一個優先級與之關聯

tag: public static final String TAG=」xxx」;

priority:V(Verbose-lowest),D(Debug),I(Info),W(Warning),E(Error),F(Fatal),

S(Silent-highest,nothing is ever printed)

設置log filter的命令格式:adb logcat tag:priority ...

打出全部W和W priority以上的log

adb logcat *: W

只打出tag爲ActivityManager的Info及以上log信息

只打出tag爲ActivityManager的log

adb logcat ActivityManager:I *:S

adb logcat ActivityManager:* *:S

打出ActivityManager的Info及以上log信息和MyApp的Debug及以上log信息

adb logcat ActivityManager:I MyApp:D *:S

bugreport 相關

bugreport將打印出dumpsys,dumpstate和logcat等信息

adb bugreport <log_file_path> 顯示bug report中全部的信息

adb bugreport > bugreport.txt 將bugreport存儲到txt文件中

Memory相關

獲取系統全部process使用memory的排行狀況

adb shell procrank >procrank.txt

獲取某一個process的memory使用狀況

經過adb shell ps獲取系統全部process的pid

不帶pid則獲取系統全部process的狀況

adb shell dumpsys meminfo pid 或者

adb shell dumpsys meminfo packagename

adb shell dumpsys meminfo >dumpsys_meminfo.txt

獲取系統memory總量和剩餘量及其餘信息

adb shell cat proc/meminfo >proc_meminfo.txt

獲取某個process的maps狀況

adb shell cat proc/pid/maps >maps.txt

獲取某個process的smaps狀況

adb shell cat proc/pid/smaps >smaps.txt

一些抓取其餘模塊的log的經常使用命令:

adb shell dumpsys window >win.txt 查看當前系統有哪些window

adb shell dumpsys activity activities > activity_stack_info.log  查看當前系統activity stack

adb shell dumpsys SurfaceFlinger  >surfaceflinger.txt

adb shell dumpsys gfxinfo >gfxinfo.txt用這行指令去看全部process使用HWUI的情況

打開AMS中broadcast相關的log開關:adb shell dumsys activity log br on

請用以下命令確認GPU driver的版本:

adb shell cat /proc/pvr/version >gpu_version.txt

下面內容在內部快速抓取log驗證時以爲比較有用,抓取想要的log比較方便。

要抓log時,使用adb logcat –v time tag1:優先級別  tag2:優先級別 … > log.txt就能夠了。

使用 logcat 命令

        查看和跟蹤系統日誌緩衝區的命令logcat的通常用法是:

[adb] logcat [<option>] ... [<filter-spec>] ...

   下文介紹過濾器和命令選項,詳細內容可參見Listing of logcat Command Options。

    能夠在開發機中經過遠程shell的方式使用logcat命令查看日誌輸出:

$ adb logcat

    若是是在遠程shell中可直接使用命令:

# logcat

  過濾日誌輸出

        每一條日誌消息都有一個標記和優先級與其關聯。

標記是一個簡短的字符串,用於標識原始消息的來源 (例如"View" 來源於顯示系統)。

優先級是下面的字符,順序是從低到高:

V — 明細 (最低優先級)

D — 調試

I — 信息

W — 警告

E — 錯誤

F — 嚴重錯誤

S — 無記載 (最高優先級,沒有什麼會被記載)

    經過運行logcat ,能夠得到一個系統中使用的標記和優先級的列表,觀察列表的前兩列,給出的格式是<priority>/<tag>。

  這裏是一個日誌輸出的消息,優先級是「I」,標記是「ActivityManager」:

I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}

  若是想要減小輸出的內容,能夠加上過濾器表達式進行限制,過濾器能夠限制系統只輸出感興趣的標記-優先級組合。

  過濾器表達式的格式是tag:priority ... ,其中tag是標記, priority是最小的優先級, 該標記標識的全部大於等於指定優先級的消息被寫入日誌。也能夠在一個過濾器表達式中提供多個這樣的過濾,它們之間用空格隔開。

  下面給出的例子是僅輸出標記爲「ActivityManager」而且優先級大於等於「Info」和標記爲「MyApp」而且優先級大於等於「Debug」的日誌:

adb logcat ActivityManager:I MyApp:D *:S

  上述表達式最後的 *:S 用於設置全部標記的日誌優先級爲S,這樣能夠確保僅有標記爲「ActivityManager」和「MyApp」的日誌被輸出,使用 *:S 是能夠確保輸出符合指定的過濾器設置的一種推薦的方式,這樣過濾器就成爲了日誌輸出的「白名單」。

  下面的表達是顯示全部優先級大於等於「warning」的日誌:

adb logcat *:W

  若是在開發用電腦上運行 logcat (相對於運行運程shell而言),也能夠經過ANDROID_LOG_TAGS環境變量設置默認的過濾器表達式:

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

  須要注意的是,若是是在遠程shell或是使用adb shell logcat 命令運行logcat , ANDROID_LOG_TAGS 不會導出到模擬器或手機設備上。

  控制日誌格式

        日誌消息在標記和優先級以外還有不少元數據字段,這些字段能夠經過修改輸出格式來控制輸出結果, -v 選項加上下面列出的內容能夠控制輸出字段:

brief — 顯示優先級/標記和原始進程的PID (默認格式)

process — 僅顯示進程PID

tag — 僅顯示優先級/標記

thread — 僅顯示進程:線程和優先級/標記

raw — 顯示原始的日誌信息,沒有其餘的元數據字段

time — 顯示日期,調用時間,優先級/標記,PID

long —顯示全部的元數據字段而且用空行分隔消息內容

  可使用 -v啓動 logcat來控制日誌格式:

[adb] logcat [-v <format>]

  例如使用 thread 輸出格式:

adb logcat -v thread

  注意只能在 -v 選項中指定一種格式。

  Viewing Alternative Log Buffers

        Android日誌系統爲日誌消息保持了多個循環緩衝區,並且不是全部的消息都被髮送到默認緩衝區,要想查看這些附加的緩衝區,可使用-b 選項,如下是能夠指定的緩衝區:

radio — 查看包含在無線/電話相關的緩衝區消息

events — 查看事件相關的消息

main — 查看主緩衝區 (默認緩衝區)

-b 選項的用法:

[adb] logcat [-b <buffer>]

  例如查看radio緩衝區:

adb logcat -b radio

一、導出日誌到sd卡

 adb logcat -d -f /sdcard/log.txt

二、導出日誌到本地PC

 adb logcat -v time ActivityManager:I MyApp:V -v > log.txt

相關文章
相關標籤/搜索