日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
adb命令行l(wèi)inux adb命令行怎么強制打開usb調(diào)試模式

linux adb指令無響應(yīng)

現(xiàn)象是輸入adb命令之后,終端無響應(yīng),既沒有提示成功也沒有提示失敗。

創(chuàng)新互聯(lián)企業(yè)建站,10年網(wǎng)站建設(shè)經(jīng)驗,專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運營經(jīng)驗,設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)中不同領(lǐng)域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準(zhǔn)市場調(diào)研,為客戶提供的解決方案。

運行 ps aux | grep adb,如果有輸出 adb fork-server server,則說明adb正在運行,記下pid,執(zhí)行kill $(pid)。

ADB常用命令

Android 調(diào)試橋 (adb) ?,可與設(shè)備進行通信。adb 命令可用于執(zhí)行各種設(shè)備操作(例如安裝和調(diào)試應(yīng)用),并提供對 Unix shell(可用來在設(shè)備上運行各種命令)的訪問權(quán)限。它是一種客戶端-服務(wù)器程序,包括以下三個組件:

客戶端: 用于發(fā)送命令??蛻舳嗽陂_發(fā)機器上運行??梢酝ㄟ^發(fā)出 adb 命令從命令行終端調(diào)用客戶端。(可以通過它對Android應(yīng)用進行安裝、卸載、調(diào)試)

PC上的手機助手基本都是通過adb命令去完成的。有時候裝了這類手機助手的話,它自帶的adb程序可能會與Android SDK下的adb程序產(chǎn)生沖突,5037端口被占用,導(dǎo)致adb命令無法連接到設(shè)備。Windows下通過netstat -ano|findstr "5037"

守護程序 (adbd): 用于在設(shè)備上運行命令。守護程序在每個設(shè)備上作為后臺進程運行

執(zhí)行adb shell ps | grep adbd, 可以找到該后臺進程,Windows使用findstr替代grep.

adb nodaemon server

服務(wù)器(Service): 用于管理客戶端與守護程序之間的通信。服務(wù)器在開發(fā)機器上作為后臺進程運行

adb服務(wù)啟動后,Windows可以在任務(wù)管理中找到adb.exe; linux ps -ef | gref adb 可以查看service

一般都是通過這樣子的格式 adb [-d|-e|-s 設(shè)備序列號] 子命令

通常只有一臺設(shè)備就忽略 [-d|-e|-s ] 這一部分

這里介紹一些常用的命令:

獲取設(shè)備列表及設(shè)備狀態(tài)

獲取設(shè)備的狀態(tài)

注意:設(shè)備的狀態(tài)有 3 鐘,device?,?offline?,?unknown

device:設(shè)備正常連接

offline:連接出現(xiàn)異常,設(shè)備無響應(yīng)

unknown:沒有連接設(shè)備

結(jié)束 adb 服務(wù)

啟動 adb 服務(wù)

注意:通常兩個命令一起用,有時候我們開啟server會失敗,這是因為我們裝了的手機助手,豌豆莢或者其他軟件自帶有自己的adb,導(dǎo)致端口沖突開啟失敗。一般在連接出現(xiàn)異常,使用 adb devices 未正常列出設(shè)備, 設(shè)備狀態(tài)異常時使用 kill-server,然后運行 start-server 進行重啟服務(wù)。

打印 Android 的系統(tǒng)日志

打印 dumpsys、dumpstate、logcat 的輸出,也是用于分析錯誤輸出比較多

打印日志后重定向到一個文件中

安裝應(yīng)用,覆蓋安裝是使用 -r 選項

注意:有些adb版本無法支持安裝中文的apk

查看手機應(yīng)用包名

查看應(yīng)用對應(yīng)的apk文件在手機上的安裝位置則可以在上面的命令后加-f參數(shù)

卸載應(yīng)用,后面跟的參數(shù)是應(yīng)用的包名,請區(qū)別于?apk 文件名

'-k' means keep the data and cache directories , -k 選項,卸載時保存數(shù)據(jù)和緩存目錄

將 Android 設(shè)備上的文件或者文件夾復(fù)制到本地

adb pull /sdcard/test.txt C:\Users\Administrator\Desktop\log

推送本地文件至 Android 設(shè)備

獲取連接到的手機的序列號

獲取設(shè)備的連接狀態(tài)

等待設(shè)備連接成功

該命令將會阻塞一直到默認(rèn)連接的那部機器狀態(tài)變?yōu)閐evice,也就是連接成功。

其實adb shell命令就是調(diào)用的是Android設(shè)備中的system/bin目錄下的命令。

Android的內(nèi)核本身就是Linux,所以Android本身也支持Linux命令,但是因為是手機系統(tǒng),所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟件進行。

如何在手機中執(zhí)行Shell命令?

每次都加上adb shell來進行命令的發(fā)送與執(zhí)行

先通過adb shell進入手機Shell執(zhí)行狀態(tài),然后直接輸入Linux命令。

使一個apk處于禁用狀態(tài),相當(dāng)于卸載了:

其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile

eg:adb shell su disable com.UCMobile/.main.UCMobile

同時我們在手機上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)不見了

讓一個apk從禁用狀態(tài)恢復(fù)過來

其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobileeg:

adb shell su enable com.UCMobile/.main.UCMobile

同時我們從手機上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)又出現(xiàn)了。

查看一個apk所在的路徑

adb shell pm path com.UCMobile

查看手機中裝的所有的包

屏幕開始錄像并且儲存到/sdcard中,同時名字為demo.mp4

錄屏設(shè)置時長10s,命名為demo.mp4

注意:現(xiàn)在僅支持一部分手機錄屏,不支持的手機會出現(xiàn)以下提示

解決方法:

安裝了scrcpy之后,只需要輸入如下命令,即可錄取指定設(shè)備的屏幕

scrcpy -s device --render-expired-frames -Nr ./demo.pm4

--render-expired-frames:盡可能最大幀率

-N:不在PC端展示

-r:錄制mp4/mkv文件

關(guān)閉設(shè)備請求,開啟設(shè)備

設(shè)備關(guān)機以及重啟

pm(package manager)可以獲取一些安裝到Android設(shè)備上的app的信息

pm list packages 用法:list packages [?options]?filter

獲取所有的應(yīng)用的包名

列出系統(tǒng)應(yīng)用

列出第三方應(yīng)用

查看它們的關(guān)聯(lián)文件

adb shell pm list package -f

查看軟件包的安裝來源

pm dump?包名?很多dump信息

安裝應(yīng)用

apk如果在電腦用 adb install?

如果在Android設(shè)備上用 adb shell pm install

卸載應(yīng)用,同adb uninstall ,后跟包名

清除應(yīng)用數(shù)據(jù)

am(activity manager,字面意思就跟activity有關(guān),大家都知道Android的界面都是由一個個activity顯示的)

啟動一個Activity

獲取到package和launch_activity

AndroidSDK中aapt工具,檢索命令結(jié)果,可以獲取到package和launch_activity

這里涉及到一個點,如何找到程序的入口,首先你要知道是哪個activity才能啟動;

啟動華為系統(tǒng)相機

打開音樂播放器

播放指定音樂:

先停止目標(biāo)應(yīng)用,再啟動

等待應(yīng)用完成啟動

啟動網(wǎng)頁(android.intent.action.VIEW具體參考Android官網(wǎng))

結(jié)束應(yīng)用

input

模擬輸入,向獲得焦點的EditText控件輸入內(nèi)容

返回主界面

發(fā)送一個點擊操作的指令,參數(shù)是x y坐標(biāo)

從左往右滑動屏幕,?/從?100 100?經(jīng)歷300毫秒滑動到?200 200

長按操作,在?100 100?位置長按?1000毫秒

adb命令和linux命令

adb root 獲取 root 權(quán)限。

adb sideload

adb shell ps 打印進程狀態(tài)。

adb shell top 展現(xiàn)上層 CPU 進程信息。

adb shell getprop 獲取 Android 系統(tǒng)服務(wù)屬性

adb shell setprop 設(shè)置服務(wù)屬性。

adb shell dumpsys 獲取系統(tǒng)數(shù)據(jù)。

adb logcat 打印日志文件

adb shell ip 主要用于顯示一些數(shù)據(jù)

adb shell netstat 主要用于網(wǎng)絡(luò)統(tǒng)計。

adb shell ping 沒啥好說的,和 PC 的 ping 命令一樣的。

adb shell netcfg 通過配置文件配置和管理網(wǎng)絡(luò)連接。

adb shell cp 字面意思,很好理解,復(fù)制。

adb shell pwd 定位當(dāng)前的操作位置

adb shell mv 移動或者更名文件

adb shell mkdir 創(chuàng)建一個文件夾

adb shell rm 刪除文件或者目錄

adb shell ls 列出目錄內(nèi)容。

adb shell pm clear 清除應(yīng)用緩存。

adb shell pm path 打印 apk 的路徑。

adb usb 設(shè)置設(shè)備以 USB 形式連接 PC

adb kill-server 終止 adb 進程。

adb forward 端口映射,將 PC 端的某端口數(shù)據(jù)重定向到手機端的一個端口。

adb devices 主要是用于打印當(dāng)前連接的所有模擬器或者設(shè)備。

shutdown -h now 關(guān)閉系統(tǒng)

init 0 關(guān)閉系統(tǒng)

telinit 0 關(guān)閉系統(tǒng)

shutdown -h hours:minutes 按預(yù)定時間關(guān)閉系統(tǒng)

shutdown -c 取消按預(yù)定時間關(guān)閉系統(tǒng)

shutdown -r now 重啟

reboot 重啟

logout 注銷

文件和目錄

cd /home 進入 '/ home' 目錄'

cd .. 返回上一級目錄

cd ../.. 返回上兩級目錄

cd 進入個人的主目錄

cd ~user1 進入個人的主目錄

cd - 返回上次所在的目錄

pwd 顯示工作路徑

ls 查看目錄中的文件

ls -F 查看目錄中的文件

ls -l 顯示文件和目錄的詳細(xì)資料

ls -a 顯示隱藏文件

ls [0-9] 顯示包含數(shù)字的文件名和目錄名

tree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)

lstree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)

mkdir dir1 創(chuàng)建一個叫做 'dir1' 的目錄'

mkdir dir1 dir2 同時創(chuàng)建兩個目錄

mkdir -p /tmp/dir1/dir2 創(chuàng)建一個目錄樹

rm -f file1 刪除一個叫做 'file1' 的文件'

rmdir dir1 刪除一個叫做 'dir1' 的目錄'

rm -rf dir1 刪除一個叫做 'dir1' 的目錄并同時刪除其內(nèi)容

rm -rf dir1 dir2 同時刪除兩個目錄及它們的內(nèi)容

mv dir1 new_dir 重命名/移動 一個目錄

cp file1 file2 復(fù)制一個文件

cp dir/* . 復(fù)制一個目錄下的所有文件到當(dāng)前工作目錄

cp -a /tmp/dir1 . 復(fù)制一個目錄到當(dāng)前工作目錄

cp -a dir1 dir2 復(fù)制一個目錄

cp -r dir1 dir2 復(fù)制一個目錄及子目錄

ln -s file1 lnk1 創(chuàng)建一個指向文件或目錄的軟鏈接

ln file1 lnk1 創(chuàng)建一個指向文件或目錄的物理鏈接

touch -t 0712250000 file1 修改一個文件或目錄的時間戳 - (YYMMDDhhmm)

file file1 outputs the mime type of the file as text

iconv -l 列出已知的編碼

常用的adb命令

在平時的工作中,會經(jīng)常用到adb命令,在這里稍微整理了一下。

一.概要

1.什么是adb?

adb全稱為Android Debug Bridge,就是起到調(diào)試橋的作用。顧名思義,adb就是一個debug工具。

2.adb工作原理

不是很理解?那就來看看它的工作原理吧。

上圖是一個簡單的adb工作原理圖。adb客戶端服務(wù)器端程序,由上圖可以看出它主要三個組件組成:Client,Server,Daemon。

(1)當(dāng)你啟動一個adb Client(客戶端),Client首先會選確認(rèn)是否已有一個adb

Server(服務(wù)器)進程在運行,如果沒有,則會啟動Server進程。此時,adb Server就會綁定本地的TCP端口5037,并監(jiān)聽adb

Client發(fā)來的命令。

(2)接著,Server將會掃描所有5555到5585范圍內(nèi)的奇數(shù)端口來定位所有的模擬器或設(shè)備,并與之建立連接。一旦Server找到

了adb

daemon(守護程序),它將建立一個到該端口的連接,這樣,我們就可以使用adb命令控制和訪問模擬器或設(shè)備了。在這里,需注意的是任何模擬器或設(shè)備實例會取得兩個連續(xù)的端口:一個偶數(shù)端口用來相應(yīng)控制臺的連接,和一個奇數(shù)端口用來響應(yīng)adb連接。

3.adb的作用

借助adb工具,我們可以管理設(shè)備或手機模擬器的狀態(tài),還可以進行很多手機操作,如安裝軟件、系統(tǒng)升級、運行shell命令等等。簡而言之,adb就是連接Android手機和PC端的橋梁,可以讓用戶在電腦上對手機進行全面的操作。

二.常用命令

這個部分主要介紹adb的使用方法和一些常用的命令。

設(shè)置adb環(huán)境:將android sdk工作目錄添加到系統(tǒng)環(huán)境變量中,則可使用adb命令了。

1. adb devices

查看當(dāng)前連接的設(shè)備(連接計算機的Android設(shè)備或者模擬器)。

2.adb install

adb install apk文件路徑,將指定的apk安裝到設(shè)備上,安裝的apk包會放在/data/app目錄下。

幾個參數(shù):

-r 強制安裝

-d(真機,多個設(shè)備中只有一個真機時適用)

-e(模擬器,多個設(shè)備中只有一個模擬器時適用)

-s(指定設(shè)備,后接序列號)

adb –s 44a188f9 install –r test.apk(其中44a188f9即序列號,通過adb devices可獲?。?/p>

3.adb uninstall

adb uninstall apk包名

adb uninstall –k apk包名

-k參數(shù)為卸載軟件時保留配置和緩存文件

4.adb reboot

重啟android設(shè)備

5.adb shell

通過adb shell 命令,就可以進入設(shè)備或者模擬器的shell環(huán)境了,在這個Linux shell中,我們就可以執(zhí)行各種Linux命令了。

如果只想執(zhí)行一條shell命令,就可以采用:adb shell [shell_command]

在實際使用中,經(jīng)常與grep或findstr一起使用,起到過濾作用,查看自己需要的關(guān)鍵信息。

6.adb shell su

前提手機已經(jīng)root。獲取adb shell的root權(quán)限。

使用su提權(quán),用戶命令提示符有$變成#,如果手機沒有root,會提示su:permission denied。

7.adb shell ps/top

查看當(dāng)前終端中的進程信息,如pid等。

8.adb shell am/pm

am全稱為activity manager,可使用am命令模擬各種系統(tǒng)的行為,如去啟動一個activity,強制停止進程,發(fā)送廣播進程,修改設(shè)備屏幕屬性等。

如:adb shell am start apk包名/activityName:啟動一個activity。

pm全稱為package manager,利用pm命令可模擬android行為或查詢設(shè)備上的應(yīng)用等。

如:adb shell pm list packages

列出當(dāng)前設(shè)備所有已安裝的程序的包名。

說明:

管道符“|”:可以把標(biāo)準(zhǔn)的輸入流與標(biāo)準(zhǔn)的輸出流進行合并,或者把某個命令的標(biāo)準(zhǔn)輸出流作為另一個命令的標(biāo)準(zhǔn)輸入流。

exit退出shell。

由于grep為linux命令,運行單條adb shell 時并沒有進入linux

shell環(huán)境,并不能用grep等其他linux命令,只能用window cmd的命令。在這里可以用findstr來代替grep,使用方法為

findstr/grep [keyword]

更詳細(xì)的內(nèi)容可查看 參考文獻(xiàn)3 和 參考文獻(xiàn)4 。

對于常用的linux命令和常用的windows 控制臺命令,以后再作總結(jié)。

9.adb pull 和 adb push

adb pull 設(shè)備中的文件路徑 本地路徑:從模擬器或設(shè)備中復(fù)制文件到本地。

adb push 本地文件路徑 設(shè)備中的路徑:將本地文件或目錄復(fù)制到模擬器或設(shè)備。

這里還涉及到一個權(quán)限的問題,在后續(xù)的博文中再作介紹。

10.adb shell dumpsys

Android提供的dumpsys工具用于查看感興趣的系統(tǒng)服務(wù)信息與狀態(tài)。

參考下表:

11.adb shell monkey

跑monkey是android自動化測試的一種手段,所謂monkey測試就是模擬用戶的按鍵輸入,觸摸屏輸入,手勢輸入等。當(dāng)Monkey程序在模擬器或設(shè)備運行的時候,如果用戶比如點擊,觸摸,手勢或一些系統(tǒng)級別的事件的時候,它就會產(chǎn)生隨機脈沖,所以可以用Monkey的隨機重復(fù)的方法對apk作壓力測試,來測試android

app的穩(wěn)定性。

如下為測試騰訊新聞apk的一個簡單實例:

說明:第一個-s指定設(shè)備,如果只連接了一臺設(shè)備,可不用該參數(shù)。

-p apk包名只允許系統(tǒng)啟動指定的app,如果不指定,將允許系統(tǒng)啟動設(shè)備中的所有app,也可指定多個包。

--throttle 毫秒數(shù) 指定用戶操作(事件)間的時延。

--ignore-crashes 指定當(dāng)應(yīng)用程序崩潰時,Monkey依然發(fā)送事件,直到事件計數(shù)完成。

--ignore-timeouts 當(dāng)應(yīng)用程序發(fā)生ANR錯誤時,Monkey依然會發(fā)送事件,直到事件計數(shù)完成。

第2個-s,用于指定偽隨機數(shù)生成器的seed值,如果seed相同,則兩次Monkey測試所產(chǎn)生的事件序列也相同的。

-v 用于指定反饋信息級別,總共分為level 0、level 1、level 2三個級別,級別越高,輸出的日志越詳細(xì)。

最后的數(shù)字(這里是500):表示Monkey程序模擬500次隨機用戶操作事件。

輸出測試結(jié)果到D:\monkeylog.txt

更詳細(xì)的參數(shù)可查看 參考文獻(xiàn)5 。

部分測試結(jié)果如下:

對于測試結(jié)果的分析,通過搜索關(guān)鍵詞來定位錯誤,主要包括以下四個方面:

1)ANR(Application Not

Response):程序無響應(yīng),一般主線程超過5秒沒處理就會出現(xiàn)ANR錯誤。通過搜索ANR關(guān)鍵詞來定位關(guān)鍵的事件信息。除了導(dǎo)出日志外,還可以將/data/anr/目錄下的trace.txt文件導(dǎo)出,用來定位分析問題。使用adb

pull /data/anr/trace.txt d:\ 將trace.txt文件導(dǎo)出到d盤。

2)ForceClosed或其他異常退出信息:通過搜索Fatal關(guān)鍵詞來定位。

3)崩潰問題:通過搜索Exception關(guān)鍵詞來定位。

4)發(fā)生異常后,通過搜索Crash關(guān)鍵詞來定位到詳細(xì)的堆棧信息。

12.kill

kill用來中止一個進程。

比如我們在跑monkey的時候,怎么強制關(guān)閉monkey呢,可以用kill monkey進程PID

說明:另開啟一個cmd,找到monkey的pid號,然后殺掉即可。

參考文獻(xiàn):

1.Android調(diào)試橋:

2.Android性能分析工具dumpsys的使用:

3.adb shell 中的am pm命令:

4.adb shell 啟動應(yīng)用程序的方法:

5.Monkey壓力測試詳解:

踩坑adb——我的一次使用adb命令的踩坑之旅

昨晚正在測case的時候,突然冒出來一同事(我們都叫他肖總),來了一句:BUG基(同事都叫我BUG基,你懂的),我這復(fù)現(xiàn)了一個問題,但是開發(fā)那邊說叫我把log導(dǎo)出來,我這不會導(dǎo),你知道怎么導(dǎo)嗎?

作為一只BUG基,我怎么可能會放過這個裝比的機會呢,哈哈。

? 叫肖總導(dǎo)log的那個開發(fā)啥也沒說,就只在jira系統(tǒng)的comments最后寫了一句“導(dǎo)出方法:adb pull/cache/recovery/ ./”。其實當(dāng)時我是崩潰的,我擦,肖總,你妹,這開發(fā)不是說了導(dǎo)出方法了嗎?你直接復(fù)制粘貼打上去命令不就行了嗎?然而,裝比心理作怪,我還是決定了幫他。

那么下一步是什么?沒錯,是時候展現(xiàn)裝比的技術(shù)了!

? ?拿過Pad的第一步,那當(dāng)然是先裝驅(qū)動啦。沒驅(qū)動你怎么使用adb命令?為什么這么說呢。驅(qū)動一般指的是設(shè)備驅(qū)動程序(Device Driver),是一種可以使 計算機 和設(shè)備通信的特殊程序。相當(dāng)于 硬件 的接口, 操作系統(tǒng) 只有通過這個接口,才能控制 硬件 設(shè)備的工作,假如某設(shè)備的驅(qū)動程序未能正確安裝,便不能正常工作。那么ADB又是什么東東?Android Debug Bridge,我們一般簡稱為adb,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設(shè)備進行交互。意思也就是說,ADB命令需要通過驅(qū)動程序提供的接口來控制硬件設(shè)備,因為我們的文件是存儲在硬件設(shè)備上的呀。

? ?那裝驅(qū)動要在什么狀態(tài)下安裝?廢話,肯定是開機狀態(tài)啦。當(dāng)然在安裝驅(qū)動前,要先開啟開發(fā)者模式的ADB調(diào)試,這里我就不說為什么了,自己想。

? ?那再下一步就是我們要用開發(fā)給的adb命令,導(dǎo)出/cache/recovery/這個文件夾的內(nèi)容?;蛟S有人會問,這開發(fā)不是已經(jīng)給了文件的路勁了嗎,直接在Pad上復(fù)制粘貼到SD卡又或者直接用PC從Pad復(fù)制粘貼到PC就可以了呀。對于這個,我只想說,廢話,這么簡單的,你會想不到嗎?你以為我是豬啊。然而我并不是豬,我是BUG基。

? ?對于上面那個想法,條件并不成立,當(dāng)我們連接Pad時,windows是屏蔽部分文件的,反正我這里是這個情況,而用Pad直接復(fù)制粘貼到SD卡也是不成立,當(dāng)我復(fù)制的時候,會提示“操作失敗,目標(biāo)無法復(fù)制”,至于為什么會出現(xiàn)這個提示,請往下看。

? ?既然上面兩個方法都不行,那我們就只有用adb命令了。

? ?在執(zhí)行操作之前,我們要先看移動設(shè)備是否跟PC連接,那么就需要用adb devices這個命令查看當(dāng)前連接的設(shè)備,這里可能返回的狀態(tài)有三種:

I.device設(shè)備已經(jīng)成功連接到了adb-server

II.offline設(shè)備并沒有連接到adb或者沒有響應(yīng)

III.no device并沒有設(shè)備/模擬器連接

? 這里說的三種狀態(tài)顯示的可能跟顯示情況不大一樣,譬如我連接是正常的,返回的是

或許有人知道這里的意思是什么,但是是否有想到過前面的那個daemon是什么呢?當(dāng)然有人會說,只要復(fù)制粘貼會用就可以了,對于這個回答,我默默表示不回答。

? 這個daemon還得要從ADB說起,ADB包含了以下三部分的cs模式的程序:

而在解釋上圖的意思之前,我想先引入兩個概念,那就是端口和通信(已理解的可以略過)。

端口

? ?計算機"端口"是英文port的譯義,可以認(rèn)為是計算機與外界通訊交流的出口。其中硬件領(lǐng)域的端口又稱接口,如:USB端口、串行端口等。軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。

? ? 端口最主要的作用就是通信和數(shù)據(jù)傳輸,把數(shù)據(jù)報順利的傳送到目的主機是沒有問題的。那么問題出在哪里呢?我們知道大多數(shù) 操作系統(tǒng) 都支持多程序(進程)同時運行,那么目的主機應(yīng)該把接收到的數(shù)據(jù)報傳送給眾多同時運行的進程中的哪一個呢?顯然這個問題有待解決,端口機制便由此被引入進來。

? ? 本地 操作系統(tǒng) 會給那些有需求的進程分配協(xié)議端口(protocal port,即我們常說的端口),每個協(xié)議端口由一個正整數(shù)標(biāo)識,如:80,139,445,等等。當(dāng)目的主機接收到數(shù)據(jù)報后,將根據(jù)報文首部的目的端口號,把數(shù)據(jù)發(fā)送到相應(yīng)端口,而與此端口相對應(yīng)的那個進程將會領(lǐng)取數(shù)據(jù)并等待下一組數(shù)據(jù)的到來。說到這里,端口的概念似乎仍然抽象,那么繼續(xù)跟我來,別走開。

? ? ?端口其實就是隊, 操作系統(tǒng) 為各個進程分配了不同的隊,數(shù)據(jù)報按照目的端口被推入相應(yīng)的隊中,等待被進程取用,在極特殊的情況下,這個隊也是有可能溢出的,不過操作系統(tǒng)允許各進程指定和調(diào)整自己的隊的大小。

通信

? ? 通信(Communication)就是信息的傳遞,是指由一地向另一地進行信息的傳輸與交換,其目的是傳輸消息。其實這里的通信,意思就是說用特定的邏輯信號,實現(xiàn)雙方的互相信息傳輸,譬如說在命令行輸入adb devices命令,意思就是說我想要對方輸出設(shè)備列表給我看,這里的輸入”adb devices”就是發(fā)送給對方的信號,而輸出的設(shè)備列表就是對方反饋回來的信號,這個整個過程就是通信的過程。

? 說了這么多,其目的就在于掃盲,下面我們來說上面提到的ADB三部分的cs模式的程序(我把上面的圖拉下來,防止大家看不到):

1) adb client

? 從圖中,我們知道client是運行在PC端的,每當(dāng)我們發(fā)起一個adb命令的時候,就會開啟一個client程序。當(dāng)然,當(dāng)我們開啟DDMS或者ADT的時候,也會自動創(chuàng)建client。

? 當(dāng)我們開啟一個client的時候,它首先會去檢測后臺是否已經(jīng)有一個server程序在運行著,否則會開啟一個adb-server進程。

? ?所有的client都是通過5037端口與adb-server進行通信的。

2 ) adb daemon ( adbd )

? ?從圖中,我們知道daemon是作為一個后臺進程運行在模擬器/真實Android設(shè)備中的。

? ?daemon使用端口的范圍是5554-5585,每個模擬器/設(shè)備連接到PC端時,總會開啟這么一個后臺進程,并且為其分配了兩個連續(xù)的端口,比如:

? Emulator 1,console: 5554

? Emulator 1, adb:5555

? 也正因為每個設(shè)備都分一組兩個端口,也已adb連接手機的最大數(shù)量為16。

? 說回端口的作用,在這兩個端口中,其中偶數(shù)端口是用于server與設(shè)備進行交互的,可以讓server直接從設(shè)備中讀取數(shù)據(jù),而奇數(shù)端口是用來與設(shè)備的adbd進行連接通信的。

3) adb server

? 從圖中,我們同樣可以知道,server也是作為一個后臺的程序運行在PC端的,他負(fù)責(zé)管理client進程以及adb daemon之間的通信。

? ?當(dāng)一個server開啟的時候,他會自動綁定并且監(jiān)聽5037端口,接收client通過該端口發(fā)送過來的命令。同時server還會對5555-5585間的奇數(shù)端口進行掃描,進行對已連接設(shè)備的定位。

? ?完成了上面一大堆吧啦吧啦的掃盲,大家應(yīng)該知道了圖1的意思了吧,那么我們就要解決問題了。

? 我們來看開發(fā)給我們的adb命令

?不知大家是否看到使用adb命令都要在前面輸入adb,譬如開發(fā)給的“adb pull /cache/recovery/ ./”這個命令就有adb在前面。那么為什么要在命令前面加上一個adb呢,原因在于如果我們不加adb,windows系統(tǒng)會默認(rèn)為對windows執(zhí)行命令,而不是通過ADB命令行工具對手機執(zhí)行操作命令。后面的“pull /cache/recovery/ ./”通過前面學(xué)習(xí)Linux命令結(jié)構(gòu)(linux命令結(jié)構(gòu)為command [options] [arguments...])大概可知道pull指的是命令動作,后面那兩個,指的其實就是參數(shù),/cache/recovery/指的是Pad設(shè)備的文件路徑,而./指的是當(dāng)前運行命令行的路勁,譬如下面的提到的C:\Users\301001958這個路徑。

? 好了,繼續(xù)回到我們的裝比之路,剛開始的時候,我不小心把” adb pull /cache/recovery/ ./ ”打成了“adb pull /cache/recovery/./”,也就是,我沒有把中間的空格打上,結(jié)果彈出了這樣的提示,啊,真是瞎了我的眼……

于是,我馬上改過來,修改成了“adb pull /cache/recovery/ ./”,結(jié)果還是彈出了一樣的提示。

我擦,這怎么辦怎么辦,難道真的要裝比不成,反遭雷劈?別急,我們先來看看這里提示的意思,這里的這個remote的意思是指的遠(yuǎn)端設(shè)備,在這指的就是Pad,而object '/cache/recovery/' does not exist的意思就是說Pad的/cache/recovery/這個文件夾對象不存在。

?這咋回事?。吭趺磿筒淮嬖谀??于是乎,我再進入Recovery mode查看,得到的結(jié)果如下:

我擦,這怎么回事?明明有這個文件夾的存在,于是我再次開機在命令行輸入adb -help,驗證一下這個adb命令的用法,結(jié)果吧啦吧啦的出現(xiàn)了一大坨黑色的字,看著都頭暈啊,不過還是讓我找到了想要的信息,如下圖:

看到了這里,我瞬間臉黑了,我靠,這完全就是跟我想的那樣沒錯嘛,怎么就說文件夾對象不存在呢。

? 于是我還是找上了大家最喜歡的——度娘。找了一番,找到了一個似乎有用的信息,如下圖:

正如上面所說,難道是因為沒有文件夾沒有讀寫權(quán)限?于是,我又輸入了adb remount,得出結(jié)果如下:

額,看到這里,我不想說話了,不過這里,已經(jīng)算是弄出了點端倪,大家應(yīng)該也知道了前面直接在Pad的系統(tǒng)里面復(fù)制提示無法復(fù)制了吧,最主要就是不夠權(quán)限的原因,因為一旦系統(tǒng)運行文件隨便被更改,系統(tǒng)就有可能出現(xiàn)運行錯誤或者崩潰。只是我竟天真的以為這里的root,指的是我們經(jīng)常用的那個一鍵root軟件,只要用軟件一鍵root了,就可以快樂的解決問題了,可想而知,得到的結(jié)果依然是像是碰到了蜜蜂窩一樣,被蟄著千瘡百孔啊,面目全非……這些什么鳥一鍵root軟件,根本就無法root得了我們這些開發(fā)中的Pad嘛,還試了一大堆都不行,至于為什么,暫時我沒有深究,大家有空可以去研究研究。

?到了這里,我只想說:蓋倫,請給我一把大寶劍……

?無奈,問題最終還是得要解決,于是我繼續(xù)再找度娘玩去了。

? 經(jīng)過了一番查找,我似乎終于找到了答案如何獲得root權(quán)限了,就是僅僅只需要用“adb root”這個命令就可以讓adb獲得root權(quán)限,二話不說,趕緊開干啊,輸入adb root,得出的結(jié)果是:adbd restart as root,我擦,藍(lán)瘦香菇,明明只需要幾個命令……就可以獲得root權(quán)限,我為什么能搞得那么復(fù)雜,我不行了,蓋倫,借你的大寶劍扶我起來……

? 但是似乎有一件很重要的事是,正因為我前面用了一鍵root軟件,我才能在adb命令使用root權(quán)限,前面的功夫也并不是全是無用功,來到這里,我們就只需執(zhí)行最后一步就是用開發(fā)給的命令,把文件拖出來,不過,我把開發(fā)給的最后一個參數(shù)改了,也就是“./”這個參數(shù),改成了我自己電腦桌面的一個文件夾路徑,如我在桌面起了個叫做FileLog的文件夾,如我FileLog的文件夾路徑為C:\Users\301001958\Desktop\FileLog,那么我執(zhí)行的就是adb pull /cache/recovery/ C:\Users\301001958\Desktop\FileLog,然后按Enter執(zhí)行命令,文件就巴拉拉的復(fù)制到了我的FileLog文件夾里面,到這里問題解決完畢。

? ?回顧整個過程,踩的坑著實不少,一個簡簡單單的命令,一個簡簡單單的操作,都能把自己搞死,不過在這整個過程里面,也是一個不斷擴展知識的過程,也是一個不斷挑戰(zhàn)自我的過程,到最后的解決,是滿心的舒暢。

? ?這整個過程里,給我最大的感悟是,樂于助人,助的有時候不僅僅是別人,助的也是自己,因為在這個過程中,我的知識獲得了拓展,獲得了成長,也獲得了成就感,獲得了興趣,用此文,希望能助正在踩坑的你,走出這個坑,不管是大坑還是小坑,又或者是神坑,在這個寫作分享的過程中,也讓我對整個知識面理解更全面更深了一步。

? ?文章寫得不是那么好,太長了點,請輕噴。

致正在踩坑的你我。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2017.02.26 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?By BUG基

什么是adb命令行?

ADB(Android Debug Bridge)是Android

提供的一個通用的調(diào)試工具,借助這個工具,我們可以很好的調(diào)試開發(fā)的程序,adb.exe在你安裝的android的sdk開發(fā)包platform-tools目錄下。

ADB是一個C/S架構(gòu)的應(yīng)用程序,由三部分組成:

1)adb client, 運行在PC上(為DDMS,即IDE工作)

2)adb daemon(守護進程),運行于Emulator(為與Emulator中的VM交互工作);

3)adb server(服務(wù)進程),運行在PC(任務(wù)管理器上有),管理著adb client和adb

daemon的通信。

server與client通信的端口是是5037,adb

server會與emulator交互的,使用的端口有兩個,一個是5554專門用于與Emulator實例的連接,那么數(shù)據(jù)可以從Emulator轉(zhuǎn)發(fā)給IDE控制臺了,另一個則是5555,專門與adb

daemon連接為后面調(diào)試使用。

adb使用方法:

adb [-d|-e|-s ]

當(dāng)你發(fā)出一個命令,系統(tǒng)啟用Android客戶端??蛻舳瞬⒉慌c模擬器實例相關(guān),所以如果雙服務(wù)器/設(shè)備是運行中的,你需要用-d選項去為應(yīng)被控制的命令確定目標(biāo)實例。關(guān)于使用這個選項的更多信息,可以查看模擬器/設(shè)備實例術(shù)語控制命令。

1、查詢模擬器/設(shè)備實例

在發(fā)布adb命令之前,有必要知道什么樣的模擬器/設(shè)備實例與adb服務(wù)器是相連的。可以通過使用 devices

命令來得到一系列相關(guān)聯(lián)的模擬器/設(shè)備

adbdevices

2、安裝應(yīng)用到模擬器/設(shè)備:

你可以使用adb從你的開發(fā)電腦上復(fù)制一個應(yīng)用程序,并且將其安裝在一個模擬器/設(shè)備實例。

像這樣做,使用install命令。這個install命令要求你必須指定你所要安裝的.apk文件的路徑:

adbinstall

例如:Weibo_4.1.1.apk是在我的C盤中,

C:\adbinstallweibo_4.1.1-apk

3、卸載應(yīng)用程序:

adbuninstall

注意:卸載軟件時,卸載的是包名,后面跟的是包的名字,而不是.APK.

4、從模擬器/設(shè)備中拷入或拷出文件:

可以使用adbpull、push命令將文件從模擬器/設(shè)備中拷貝出來或從電腦拷入。

adbpull

用pull命令可以把設(shè)備(手機)上的文件或者文件夾復(fù)制到本機電腦

adbpush

用push命令可以把本機電腦上的文件或者文件夾復(fù)制到設(shè)備(手機)

5、啟動Linux命令界面shell

adbshell

Android本來就是一個linux操作系統(tǒng),通過上面的命令,就可以進入設(shè)備或模擬器的shell環(huán)境中,所以大部分都是linux的命令,如mkdir,ls,netstat,mount

等。

主要介紹幾個Android特有的。

Getprop:返回Android的所有系統(tǒng)屬性。

Getevent:打印所有的鍵盤和觸摸事件

Logcat:輸出日志

LS:用于顯示目錄內(nèi)容

6、查看bug報告:

adb bugreport

7、記錄無線通訊日志:

一般來說,無線通訊的日志非常多,在運行時沒必要去記錄,但我們還是可以通過命令,設(shè)置記錄:

adb shell

logcat -b radio

8、獲取設(shè)備的ID和序列號:

adb get-product

adb get-serialno


當(dāng)前文章:adb命令行l(wèi)inux adb命令行怎么強制打開usb調(diào)試模式
本文地址:http://www.dlmjj.cn/article/dooiggj.html