真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux命令adbd 創(chuàng)建文件夾Linux命令

ADB常用命令

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

目前成都創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、夏縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

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

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

守護(hù)程序 (adbd): 用于在設(shè)備上運(yùn)行命令。守護(hù)程序在每個(gè)設(shè)備上作為后臺(tái)進(jìn)程運(yùn)行

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

adb nodaemon server

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

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

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

通常只有一臺(tái)設(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ù)

啟動(dòng) adb 服務(wù)

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

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

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

打印日志后重定向到一個(gè)文件中

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

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

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

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

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

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

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

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

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

獲取連接到的手機(jī)的序列號(hào)

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

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

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

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

Android的內(nèi)核本身就是Linux,所以Android本身也支持Linux命令,但是因?yàn)槭鞘謾C(jī)系統(tǒng),所以進(jìn)行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個(gè)軟件進(jìn)行。

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

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

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

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

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

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

同時(shí)我們?cè)谑謾C(jī)上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)不見了

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

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

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

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

查看一個(gè)apk所在的路徑

adb shell pm path com.UCMobile

查看手機(jī)中裝的所有的包

屏幕開始錄像并且儲(chǔ)存到/sdcard中,同時(shí)名字為demo.mp4

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

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

解決方法:

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

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

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

-N:不在PC端展示

-r:錄制mp4/mkv文件

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

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

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的界面都是由一個(gè)個(gè)activity顯示的)

啟動(dòng)一個(gè)Activity

獲取到package和launch_activity

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

這里涉及到一個(gè)點(diǎn),如何找到程序的入口,首先你要知道是哪個(gè)activity才能啟動(dòng);

啟動(dòng)華為系統(tǒng)相機(jī)

打開音樂播放器

播放指定音樂:

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

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

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

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

input

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

返回主界面

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

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

長(zhǎng)按操作,在?100 100?位置長(zhǎng)按?1000毫秒

linux下關(guān)于adb命令的一些知識(shí)

Android Debug Bridge,一般簡(jiǎn)稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個(gè)非常強(qiáng)大的命令行工具,通過這個(gè)工具你能夠與你的android設(shè)備進(jìn)行交互。同時(shí)這是一個(gè)包含了以下三部分的cs模式的程序:

1) adb client

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

當(dāng)我們開啟一個(gè)client的時(shí)候,它首先會(huì)去檢測(cè)后臺(tái)是否已經(jīng)有一個(gè)server程序在運(yùn)行著,否則會(huì)開啟一個(gè)adb-server進(jìn)程。

所有的client都是通過5037端口與adb-server進(jìn)行通信的。

2)adb daemon(adbd)

從圖中,我們知道daemon是作為一個(gè)后臺(tái)進(jìn)程運(yùn)行在模擬器/真實(shí)Android設(shè)備中的。

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

Emulator 1, console: 5554

Emulator 1, adb: 5555

也正因?yàn)槊總€(gè)設(shè)備都分一組兩個(gè)端口,也已a(bǔ)db連接手機(jī)的最大數(shù)量為16。

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

2) adb server

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

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

1.2 常用的adb命令

首先我們先來介紹一下,adb命令的使用格式吧:

adb [-d|-e|-s ]

adb是必須的,接下來方括號(hào)[]里面的內(nèi)容不是必須的,最后才是我們需要執(zhí)行的命令操作,例如 adb -s emulator-5554 install UCBrowser.apk (這是安裝UC瀏覽器的意思)

下面先介紹下,前面幾個(gè)參數(shù)的含義吧:

-d: 讓唯一連接到該P(yáng)C端的真實(shí)安卓設(shè)備執(zhí)行命令,如果發(fā)現(xiàn)USB中連接有多部設(shè)備,將會(huì)報(bào)錯(cuò)

-e: 讓唯一連接到該P(yáng)C端的模擬器執(zhí)行命令,如果發(fā)現(xiàn)開啟了多個(gè)模擬器,將會(huì)報(bào)錯(cuò)

-s:通過設(shè)備的序列號(hào)進(jìn)行指定設(shè)備執(zhí)行命令

如果設(shè)備只連接有一個(gè)設(shè)備或者一個(gè)模擬器的時(shí)候,可以不用聲明這三個(gè)參數(shù),adb默認(rèn)會(huì)讓這部唯一連接到的設(shè)備進(jìn)行命令執(zhí)行。

ok,下面開始講解常用的命令吧:

1) 查看當(dāng)前PC端連接有多少設(shè)備:

adb devices

終端中的執(zhí)行結(jié)果為:

從上圖中,我們看到了設(shè)備有的兩種狀態(tài),其實(shí)執(zhí)行該命令,可能返回的狀態(tài)有三種:

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

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

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

2) 查看adb的版本

adb version

終端中的執(zhí)行結(jié)果為:

3) 給設(shè)備進(jìn)行軟件的安裝

adb -s install

eg:

adb -s 99eb07a9 install D://Test.apk

終端中的執(zhí)行結(jié)果為:

除了上面這種方法,我們還有另外一個(gè)命令:

adb -s shell pm install [options]

其中[options]中最常用的選項(xiàng)是-r,代表著本次安裝是重新安裝,會(huì)保留用戶數(shù)據(jù)。

4) 卸載設(shè)備中已經(jīng)安裝的軟件

adb -s uninstall

eg:

adb -s 99eb07a9 uninstall cn.uc.test

終端中的執(zhí)行結(jié)果為:

除了上面這種方法,我們還有另外一個(gè)命令:

adb -s uninstall [options]

這里的options是-k,加上該參數(shù)表明卸載軟件后依舊保留用戶數(shù)據(jù)

5) 將數(shù)據(jù)從設(shè)備復(fù)制到PC中

adb -s pull

eg:

adb -s 99eb07a9 pull /sdcard/stericson-ls D://

終端的執(zhí)行結(jié)果:

在D://盤中我們也可以發(fā)現(xiàn)stericson-ls文件

6) 講數(shù)據(jù)從PC端復(fù)制到設(shè)備中

adb -s push

eg:

adb -s 99eb07a9 push d://stericson-ls /sdcard/

終端的執(zhí)行結(jié)果:

7) 獲取連接到的手機(jī)的序列號(hào)

adb get-serialno

終端的執(zhí)行結(jié)果:

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

adb -s get-state

eg:

adb -s 99eb07a9 get-stat

終端的執(zhí)行結(jié)果:

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

adb wait-for-device

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

10) adb-server 的開啟與關(guān)閉

adb kill-server

adb start-server

終端的執(zhí)行結(jié)果:

有時(shí)候我們開啟server會(huì)失敗,這是因?yàn)槲覀冄b了的手機(jī)助手,豌豆莢或者其他軟件自帶有自己的adb,導(dǎo)致端口沖突開啟失敗。主要關(guān)掉那些軟件并且殺掉那些軟件自帶的adb進(jìn)程重來即可。

1.2 手機(jī)執(zhí)行Shell命令

眾所周知,Android的內(nèi)核本身就是Linux,所以Android本身也支持Linux命令,但是因?yàn)槭鞘謾C(jī)系統(tǒng),所以進(jìn)行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個(gè)軟件進(jìn)行

填補(bǔ)。

下面我們講解下如何在手機(jī)中執(zhí)行Shell命令:

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

adb shell

2) 先通過adb shell進(jìn)入手機(jī)Shell執(zhí)行狀態(tài),然后直接輸入Linux命令,如圖:

1.3 Activity Manager 常用命令與參數(shù)說明

一般情況下,我們最常用它來進(jìn)行app的開啟,并且傳遞一定的參數(shù)過去,比如:

adb shell am start -a android.intent.action.VIEW -n cn.uc.test/.MainActivity -d

在這里就不做太過詳細(xì)和重復(fù)的說明了

1.4 Package Manager 常用命令與參數(shù)說明

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

disable

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

eg:

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

終端執(zhí)行結(jié)果:

同時(shí)我們?cè)谑謾C(jī)上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)不見了

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

enable

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

eg:

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

終端執(zhí)行結(jié)果:

同時(shí)我們從手機(jī)上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)又回來啦。

3) 查看一個(gè)apk所在的路徑

pm path

eg:

adb shell pm path com.UCMobile

終端執(zhí)行結(jié)果:

4) 查看手機(jī)中裝的所有的包

pm list packages

再次不做過多的說明

1.5其他常用的adb命令

1) 屏幕錄像

例如,屏幕開始錄像并且儲(chǔ)存到/sdcard中,同時(shí)名字為demo.mp4

adb shell screenrecord /sdcard/demo.mp4

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

adb shell stop

adb shell start

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

adb reboot

adb shutdown

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

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

作為一只BUG基,我怎么可能會(huì)放過這個(gè)裝比的機(jī)會(huì)呢,哈哈。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

端口

? ?計(jì)算機(jī)"端口"是英文port的譯義,可以認(rèn)為是計(jì)算機(jī)與外界通訊交流的出口。其中硬件領(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ù)報(bào)順利的傳送到目的主機(jī)是沒有問題的。那么問題出在哪里呢?我們知道大多數(shù) 操作系統(tǒng) 都支持多程序(進(jìn)程)同時(shí)運(yùn)行,那么目的主機(jī)應(yīng)該把接收到的數(shù)據(jù)報(bào)傳送給眾多同時(shí)運(yùn)行的進(jìn)程中的哪一個(gè)呢?顯然這個(gè)問題有待解決,端口機(jī)制便由此被引入進(jìn)來。

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

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

通信

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

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

1) adb client

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

? 當(dāng)我們開啟一個(gè)client的時(shí)候,它首先會(huì)去檢測(cè)后臺(tái)是否已經(jīng)有一個(gè)server程序在運(yùn)行著,否則會(huì)開啟一個(gè)adb-server進(jìn)程。

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

2 ) adb daemon ( adbd )

? ?從圖中,我們知道daemon是作為一個(gè)后臺(tái)進(jìn)程運(yùn)行在模擬器/真實(shí)Android設(shè)備中的。

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

? Emulator 1,console: 5554

? Emulator 1, adb:5555

? 也正因?yàn)槊總€(gè)設(shè)備都分一組兩個(gè)端口,也已a(bǔ)db連接手機(jī)的最大數(shù)量為16。

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

3) adb server

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

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

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

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

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

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

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

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

?這咋回事啊?怎么會(huì)就不存在呢?于是乎,我再進(jìn)入Recovery mode查看,得到的結(jié)果如下:

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

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

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

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

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

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

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

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

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

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

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

? ?文章寫得不是那么好,太長(zhǎng)了點(diǎn),請(qǐng)輕噴。

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

linux系統(tǒng)怎么啟動(dòng)adbd

和普通開機(jī)一樣啊,打開電源,如果有操作系統(tǒng)選擇菜單就選Linux,然后等待啟動(dòng)完畢,有密碼就輸密碼,就完事了


當(dāng)前標(biāo)題:linux命令adbd 創(chuàng)建文件夾Linux命令
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/doiocdp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部