adb命令用法整理

Android Debug Bridge:android調(diào)試橋,通常位于sdk的platform-toor文件夾下继榆。

ADB架構(gòu)

adb是一個C/S架構(gòu)的應用程序巾表,由三部分組成:

  1. 客戶端,運行在開發(fā)者的pc端略吨,使用adb命令調(diào)用攒发。運行后會嘗試定位主機上的adb服務器,如果沒有則啟動一個adb服務器晋南。
  2. 服務器惠猿,運行在開發(fā)者pc端的一個后臺進程,作用在于監(jiān)測usb端口的感知設備的連接和拔出负间;管理客戶端和守護進程之間的通信偶妖,將客戶端的請求通過usb或者tcp的方式發(fā)送到設備端的守護進程(常駐進程)adbd中。
  3. adbd(adb demon)政溃,運行在每個設備端后臺的一個守護進程(常駐進程)趾访,作用是用于連接adb服務器,當adbd與服務器連接后董虱,客戶端就可以想adb服務器發(fā)送服務請求了扼鞋。

adb的工作原理

  1. 在pc端運行adb命令啟動時,客戶端先監(jiān)測服務器進程是否運行愤诱,否則啟動云头,服務器在啟動后與本地 tcp的5037端口綁定,通過該端口監(jiān)聽客戶端發(fā)出的命令淫半,也可以通過adb -P <port> start-server指定固定端口溃槐。
  2. 服務器與設備端連接,服務器通過掃描5555到5585之間的奇數(shù)端口查找模擬器科吭,服務器發(fā)現(xiàn)adbd(守護進程)后便于之連接昏滴。
    note:每個模擬器都使用一對按順序排列的端口,偶數(shù)端口連接控制臺对人,奇數(shù)端口連接adb谣殊。

具體用法

指定目標設備

如果有多個設備時使用:
-d指定當前唯一通過 USB 連接的 Android 設備為命令目標
-e指定當前唯一運行的模擬器為命令目標
-s <serialNumber>指定相應 serialNumber 號的設備/模擬器為命令目標

查看應用列表

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
即在 adb shell pm list packages 的基礎上可以加一些參數(shù)進行過濾查看不同的列表,支持的過濾參數(shù)如下:
所有應用
-f顯示應用關(guān)聯(lián)的 apk 文件
-d只顯示 disabled 的應用
-e只顯示 enabled 的應用
-s只顯示系統(tǒng)應用
-3只顯示第三方應用
-i顯示應用的 installer
-u包含已卸載應用
<FILTER>包名包含 <FILTER> 字符串

安裝APK

adb install 后面可以跟一些可選參數(shù)來控制安裝 APK 的行為牺弄,可用參數(shù)及含義如下:
-l將應用安裝到保護目錄 /mnt/asec
-r允許覆蓋安裝
-t允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的應用
-s將應用安裝到 sdcard
-d允許降級覆蓋安裝
-g授予所有運行時權(quán)限

常見安裝失敗輸出代碼姻几、含義及可能的解決辦法如下:
INSTALL_FAILED_ALREADY_EXISTS
應用已經(jīng)存在,或卸載了但沒卸載干凈;adb install 時使用 -r 參數(shù)辟狈,或者先 adb uninstall <packagename> 再安裝
INSTALL_FAILED_INVALID_APK
無效的 APK 文件
INSTALL_FAILED_INVALID_URI
無效的 APK 文件名;確保 APK 文件名里無中文
INSTALL_FAILED_INSUFFICIENT_STORAGE
空間不足;清理空間
INSTALL_FAILED_DUPLICATE_PACKAGE
已經(jīng)存在同名程序
INSTALL_FAILED_NO_SHARED_USER
請求的共享用戶不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE
以前安裝過同名應用,但卸載時數(shù)據(jù)沒有移除厢拭;或者已安裝該應用尿褪,但簽名不一致;先 adb uninstall <packagename> 再安裝
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
請求的共享用戶存在但簽名不一致
INSTALL_FAILED_MISSING_SHARED_LIBRARY
安裝包使用了設備上不可用的共享庫
INSTALL_FAILED_REPLACE_COULDNT_DELETE
替換時無法刪除
INSTALL_FAILED_DEXOPT
dex 優(yōu)化驗證失敗或空間不足
INSTALL_FAILED_OLDER_SDK
設備系統(tǒng)版本低于應用要求
INSTALL_FAILED_CONFLICTING_PROVIDER
設備里已經(jīng)存在與應用里同名的 content provider
INSTALL_FAILED_NEWER_SDK
設備系統(tǒng)版本高于應用要求
INSTALL_FAILED_TEST_ONLY
應用是 test-only 的,但安裝時沒有指定 -t 參數(shù)
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
包含不兼容設備 CPU 應用程序二進制接口的 native code
INSTALL_FAILED_MISSING_FEATURE
應用使用了設備不可用的功能
INSTALL_FAILED_CONTAINER_ERROR
sdcard 訪問失敗; 應用簽名與 ROM 簽名一致扭吁,被當作內(nèi)置應用。確認 sdcard 可用,或者安裝到內(nèi)置存儲; 打包時不與 ROM 使用相同簽名盒音。
INSTALL_FAILED_INVALID_INSTALL_LOCATION
不能安裝到指定位置;應用簽名與 ROM 簽名一致,被當作內(nèi)置應用馅而。切換安裝位置祥诽,添加或刪除 -s 參數(shù);打包時不與 ROM 使用相同簽名。
INSTALL_FAILED_MEDIA_UNAVAILABLE
安裝位置不可用,一般為 sdcard瓮恭,確認 sdcard 可用或安裝到內(nèi)置存儲
INSTALL_FAILED_VERIFICATION_TIMEOUT
驗證安裝包超時
INSTALL_FAILED_VERIFICATION_FAILURE
驗證安裝包失敗
INSTALL_FAILED_PACKAGE_CHANGED
應用與調(diào)用程序期望的不一致
INSTALL_FAILED_UID_CHANGED
以前安裝過該應用雄坪,與本次分配的 UID 不一致清除以前安裝過的殘留文件
INSTALL_FAILED_VERSION_DOWNGRADE
已經(jīng)安裝了該應用更高版本
使用 -d 參數(shù)
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
已安裝 target SDK 支持運行時權(quán)限的同名應用,要安裝的版本不支持運行時權(quán)限
INSTALL_PARSE_FAILED_NOT_APK
指定路徑不是文件屯蹦,或不是以 .apk 結(jié)尾
INSTALL_PARSE_FAILED_BAD_MANIFEST
無法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION
解析器遇到異常
INSTALL_PARSE_FAILED_NO_CERTIFICATES
安裝包沒有簽名
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
已安裝該應用维哈,且簽名與 APK 文件不一致
先卸載設備上的該應用,再安裝
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING
解析 APK 文件時遇到 CertificateEncodingException
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME
manifest 文件里沒有或者使用了無效的包名
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID
manifest 文件里指定了無效的共享用戶 ID
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
解析 manifest 文件時遇到結(jié)構(gòu)性錯誤
INSTALL_PARSE_FAILED_MANIFEST_EMPTY
在 manifest 文件里找不到找可操作標簽(instrumentation 或 application)
INSTALL_FAILED_INTERNAL_ERROR
因系統(tǒng)問題安裝失敗
INSTALL_FAILED_USER_RESTRICTED
用戶被限制安裝應用
INSTALL_FAILED_DUPLICATE_PERMISSION
應用嘗試定義一個已經(jīng)存在的權(quán)限名稱
INSTALL_FAILED_NO_MATCHING_ABIS
應用包含設備的應用程序二進制接口不支持的 native code
INSTALL_CANCELED_BY_USER
應用安裝需要在設備上確認登澜,但未操作設備或點了取消;在設備上同意安裝
INSTALL_FAILED_ACWF_INCOMPATIBLE
應用程序與設備不兼容
does not contain AndroidManifest.xml
無效的 APK 文件
is not a valid zip file
無效的 APK 文件
Offline
設備未連接成功;先將設備與 adb 連接成功
unauthorized
設備未授權(quán)允許調(diào)試
error: device not found
沒有連接成功的設備;先將設備與 adb 連接成功
protocol failure
設備已斷開連接;先將設備與 adb 連接成功
Unknown option: -s
Android 2.2 以下不支持安裝到 sdcard;不使用 -s 參數(shù)
No space left on device
空間不足;清理空間
Permission denied ... sdcard ...
sdcard 不可用
signatures do not match the previously installed version; ignoring!
已安裝該應用且簽名不一致;先卸載設備上的該應用阔挠,再安裝

adb install 內(nèi)部原理簡介

adb install 實際是分三步完成:

  1. push apk 文件到 /data/local/tmp。
  2. 調(diào)用 pm install 安裝脑蠕。
  3. 刪除 /data/local/tmp 下的對應 apk 文件购撼。
    所以,必要的時候也可以根據(jù)這個步驟谴仙,手動分步執(zhí)行安裝過程迂求。
清除應用數(shù)據(jù)與緩存

adb shell pm clear <packagename>
<packagename> 表示應用名包,這條命令的效果相當于在設置里的應用信息界面點擊了「清除緩存」和「清除數(shù)據(jù)」晃跺。
實例:
adb shell pm clear com.qihoo360.mobilesafe

查看前臺 Activity

adb shell dumpsys activity activities | grep mFocusedActivity

查看正在運行的 Services

adb shell dumpsys activity services [<packagename>]
<packagename>參數(shù)不是必須的锁摔,指定<packagename>表示查看與某個包名相關(guān)的 Services,不指定表示查看所有 Services,<packagename> 不一定要給出完整的包名

查看應用詳細信息

adb shell dumpsys package <packagename>
輸出中包含很多信息哼审,包括 Activity Resolver Table谐腰、Registered ContentProviders、包名涩盾、userId十气、安裝后的文件資源代碼等路徑、版本信息春霍、權(quán)限信息和授予狀態(tài)砸西、簽名版本信息等。

與應用交互

主要是使用am <command>,常用<command>如下:
start [options] <INTENT>啟動 <INTENT> 指定的 Activity
startservice [options] <INTENT>啟動 <INTENT> 指定的 Service
broadcast [options] <INTENT>發(fā)送 <INTENT> 指定的廣播
force-stop <packagename>停止 <packagename> 相關(guān)的進程
<INTENT> 參數(shù)很靈活芹枷,和寫 Android 程序時代碼里的 Intent 相對應衅疙。

用于決定 intent 對象的選項如下:
-a <ACTION>指定 action,比如 android.intent.action.VIEW
-c <CATEGORY>指定 category鸳慈,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT>指定完整 component 名饱溢,用于明確指定啟動哪個 Activity,如 com.example.app/.ExampleActivity

強制停止應用

adb shell am force-stop <packagename>

文件管理

adb pull <設備里的目錄> <電腦上的文件路徑>
adb push <電腦上的文件路徑> <設備里的目錄>

按鍵模擬/輸入

input這是一個非常有意思的命令
命令adb shell input [<source>] <command> [<arg>...]
最常用的<source>主要是keyeventtext
keyevent的常用code如下:


內(nèi)核日志

adb shell dmesg

IP 地址

每次想知道設備的 IP 地址的時候都得「設置」-「關(guān)于手機」-「狀態(tài)信息」-「IP地址」很煩對不對走芋?通過 adb 可以方便地查看绩郎。
adb shell ifconfig | grep Mask

內(nèi)存信息

adb shell cat /proc/meminfo

關(guān)閉 USB 調(diào)試模式

adb shell settings put global adb_enabled 0

實用功能

屏幕截圖

adb exec-out screencap -p > sc.png保存截圖到電腦
adb shell screencap -p /sdcard/sc.png保存截圖到設備
adb shell screenrecord /sdcard/filename.mp4錄屏保存到設備,默認時長180秒

重新掛載 system 分區(qū)為可寫

需要root權(quán)限
先用mount命令找到system所在行的路徑翁逞,然后使用
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
這里的 /dev/block/platform/msm_sdcc.1/by-name/system 就是我們從上一步的輸出里得到的文件路徑肋杖。

查看連接過的 WiFi 密碼

cat /data/misc/wifi/*.conf

開啟/關(guān)閉 WiFi

adb shell svc wifi enable
adb shell svc wifi disable

查看實時資源占用情況

adb shell top

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挖函,隨后出現(xiàn)的幾起案子状植,更是在濱河造成了極大的恐慌,老刑警劉巖怨喘,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件津畸,死亡現(xiàn)場離奇詭異,居然都是意外死亡哲思,警方通過查閱死者的電腦和手機洼畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棚赔,“玉大人帝簇,你說我怎么就攤上這事】恳妫” “怎么了丧肴?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胧后。 經(jīng)常有香客問我芋浮,道長,這世上最難降的妖魔是什么壳快? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任纸巷,我火速辦了婚禮,結(jié)果婚禮上眶痰,老公的妹妹穿的比我還像新娘瘤旨。我一直安慰自己,他們只是感情好竖伯,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布存哲。 她就那樣靜靜地躺著因宇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祟偷。 梳的紋絲不亂的頭發(fā)上察滑,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音修肠,去河邊找鬼贺辰。 笑死,一個胖子當著我的面吹牛氛赐,可吹牛的內(nèi)容都是我干的魂爪。 我是一名探鬼主播先舷,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼艰管,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒋川?” 一聲冷哼從身側(cè)響起牲芋,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捺球,沒想到半個月后缸浦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡氮兵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年裂逐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泣栈。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡卜高,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出南片,到底是詐尸還是另有隱情掺涛,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布疼进,位于F島的核電站薪缆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伞广。R本人自食惡果不足惜拣帽,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚼锄。 院中可真熱鬧减拭,春花似錦、人聲如沸灾票。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至既们,卻和暖如春濒析,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啥纸。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工号杏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斯棒。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓盾致,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荣暮。 傳聞我的和親對象是個殘疾皇子庭惜,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359