以下是常見的一些adb命令:
adb start-server 開啟
adb kill-server 關(guān)閉
adb devices 查看設(shè)備連接情況
adb [-d|-e|-s ]
-d 指定當(dāng)前唯一通過 USB 連接的 Android 設(shè)備為命令目標(biāo)
-e 指定當(dāng)前唯一運(yùn)行的模擬器為命令目標(biāo)
-s [seriaNumber] 指定相應(yīng)seriaNumber號(hào)的設(shè)備為命令目標(biāo)
adb -s NLMR480179 install xxx.apk 給NLMR480179安裝xxx軟件
adb root 讓adb以root權(quán)限執(zhí)行,命令提示符變成#
adb unroot 恢復(fù)adb為非root權(quán)限,命令提示符變成$
后面的命令都是在指定設(shè)備上操作坠宴,因此一般省略-s命令符:
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
即在 adb shell pm list packages 的基礎(chǔ)上可以加一些參數(shù)進(jìn)行過濾查看不同的列表,支持的過濾參數(shù)如下:
參數(shù) 顯示列表
無 所有應(yīng)用
-f 顯示應(yīng)用關(guān)聯(lián)的 apk 文件
-d 只顯示 disabled 的應(yīng)用
-e 只顯示 enabled 的應(yīng)用
-s 只顯示系統(tǒng)應(yīng)用
-3 只顯示第三方應(yīng)用
-i 顯示應(yīng)用的 installer
-u 包含已卸載應(yīng)用
<FILTER> 包名包含 <FILTER> 字符串
比如:
adb shell pm list packages -s 查看系統(tǒng)應(yīng)用
adb shell pm list packages -3 查看第三方應(yīng)用
adb shell pm list packages motorola 查看包名字符串含有motorola的應(yīng)用
當(dāng)然也可以使用 grep 來過濾:
adb shell “pm list packages | grep motorola”
adb install [-lrtsdg] <path_to_apk>
adb install 后面可以跟一些可選參數(shù)來控制安裝 APK 的行為,可用參數(shù)及含義如下:
參數(shù) 含義
-l 將應(yīng)用安裝到保護(hù)目錄 /mnt/asec
-r 允許覆蓋安裝
-t 允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的應(yīng)用
-s 將應(yīng)用安裝到 sdcard
-d 允許降級(jí)覆蓋安裝
-g 授予所有運(yùn)行時(shí)權(quán)限
adb install 內(nèi)部原理簡(jiǎn)介
adb install 實(shí)際是分三步完成:
push apk 文件到 /data/local/tmp。
調(diào)用 pm install 安裝载萌。
刪除 /data/local/tmp 下的對(duì)應(yīng) apk 文件触创。
所以,必要的時(shí)候也可以根據(jù)這個(gè)步驟价说,手動(dòng)分步執(zhí)行安裝過程假颇。
強(qiáng)制停止應(yīng)用:
adb shell am force-stop <packagename> 停止指定應(yīng)用的一切進(jìn)程與服務(wù)胚鸯。
adb uninstall com.xxx.xxx 卸載指定包名的應(yīng)用程序
adb shell pm clear <packagename> 清除應(yīng)用數(shù)據(jù)與緩存,這條命令的效果相當(dāng)于
在設(shè)置里的應(yīng)用信息界面點(diǎn)擊了「清除緩存」和「清除數(shù)據(jù)」拆融。
查看正在運(yùn)行的 Services:
adb shell dumpsys activity services [<packagename>]
adb shell dumpsys activity services com.mobivans.onestrokecharge
查看應(yīng)用詳細(xì)信息:
adb shell dumpsys package <packagename>
輸出中包含很多信息,包括 Activity Resolver Table啊终、Registered ContentProviders镜豹、包名、
userId蓝牲、安裝后的文件資源代碼等路徑趟脂、版本信息、權(quán)限信息和授予狀態(tài)例衍、簽名版本信息等昔期。
與應(yīng)用交互:
注意:當(dāng)組件沒有intent-filter時(shí)exported 屬性默認(rèn)為false已卸,此組件只能由本應(yīng)用用戶訪問,配備了intent-filter后此值改變?yōu)閠rue硼一,允許外部調(diào)用累澡。否則會(huì)遇到am命令會(huì)報(bào)權(quán)限拒絕錯(cuò)誤
主要是使用 am <command> 命令,常用的 <command> 如下:
command 用途
start [options] <INTENT> 啟動(dòng) <INTENT> 指定的 Activity
startservice [options] <INTENT> 啟動(dòng) <INTENT> 指定的 Service
broadcast [options] <INTENT> 發(fā)送 <INTENT> 指定的廣播
force-stop <packagename> 停止 <packagename> 相關(guān)的進(jìn)程
<INTENT> 參數(shù)很靈活般贼,和寫 Android 程序時(shí)代碼里的 Intent 相對(duì)應(yīng)愧哟。
用于決定 intent 對(duì)象的選項(xiàng)如下:
參數(shù) 含義
-a <ACTION> 指定 action,比如 android.intent.action.VIEW
-c <CATEGORY> 指定 category哼蛆,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT> 指定完整 component 名蕊梧,用于明確指定啟動(dòng)哪個(gè) Activity,如 com.example.app/.ExampleActivity
<INTENT> 里還能帶數(shù)據(jù)腮介,就像寫代碼時(shí)的 Bundle 一樣:
參數(shù) 含義
--esn <EXTRA_KEY> null 值(只有 key 名)
`-e –es <EXTRA_KEY> <EXTRA_STRING_VALUE>`
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> boolean 值
--ei <EXTRA_KEY> <EXTRA_INT_VALUE> integer 值
--el <EXTRA_KEY> <EXTRA_LONG_VALUE> long 值
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> float 值
--eu <EXTRA_KEY> <EXTRA_URI_VALUE> URI
--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE> component name
--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...] integer 數(shù)組
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] long 數(shù)組
調(diào)起 Activity:
命令格式:
adb shell am start [options] <INTENT>
例如:
表示調(diào)起微信主界面:adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示調(diào)起 org.mazhuang.boottimemeasure/.MainActivity 并傳給它 string 數(shù)據(jù)鍵值對(duì) toast - hello, world:
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
調(diào)起 Service:
命令格式:adb shell am startservice [options] <INTENT>
表示調(diào)起微信的某 Service:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
發(fā)送廣播:
命令格式:adb shell am broadcast [options] <INTENT>
例如肥矢,向所有組件廣播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
如下是部分系統(tǒng)預(yù)定義廣播及正常觸發(fā)時(shí)機(jī):
action 觸發(fā)時(shí)機(jī)
android.net.conn.CONNECTIVITY_CHANGE 網(wǎng)絡(luò)連接發(fā)生變化
android.intent.action.SCREEN_ON 屏幕點(diǎn)亮
android.intent.action.SCREEN_OFF 屏幕熄滅
android.intent.action.BATTERY_LOW 電量低,會(huì)彈出電量低提示框
android.intent.action.BATTERY_OKAY 電量恢復(fù)了
android.intent.action.BOOT_COMPLETED 設(shè)備啟動(dòng)完畢
android.intent.action.DEVICE_STORAGE_LOW 存儲(chǔ)空間過低
android.intent.action.DEVICE_STORAGE_OK 存儲(chǔ)空間恢復(fù)
android.intent.action.PACKAGE_ADDED 安裝了新的應(yīng)用
android.net.wifi.STATE_CHANGE WiFi 連接狀態(tài)發(fā)生變化
android.net.wifi.WIFI_STATE_CHANGED WiFi 狀態(tài)變?yōu)閱⒂?關(guān)閉/正在啟動(dòng)/正在關(guān)閉/未知
android.intent.action.BATTERY_CHANGED 電池電量發(fā)生變化
android.intent.action.INPUT_METHOD_CHANGED 系統(tǒng)輸入法發(fā)生變化
android.intent.action.ACTION_POWER_CONNECTED 外部電源連接
android.intent.action.ACTION_POWER_DISCONNECTED 外部電源斷開連接
android.intent.action.DREAMING_STARTED 系統(tǒng)開始休眠
android.intent.action.DREAMING_STOPPED 系統(tǒng)停止休眠
android.intent.action.WALLPAPER_CHANGED 壁紙發(fā)生變化
android.intent.action.HEADSET_PLUG 插入耳機(jī)
android.intent.action.MEDIA_UNMOUNTED 卸載外部介質(zhì)
android.intent.action.MEDIA_MOUNTED 掛載外部介質(zhì)
android.os.action.POWER_SAVE_MODE_CHANGED 省電模式開啟
查看設(shè)備信息:
查看手機(jī)型號(hào):adb shell getprop ro.product.model
查看電池情況:adb shell dumpsys battery
查看屏幕分辨率:adb shell wm size
查看屏幕密度:adb shell wm density
顯示屏參數(shù):adb shell dumpsys window displays
等等叠洗。甘改。。
CPU 信息:adb shell cat /proc/cpuinfo
內(nèi)存信息:adb shell cat /proc/meminfo
更多硬件與系統(tǒng)屬性:
屬性名 含義
ro.build.version.sdk SDK 版本
ro.build.version.release Android 系統(tǒng)版本
ro.build.version.security_patch Android 安全補(bǔ)丁程序級(jí)別
ro.product.model 型號(hào)
ro.product.brand 品牌
ro.product.name 設(shè)備名
ro.product.board 處理器型號(hào)
ro.product.cpu.abilist CPU 支持的 abi 列表[節(jié)注一]
persist.sys.isUsbOtgEnabled 是否支持 OTG
dalvik.vm.heapsize 每個(gè)應(yīng)用程序的內(nèi)存上限
ro.sf.lcd_density 屏幕密度
然后也可以修改這些參數(shù): 感覺挺好玩的= 惕味。=
PS:修改設(shè)置之后楼誓,運(yùn)行恢復(fù)命令有可能顯示仍然不太正常,可以運(yùn)行 adb reboot 重啟設(shè)備名挥,或手動(dòng)重啟疟羹。
修改設(shè)置的原理主要是通過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的設(shè)置值。
修改分辨率:adb shell wm size 720x1280 (x字母)
修改屏幕密度:adb shell wm density 160
修改顯示區(qū)域:adb shell wm overscan 0,0,0,200
四個(gè)數(shù)字分別表示距離左禀倔、上榄融、右、下邊緣的留白像素救湖,以上命令表示將屏幕底部 200px 留白愧杯。
這些修改都可執(zhí)行相應(yīng)的恢復(fù)操作,只需將命令相應(yīng)的數(shù)值換成 reset 即可鞋既。
如恢復(fù)分辨率:adb shell wm size reset
一些常用的其他功能:
截圖保存到電腦:adb exec-out screencap -p > img.png 一般是保存在電腦用戶根目錄
截圖保存到設(shè)備里:adb shell screencap -p /sdcard/img.png
然后將圖片導(dǎo)出到電腦:adb pull /sdcard/img.png 一般是保存在電腦用戶根目錄
參數(shù) 含義
-p 指定保存文件為 png 格式
-d display-id 指定截圖的顯示屏編號(hào)(有多顯示屏的情況下)
錄制屏幕: adb shell screenrecord /sdcard/filename.mp4
錄制屏幕以 mp4 格式保存到 /sdcard,需要停止時(shí)按 Ctrl-C力九,默認(rèn)錄制時(shí)間和最長(zhǎng)錄制時(shí)間都是 180 秒。
導(dǎo)出到電腦跟之前導(dǎo)出圖片一樣:adb pull /sdcard/filename.mp4
可以使用 adb shell screenrecord –help 查看 screenrecord 命令的幫助信息邑闺,下面是常見參數(shù)及含義:
參數(shù) 含義
–size WIDTHxHEIGHT 視頻的尺寸跌前,比如 1280x720,默認(rèn)是屏幕分辨率陡舅。
–bit-rate RATE 視頻的比特率抵乓,默認(rèn)是 4Mbps。
–time-limit TIME 錄制時(shí)長(zhǎng),單位秒灾炭。
–verbose 輸出更多信息茎芋。
使用 Monkey 進(jìn)行壓力測(cè)試:
Monkey 可以生成偽隨機(jī)用戶事件來模擬單擊、觸摸蜈出、手勢(shì)等操作田弥,可以對(duì)正在開發(fā)中的程序進(jìn)行隨機(jī)壓力測(cè)試。
簡(jiǎn)單用法:adb shell monkey -p <packagename> -v 500
表示向 <packagename> 指定的應(yīng)用程序發(fā)送 500 個(gè)偽隨機(jī)事件掏缎。
Monkey 的詳細(xì)用法參考 官方文檔皱蹦。
開啟關(guān)閉wifi,需要root權(quán)限眷蜈。
開啟wifi: adb shell svc wifi enable
關(guān)閉wifi: adb shell svc wifi disable
刷機(jī)相關(guān):
重啟手機(jī):adb reboot
重啟到 Recovery 模式:adb reboot recovery
從 Recovery 重啟到 Android:adb reboot
重啟到 Fastboot 模式:adb reboot bootloader
啟動(dòng) adb server 失敾Σ浮:
出錯(cuò)提示:error: protocol fault (couldn't read status): No error
可能原因:adb server 進(jìn)程想使用的 5037 端口被占用。
解決方案:找到占用 5037 端口的進(jìn)程酌儒,然后終止它辜妓。以 Windows 下為例:
netstat -ano | findstr LISTENING
...
TCP 0.0.0.0:5037 0.0.0.0:0 LISTENING 1548
...
這里 1548 即為進(jìn)程 ID,用命令結(jié)束該進(jìn)程:
taskkill /PID 1548
然后再啟動(dòng) adb 就沒問題了忌怎。
另附上dumpsys相關(guān)知識(shí):
http://gityuan.com/2016/05/14/dumpsys-command/
http://gityuan.com/2017/07/02/ams_dumpsys/