adb常用命令的使用
與設備相關的命令
獲取所有連接上的設備:
adb devices
指定唯一USB連接設備:
adb –d <serialNumber> <command>
指定唯一emulator:
adb –e <serialNumber> <command>
當有多個手機和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
1、導出日志到sd卡
?adb logcat -d -f /sdcard/log.txt
2、導出日志到本地PC
?adb logcat -v time ActivityManager:I MyApp:V -v > log.txt
轉載于:https://www.cnblogs.com/PeakerChen/p/5023541.html
總結
以上是生活随笔為你收集整理的adb常用命令的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse不给提示no defaul
- 下一篇: 基于Android的闹钟的软件