ADB命令

以下是常見的一些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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籍滴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榴啸,更是在濱河造成了極大的恐慌孽惰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸥印,死亡現(xiàn)場(chǎng)離奇詭異勋功,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)库说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門狂鞋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人潜的,你說我怎么就攤上這事骚揍。” “怎么了啰挪?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵信不,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我亡呵,道長(zhǎng)抽活,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任政己,我火速辦了婚禮酌壕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歇由。我一直安慰自己卵牍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布沦泌。 她就那樣靜靜地躺著糊昙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谢谦。 梳的紋絲不亂的頭發(fā)上释牺,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音回挽,去河邊找鬼没咙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛千劈,可吹牛的內(nèi)容都是我干的祭刚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼墙牌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涡驮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喜滨,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捉捅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后虽风,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棒口,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年焰情,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陌凳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡内舟,死狀恐怖合敦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情验游,我是刑警寧澤充岛,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耕蝉,受9級(jí)特大地震影響崔梗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垒在,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一蒜魄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦谈为、人聲如沸旅挤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粘茄。三九已至,卻和暖如春秕脓,著一層夾襖步出監(jiān)牢的瞬間柒瓣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工吠架, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芙贫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓傍药,卻偏偏與公主長(zhǎng)得像屹培,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怔檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容