一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android 工具

 women1413 2016-09-24

Android 開發(fā)中, adb 是開發(fā)者經(jīng)常使用的工具,是 Android 開發(fā)者必須掌握的。

Android Debug Bridge,Android 調(diào)試橋接器,簡稱 adb ,該工具位于 /platform-tools/目錄下,其源碼位于/system/core/adb目錄下,是用于管理模擬器或真機(jī)狀態(tài)的萬能工具。 adb 采用了客戶端-服務(wù)器模型,包括三個部分:

  1. 客戶端部分,運(yùn)行在開發(fā)用的電腦上,可以在命令行中運(yùn)行adb命令來調(diào)用該客戶端,像 DDMS 這樣的 Android 工具也可以調(diào)用 adb 客戶端。
  2. 守護(hù)進(jìn)程部分,運(yùn)行于模擬器或手機(jī)的后臺。
  3. 服務(wù)端部分,是運(yùn)行在開發(fā)用電腦上的后臺進(jìn)程,用于管理客戶端與運(yùn)行在模擬器或真機(jī)的守護(hù)進(jìn)程通信。

adb 工具模型示意圖如下:

Android 工具-adb

adb 的工作原理

當(dāng)啟動 adb 客戶端時,客戶端首先檢查 adb 服務(wù)端進(jìn)程是否運(yùn)行,如果沒有運(yùn)行,則啟動服務(wù)端。當(dāng)服務(wù)端啟動時,它會綁定到本地的 TCP5037 端口,并且監(jiān)聽從 adb 客戶端發(fā)來的命令——所有 adb 客戶端都使用 5037 端口與 adb 服務(wù)端通信。

接下來服務(wù)端與所有正在運(yùn)行的模擬器或手機(jī)連接。它通過掃描 5555-5585 之間的奇數(shù)號端口來搜索模擬器或手機(jī),一旦發(fā)現(xiàn) adb 守護(hù)進(jìn)程,就通過此端口進(jìn)行連接。需要說明的是,每一個模擬器或手機(jī)使用一對有序的端口,偶數(shù)號端口用于控制臺連接,奇數(shù)號端口用于 adb 連接,例如:

Emulator 1, console: 5554Emulator 1, adb: 5555Emulator 2, console: 5556Emulator 2, adb: 5557 ...

即如果模擬器與 adb 在 5555 端口連接,則其與控制臺的連接就是 5554 端口。

當(dāng)服務(wù)端與所有的模擬器建立連接之后,就可以使用 adb 命令來控制或者訪問了。因?yàn)榉?wù)端管理著連接并且可以接收到從多個 adb 客戶端的命令,所以可以從任何一個客戶端或腳本來控制任何模擬器或手機(jī)設(shè)備。

補(bǔ)充

  1. 使用 adb 命令調(diào)試需要手機(jī)開啟 開發(fā)者模式 下的 USB 調(diào)試,在 Android 4.2 及更高的版本中,開發(fā)者選項(xiàng)默認(rèn)是隱藏的,你可以去 設(shè)置——>關(guān)于手機(jī),然后連續(xù)點(diǎn)擊七次版本號即可。返回上層就可以在底部看見 開發(fā)者模式 了。當(dāng)然有些定制的 ROM 開啟方式會有點(diǎn)不一樣,這個就要去問 ROM 的開發(fā)者了。
  2. 關(guān)于 USB 調(diào)試與計(jì)算機(jī)的 RSA 密鑰指紋配對。Google 官方原文如下:

    When you connect a device running Android 4.2.2 or higher to your computer, the system shows a dialog asking whether to accept an RSA key that allows debugging through this computer. This security mechanism protects user devices because it ensures that USB debugging and other adb commands cannot be executed unless you're able to unlock the device and acknowledge the dialog. This requires that you have adb version 1.0.31 (available with SDK Platform-tools r16.0.1 and higher) in order to debug on a device running Android 4.2.2 or higher.

大意就是,你想使用 USB調(diào)試 就得啟用 USB調(diào)試 模式下的 RSA密鑰指紋。不然我就不給你用。

  1. 關(guān)于使用真機(jī)調(diào)試的更多信息可參考:Run Apps on a Hardware Device。
adb 用法查詢模擬器或手機(jī)狀態(tài)

了解 adb 服務(wù)端連接的模擬器或手機(jī)可以幫助更好的使用 adb 命令,這可以通過 devices 命令來列舉當(dāng)前連接的設(shè)備:

adb devices

執(zhí)行結(jié)果是 adb 為每一個設(shè)備輸出以下狀態(tài)信息:

序列號(serialNumber):由 adb 創(chuàng)建用于唯一標(biāo)識設(shè)備的字符串,格式是 <設(shè)備類型>-<端口號>,例如: emulator-5554連接狀態(tài)(state),其值是可能是下面的任意一種:offline — 未連接或未響應(yīng)device — 表示設(shè)備已經(jīng)連接到服務(wù)端。但需要注意的是,這個狀態(tài)并不表示 Android 系統(tǒng)已經(jīng)完全啟動起來并且可操作,因?yàn)橄到y(tǒng)在啟動的過程中就已經(jīng)連接 adb ,但這個狀態(tài)是正常的可操作狀態(tài)。no device - 表示沒有任何設(shè)備連接(樓主測試過程中沒有碰到過 no device 的情況,沒連接設(shè)備就沒任何輸出)

每一個設(shè)備的輸出形如:

[serialNumber] [state]

下面是 adb devices 命令和其執(zhí)行結(jié)果:

$ adb devicesList of devices attached emulator-5554 deviceemulator-5556 deviceemulator-5558 device

如果沒有模擬器或手機(jī)在運(yùn)行,運(yùn)行 adb devices 命令的執(zhí)行結(jié)果如下:

$ adb devcesList of devices attached
操作指定模擬器或手機(jī)

如果有多個模擬器或手機(jī)正在運(yùn)行,當(dāng)使用 adb 命令的時候就需要指定目標(biāo)設(shè)備,這可以通過使用 -s選項(xiàng)參數(shù)實(shí)現(xiàn),用法如下:

adb -s

你可以使用 adb 命令指定序列號在特定的設(shè)備上執(zhí)行命令,這里可以先使用前面提到的 adb devices命令查詢設(shè)備的序列號信息。

例如:

adb -s emulator-5556 install helloWorld.apk

需要注意的是,如果使用了 -s而沒有指定設(shè)備的話, adb 會報錯。

補(bǔ)充

這是 Google 官方給出在多設(shè)備的情況下,不用 -s參數(shù)指定目標(biāo)設(shè)備的快捷方式,原文如下:

If you have multiple devices available (hardware or emulated), but only one is an emulator, simply use the -e option to send commands to the emulator. Likewise if there's multiple devices but only one hardware device attached, use the -d option to send commands to the hardware device.

大意就是:如果你有多個設(shè)備,即既有模擬器,又有真機(jī),但是模擬器只有一個,那么你可以使用 -e參數(shù)想模擬器發(fā)送命令,用法如下:

$ adb -e install helloWorld.apk//同理,如果有多個設(shè)備,但只有一個真機(jī),可以使用如下命令快速發(fā)送命令$ adb -d install helloWorld.apk
安裝應(yīng)用

使用 adb install命令可以從開發(fā)用電腦中復(fù)制應(yīng)用程序并且安裝到模擬器或手機(jī)上,adb install命令必須指定待安裝的.apk文件的路徑:

adb install [-lrtsdg] (-l: 鎖定該程序)(-r: 重新安裝該程序,保留應(yīng)用數(shù)據(jù))(-t: allow test packages)(-s: 將應(yīng)用安裝到 SD卡,不過現(xiàn)在手機(jī)好像都沒有 SD卡 了吧)(-d: 允許降版本號安裝,當(dāng)然只有 debug 包才能使用)(-g: 安裝完默認(rèn)授予所有運(yùn)行時權(quán)限,這個應(yīng)該對 Android 6.0 及之后的版本才有效吧)

更多關(guān)于創(chuàng)建 apk 文件可參考:Build And Running

卸載應(yīng)用

既然有安裝應(yīng)用的命令,那當(dāng)然有卸載應(yīng)用的命令。卸載應(yīng)用命令的格式如下:

// 表示要卸載應(yīng)用的包名adb uninstall [-k] (-k:不刪除程序運(yùn)行所產(chǎn)生的數(shù)據(jù)和緩存目錄)
端口轉(zhuǎn)發(fā)

使用 adb forward命令轉(zhuǎn)發(fā)端口 — 將特定端口上的請求轉(zhuǎn)發(fā)到模擬器或手機(jī)的不同的端口上。下例是從 6100端口 轉(zhuǎn)到 7100端口 :

adb forward tcp:6100 tcp:7100

也可以使用UNIX命名的socket標(biāo)識:

adb forward tcp:6100 local:logd

補(bǔ)充:關(guān)于adb forward命令的作用不是很明白,網(wǎng)上搜了下,大部分文章都是轉(zhuǎn)載了淺析 adb 命令 - adb forward,不知道這是不是原文,反正看不得不是很明白。有哪位大神能跟我講講嘛?

與模擬器或手機(jī)傳輸文件

使用 adb 命令 pullpush能從 Android 設(shè)備拷貝或復(fù)制文件到 Android 設(shè)備。跟install命令不同,pullpush命令允許拷貝和復(fù)制文件到任何位置。

從模擬器或手機(jī)拷貝文件或文件夾(包括文件夾的子目錄)

adb pull [-a] (-a:保留文件時間戳及屬性)

將文件或文件夾(包括文件夾的子目錄)拷貝到模擬器或手機(jī)

adb push

比如,我想把桌面的 log.txt 復(fù)制到手機(jī)的 dev 目錄下,則命令如下:

$ adb push /Users/littlejie/Desktop/log.txt /dev

有時候,使用該命令復(fù)制文件到手機(jī)或從手機(jī)復(fù)制文件,會碰到如下提示:

failed to copy 'log.txt' to '/dev/log.txt': Permission denied

備注: Permission denied 這個問題以前在使用 Windows 系統(tǒng)的時候碰到過,現(xiàn)在轉(zhuǎn) Mac 后就沒有再遇到,難道是我打開方式不對嘛?再補(bǔ)充一點(diǎn), Mac 上我運(yùn)行adb root命令真的有點(diǎn)一頭霧水,因?yàn)榫谷惶崾荆?/p>

$ adb rootadbd is already running as root

這是因?yàn)楫?dāng)前用戶沒有相應(yīng)的權(quán)限或者是 /dev 目錄不可寫。解決方法如下:

//方法一//已 root 權(quán)限啟動 adb 服務(wù)$ adb root//adb remount (重新掛載系統(tǒng)分區(qū),使系統(tǒng)分區(qū)重新可寫)$ adb remount//將文件復(fù)制到 /dev 目錄下$ adb push /Users/littlejie/Desktop/log.txt /dev
//方法二:修改文件的讀寫權(quán)限$ adb shell# su# chmod 777 /dev

關(guān)于 Linux 下文件權(quán)限的更多內(nèi)容請參考:linux系統(tǒng)644、755、777權(quán)限詳解

adb shell

這里簡單講一下 adb shell的使用,因?yàn)?code>adb shell的用法太多,功能太強(qiáng),完全可以專門分出一篇文章來記錄~不出意外,下周應(yīng)該能寫完~有興趣的同學(xué)可以自己先去看 Google 的官方文檔:ADB Shell Commands

adb shell 有兩種使用方式,一種是不進(jìn)入 remote shell 直接執(zhí)行命令行,格式如下:

adb [-d|-e|-s ] shell

還有一種是,進(jìn)入模擬器或手機(jī)的 remote shell 執(zhí)行,格式如下:

adb [-d|-e|-s ] shell
開啟或關(guān)閉 adb 服務(wù)

在某些情況下需要重啟 adb 服務(wù)來解決問題,比如 adb 無響應(yīng)。這時你可以通過 adb kill-server來實(shí)現(xiàn)這一操作。

之后,通過 adb start-server或者任意 adb 命令來重啟 adb 服務(wù)。

$ adb kill-server$ adb start-server* daemon not running. starting it now on port 5037 ** daemon started successfully *$ adb kill-server$ adb devicesList of devices attached* daemon not running. starting it now on port 5037 ** daemon started successfully *emulator-5556 deviceemulator-5554 device
無線調(diào)試

平時我們都是使用 USB調(diào)試,但是現(xiàn)在也支持通過 WIFI 進(jìn)行調(diào)試了。使用方式如下:

  1. 首先,你要將 Android 設(shè)備和 裝有 adb 的電腦連接到同一 Wi-Fi 網(wǎng)絡(luò)。其次,你需要配置好防火墻,否則很有可能導(dǎo)致 Wi-Fi 調(diào)試不能使用。
  2. 使用 USB數(shù)據(jù)線 將手機(jī)連接到電腦。
  3. 設(shè)置目標(biāo)設(shè)備監(jiān)聽 5555端口 的 TCP/IP 連接。

shell $ adb tcpip 5555

  1. 斷開手機(jī)與電腦的 USB 連接。
  2. 查看手機(jī)的 IP地址 。例如,在 Nexus 設(shè)備上,你可以通過如下方式查看: 設(shè)置——>關(guān)于手機(jī)——>狀態(tài)——>IP地址。在 Androir Wear 上,你可以通過如下方式查看:設(shè)置——>Wi-Fi設(shè)置——>高級——>IP地址
  3. 通過 IP 連接手機(jī)

shell adb connect

  1. 確認(rèn)手機(jī)是否連接到電腦上

shell $ adb devices List of devices attached :5555 device

通過以上步驟,就可以開心的享用 WiFi 調(diào)試了。如果沒有正常連接,可以按照下面的步驟檢查:

  1. 檢查電腦和手機(jī)是否還在同一個 WiFi 網(wǎng)絡(luò)下
  2. 重新執(zhí)行一次 adb connect 命令
  3. 重啟 adb 服務(wù),然后重頭再來
  4. 檢查是否是防火墻的設(shè)置問題

這是一篇關(guān)于 Android 設(shè)備 USB調(diào)試 和 WiFi調(diào)試 相互切換的博文,博主寫了一個腳本來實(shí)現(xiàn)這個過程,有興趣的同學(xué)可以去看看。

補(bǔ)充
  • 獲取設(shè)備序列號

shell $ adb shell emulator-5554

  • 查看 bugreport 報告

shell //直接在終端輸出 $ adb bugreport //將 bugreport 輸出到指定文件 $ adb bugreport > file_path

adb bugreport這個命令非常簡單,但是在實(shí)際應(yīng)用中非常有用,它會輸出從開機(jī)之后詳細(xì)的 dumpsys 、 dumpstate 和 logcat 信息,是一份完整的日志記錄。對分析用戶行為、異常信息、系統(tǒng)狀態(tài)有很大的參考作用。一般我們會把 bugreport 導(dǎo)出到電腦上分析。

bugreport 的詳細(xì)使用可以參考 Baniel01的這篇Android adb bugreport工具分析和使用文章,里面有很詳細(xì)的介紹。

  • 查看設(shè)備的 log

shell $ adb logcat

  • 查看 adb 的幫助
    這個命令很簡單,但是也很實(shí)用,如果你不知道該使用哪個命令,那么使用 adb 幫助命令你能查看到大部分 adb 命令的作用和使用方法。

shell $ adb help

  • 重啟手機(jī)
    有時候,手動關(guān)機(jī)太麻煩,那就來個命令行吧~

shell adb reboot

  • 以 root 權(quán)限開啟 adb 守護(hù)進(jìn)程

shell //此命令會重啟守護(hù)進(jìn)程 $ adb root //不以 root 權(quán)限開啟 adb 守護(hù)進(jìn)程 $ adb unroot

總結(jié)

以上就是 adb 命令的常見用法,大部分翻譯自 Android Debug Bridge,其中加了一些個人總結(jié)。有些不常用的 adb 命令沒有介紹,更多 adb 用法請見:Adb Command Summary。文中如有紕漏,歡迎大家留言指出。

微博:厲圣杰

微信:

參考:

  1. Android Debug Bridge
  2. 淺析 adb 命令 - adb forward
  3. Android_ADB_通過WIFI或USB方式完成調(diào)試
  4. Android adb bugreport工具分析和使用

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲深夜精品福利一区| 好吊妞视频只有这里有精品| 黄色污污在线免费观看| 小黄片大全欧美一区二区| 91国内视频一区二区三区| 国产精品一区二区香蕉视频| 丝袜诱惑一区二区三区| 欧美日韩一区二区三区色拉拉| 欧美日韩在线第一页日韩| 中文文精品字幕一区二区| 欧美乱码精品一区二区三| 99视频精品免费视频| 亚洲精品一区二区三区日韩| 人妻巨大乳一二三区麻豆| 国产精品香蕉一级免费| 97精品人妻一区二区三区麻豆| 日韩一级一片内射视频4k| 亚洲一区二区三区免费的视频| 国产目拍亚洲精品区一区| 欧美有码黄片免费在线视频| 欧美成人免费一级特黄| 国产欧美韩日一区二区三区| 亚洲男女性生活免费视频| 日本少妇中文字幕不卡视频| 91欧美日韩精品在线| 91一区国产中文字幕| 欧美尤物在线观看西比尔| 国产性色精品福利在线观看| 一区二区三区日韩中文| 国产又粗又长又爽又猛的视频| 欧美日韩亚洲国产综合网| 十八禁日本一区二区三区| 日本人妻中出在线观看| 亚洲av专区在线观看| 国产又粗又猛又爽又黄的文字| 午夜直播免费福利平台| 亚洲一区二区三区国产| 美国女大兵激情豪放视频播放| 国产一级内片内射免费看| 大尺度剧情国产在线视频| 国产福利在线播放麻豆|