編輯:關於Android編程
在之前的文章中有轉帖網上同行制作的ADB協議表格<>,但不夠詳盡,所以這裡自己另外基於Android 4.4.2的技術文檔重新做一次翻譯。
向ADB服務器請求其內部版本號。作為一個協議中的例外(請查看OVERVIEW.txt來查看ADB具體協議規則),服務器會返回一個代表其內部版本號的4字節的十六進制字符串,而不會像標准協議中會返回OKAY或者FAIL
這兩個服務請求是類似的,都是請求ADB服務器返回一系列有效的安卓設備以及對應的狀態信息,只是devices -l會在狀態信息中包含該設備更多的信息,比如產品型號等。在正常返回OKAY之後,會緊跟著一個代表數據長度的4字節長的十六進制數,以及對應的如我們通過命令adb devices -l命令能看到的輸出,然後連接請求就會關閉。
這個服務是以上的host:devices的一個變種,客戶端和ADB服務器的連接會一致保持,當有增加/移除設備或者設備狀態改變的時候會主動的往連接上的客戶端發送新的設備列表信息(4字節16進制長度+內容)。這樣做的話就可以允許DDMS這些工具來實時跟蹤所有連接上來的設備的狀態,而不需要客戶端每次都去連接ADB服務器獲取對應信息。
這是一個特殊的請求,當一個新的模擬器啟動的時候這個請求將會發送到ADB服務器。
請求ADB服務器切換當前連接到
請求ADB服務器切換當前連接到通過USB連接到主機的設備。如果多於一個設備通過USB連接到主機,調用將會失敗。(用來實現ADB命令行客戶端的-d這個方便使用的選項)
請求ADB服務器切換當前連接到一個通過TCP協議連接上來的模擬器。如果多於一個模擬器在運行的話,調用將會失敗。(用來實現-e這個方便使用的選項)
另外一個host:transport的變種。請求ADB服務器切換當前連接到已經連接上主機的設備或者正在主機中運行的中模擬器。如果有多於一個這類設備存在,調用將會失敗。(在-s,-d或-e選項都沒有提供的時候使用)
這是一個特殊的請求,前綴"host-serial:
host-serial的一個變種,指定的是一個連接上主機的USB設備。如果沒有或者有多於一個這種設備的話調用將會失敗。
另一個host-serial的變種,這次指定的是一個在主機運行的模擬器。如果沒有或者有多於一個這種設備的話調用將會失敗。相當於直接執行" adb get-product"或者“adb get-serilano"等
當通過ADB服務器向一個相關設備請求信息的時候,'host:' 在這種情況下也可以指‘任意一個連接上主機的的設備或者正在主機上運行的模擬器'。
作官方就提供了上面的XXX,沒有更多的信息。本人在嘗試"adb get-product"時發現並沒有支持。
返回對應的設備/模擬器的序列號。"
返回對應設備/模擬器的設備路徑,這裡的設備路徑指的是"adb device -l"列出的最後一部分,如"device product:OPPO_12025 model:X909 device:X909"。 "
返回一個代表指定設備狀態的字串,"
the format of
其中
甚至還支持下面描述的任一個本地服務
Same as
類似
移除所有 Remove all forward network connections. This is used to implement 'adb forward --remove-all'. 移除所有的重定向連接。用來實現"adb forward --remove-all"命令 列出本機所有存在的轉發連接。返回格式如下: Used to implement 'adb forward --list'. 這是用來實現"adb forward --list"命令的。 下面的所有請求是建立在你已經把傳輸切換到一個真實設備上,或者你使用了以上描述的一個query前綴的服務請求 在設備的shell中運行'command arg1 arg2 ...',並且返回對應輸出和錯誤流。 Note that arguments must be separated by spaces. If an argument contains a space, it must be quoted with double-quotes. Arguments cannot contain double quotes or things will go very wrong. 注意參數必須空格隔開。如果一個參數本身包含空格,那麼它必須要用雙引號引起來。參數內部不能包含雙引號,否則命令執行結果將無法控制。 Note that this is the non-interactive version of "adb shell" 注意這是"adb shell"的一個非交互式版本 Start an interactive shell session on the device. Redirect stdin/stdout/stderr as appropriate. 開啟設備的一個交互shell會話。合理的重定向了標准輸入/標准輸出/標注錯誤。 Note that the ADB server uses this to implement "adb shell", but will also cook the input before sending it to the device (see interactive_shell() in commandline.c) 注意ADB服務器就是使用這個協議來實現命令行客戶端的"adb shell"請求的,但當然它會先包裝整理好輸入的信息再發送到目標設備(請查看commandline.c的interactive_shell()) 請求adbd去重新把設備只讀文件系統掛載成可讀寫模式的文件系統。這個在執行"adb sync"或者"adb push"請求之前通常是很有必要先執行的。這個請求在一些版本中也許因為不支持而會失敗 Opens a device file and connects the client directly to it for read/write purposes. Useful for debugging, but may require special privileges and thus may not run on all devices. 打開一個設備文件並通過客戶端連接上該設備來進行讀寫操作。通常這是用來調試用的,但可能不可以在所有設備上運行,因為它需要特殊的權限才能執行。 嘗試連接上本機的tcp端口 嘗試連接上 嘗試連接上設備上的 local: 打開/dev/log/ 這個服務是用來把framebuffer的截屏快照發送到客戶端的。它需要足夠的權限,且工作原理如下: 服務在返回OKAY之後會繼續發送16字節的二進制結構數據的以下內容到客戶端(小字節序格式) 在當前的實現中,寬度永遠是16,大小用永遠是寬度*高度*2 Then, each time the client wants a snapshot, it should send one byte through the channel, which will trigger the service to send it 'size' bytes of framebuffer data. If the adbd daemon doesn't have sufficient privileges
to open the framebuffer device, the connection is simply closed immediately. 每次客戶端想要一個截屏快照時,它將會通過Socket通道發送一個字節,這會觸發本服務去把framebuffer數據按其大小指定的字節數發送給客戶端。如果adbd守護進程沒有足夠的權限打開framebuffer設備,那麼連接會立即關閉。 連接目標設備中由進程號 這個服務是用來周期性的往客戶端發送有啟用JDWP的進程的進程號列表。 The format of the returned data is the following: 返回數據格式如下: 這個服務被DDMS用來知悉有哪些可調式的進程正在真實設備/模擬器上運行。 Note that there is no single-shot service to retrieve the list only once. 注意並不存在另外一個服務來只獲取一次這個列表。 開啟文件同步服務,用來實現"adb push"和" adb pull" 這兩個命令。因為這個服務相當復雜,更詳細的信息請查看相關的SYNC.TXT文檔。
Item Description Warning Author 天地會珠海分舵 轉載請注明出處! Blog Address http://blog.csdn.net/zhubaitian
List all existing forward connections from this server. This returns something that looks like the following:
LOCAL SERVICES:
本地服務:
All the queries below assumed that you already switched the transport to a real device, or that you have used a query prefix as described above.
shell:command arg1 arg2 ...
Run 'command arg1 arg2 ...' in a shell on the device, and return its output and error streams.
shell:
remount:
Ask adbd to remount the device's filesystem in read-write mode, instead of read-only. This is usually necessary before performing an "adb sync" or "adb push" request.
This request may not succeed on certain builds which do not allow that.
dev:
tcp:
Tries to connect to tcp port
tcp:
Tries to connect to tcp port
local:
Tries to connect to a Unix domain socket
localreserved:
Variants of local:
localabstract:
localfilesystem:
log:
Opens one of the system logs (/dev/log/
framebuffer:
This service is used to send snapshots of the framebuffer to a client. It requires sufficient privileges but works as follow: After the OKAY, the service sends 16-byte binary structure containing the following fields
(little-endian format):
height: uint32_t: framebuffer height in pixelsheight: uint32_t: framebuffer 高度(像素)
With the current implementation, depth is always 16, and size is always width*height*2
jdwp:
Connects to the JDWP thread running in the VM of process track-jdwp
This is used to send the list of JDWP pids periodically to the client.
sync:
This starts the file synchronisation service, used to implement "adb push" and "adb pull". Since this service is pretty complex, it will be detailed in a companion document named SYNC.TXT
最近要做一個輪播圖的效果,網上看了幾篇文章,基本上都能找到實現,效果還挺不錯,但是在寫的時候感覺每次都要單獨去重新在Activity裡寫一堆代碼。於是自己封裝了一下。本篇
我們一般直接從攝像頭和麥克風取數據,經過編碼,保存為文件。android的視頻錄制需要使用到MediaRecorder,MediaRecorder除了可以用於錄制音頻,還
0x00我們首先講一個webView這個方法的作用:webView.getSettings().setAllowFileAccessFromFileURLs(false)
1、測試Maven工程1.1、創建歡迎頁在webapp下創建一個index.jsp的歡迎頁index.jsp: <%@ page language=&qu