USB ADB 簡介

概念

  • ADB 是 Android 平臺的 調試橋接協議,允許主機(PC)與 Android 設備通信。

  • 通過 ADB,開發者可以執行命令、調試應用、傳輸文件、訪問 shell、調試 logcat 等。

  • ADB 運行在 USB 或 TCP/IP 上,但最常用的是 USB 連接。


USB 層實現

  • USB 模式:ADB 依賴 USB CDC 或自定義 USB Interface(Android Device Class)實現。

  • 端點類型:通常使用 Bulk IN / Bulk OUT 端點傳輸數據。

    • Bulk OUT:主機發送數據到設備

    • Bulk IN:設備發送數據到主機

  • USB 描述符:ADB 設備在 USB 枚舉階段提供自定義接口描述符,標識它支持 ADB 服務。


ADB 協議層

ADB 協議主要由 四種消息類型組成,每條消息長度固定(24 字節 header + 可選 payload):

  • CNXN(Connect)

    • 建立 ADB 連接,初始化主機和設備之間的會話。

  • AUTH(Authentication)

    • 認證主機和設備,確保安全通信。

    • 使用 RSA 公鑰進行簽名驗證。

  • OPEN / OKAY / CLSE(Channel Management)

    • 管理邏輯通道,每個應用或服務可使用不同 channel ID。

    • OPEN:打開新 channel

    • OKAY:確認 channel 已打開或接收數據

    • CLSE:關閉 channel

  • WRTE(Write Data)

    • 用于在 channel 上傳輸實際數據。

    • 設備或主機將數據寫入 channel 對應緩沖區,并等待 OKAY 確認。


數據傳輸流程

  • USB 枚舉:設備連接 PC,枚舉 USB 設備,識別 ADB 接口。

  • 連接建立:主機發送 CNXN 消息,設備響應 CNXN。

  • 認證:如果需要,設備發送 AUTH 消息進行公鑰認證。

  • 通道管理:主機請求打開 channel(OPEN),設備返回 OKAY。

  • 數據傳輸:主機或設備通過 WRTE 發送數據,接收方返回 OKAY 確認。

  • 通道關閉:數據傳輸完成后發送 CLSE 關閉 channel。


ADB 特點

  • 多路復用:ADB 支持多個 channel 并行傳輸(例如 shell、文件傳輸、調試端口)。

  • 可靠傳輸:通過 ACK/OKAY 確保數據可靠送達。

  • 基于 USB Bulk 傳輸:確保大數據量傳輸穩定。

  • 安全機制:通過 RSA 公鑰認證防止未授權主機訪問設備。


應用場景

  • 調試應用(adb logcat, adb shell)

  • 文件傳輸(adb push / pull)

  • 遠程安裝 APK(adb install)

  • Bootloader 或 Recovery 模式調試

  • 跨平臺開發和設備自動化測試

當你啟動某個 adb 客戶端時,該客戶端會先檢查是否有 adb 服務器進程正在運行,如果沒有,它會先啟動服務器進程,服務器在啟動后會與本地 TCP 端口 5037 綁定,并監聽 adb 客戶端發出的命令(所有 adb 客戶端均通過端口 5037 與 adb 服務器通信)

然后,服務器會與所有正在運行的設備建立連接,它通過掃描 5555 到 5585 之間(該范圍供前 16 個模擬器使用)的奇數號端口查找模擬器,服務器一旦發現 adb 守護程序 (adbd),便會與相應的端口建立連接,請注意,每個模擬器都使用一對按順序排列的端口(用于控制臺連接的偶數號端口和用于 adb 連接的奇數號端口)例如

模擬器 1,控制臺:5554

模擬器 1,adb:5555

模擬器 2,控制臺:5556

模擬器 2,adb:5557

依此類推

  • 我們通過Android Studio工具或者命令行界面直接或間接的調用某個adb命令,比如adb install或者adb devices

  • 這時候adb進程會fork出一個子進程作為adb server,而這個fork出的進程將常駐PC端,監聽來自Client端的請求

  • adb server查找當前連接的真機或者模擬器,并接收來自Client端發出的請求

  • adb server處理請求:如果是本地能直接處理的請求比如:adb devices就直接處理,如果是本地處理不了的請求就會轉發給連接的真機或者模擬器來進行處理,可以通過數據線和TCP/IP的方式通信

  • 位于真機或者模擬器后臺的adbd進程接收到請求后,通過JDWP協議轉發給對應的Java虛擬機進程處理

  • adbd將處理后的結果返回給adb server

  • adb server再將結果返回給Client,這時候我們就在命令行界面中看到展示結果了

基本使用方法

  • 安裝ADB:在電腦上安裝Android SDK,其中包含了ADB工具。確保將其添加到系統環境變量中,以便在命令行中直接訪問。

  • 連接設備:通過USB將Android設備連接到電腦。確保設備開啟了開發者選項和USB調試模式。

  • 識別設備:在命令行中輸入adb devices,如果設備正確連接,會顯示設備的序列號。

  • 安裝應用:使用adb install <應用路徑>命令,可以安裝應用到設備上。

  • 查看日志:通過adb logcat命令,可以查看設備的日志信息。

  • 無線連接:通過adb tcpip 5555命令,可以將設備從USB模式切換到無線模式,通過TCP/IP進行連接。之后可以使用adb connect <設備IP>進行連接。

  • 安裝APK:除了從本地文件系統安裝APK,還可以從網絡下載并安裝APK。使用adb shell wget <APK URL>命令即可。

  • 清除應用數據:使用adb uninstall <應用包名>命令可以卸載應用,但如果你想保留應用及其數據,可以使用adb uninstall -k <應用包名>命令。

  • 截屏和錄屏:使用adb shell screencap <截圖路徑>可以截取設備的屏幕,而adb shell screenrecord <錄屏路徑>則可以錄制屏幕。

  • 管理權限:使用adb shell pm grant <應用包名> <權限名稱>可以為應用添加權限,使用adb shell pm revoke <應用包名> <權限名稱>則可以移除權限。

  • 模擬按鍵事件:使用adb shell input keyevent <鍵值>可以模擬按鍵事件,如模擬按下Home鍵、電源鍵等。

  • 文件管理:使用adb pull <設備路徑>可以從設備上拉取文件,使用adb push <源路徑> <目標路徑>則可以將文件推送到設備上

  • 調試服務:使用adb shell service list可以查看設備上可用的服務列表,使用adb shell service <服務名稱> <操作>可以對服務進行操作。

  • 安裝測試腳本:可以使用adb shell sh <腳本路徑>來運行存儲在設備上的腳本文件。

  • 查看電池狀態:使用adb shell dumpsys batterystats可以查看電池的詳細使用情況。 四、常見問題與解決方案

  • 設備未正確連接:檢查USB連接是否穩定,重新插拔USB線或更換USB端口嘗試。確保設備開啟了開發者選項和USB調試模式。

  • ADB未識別設備:嘗試重啟ADB服務,或在命令行中輸入adb kill-server后再次嘗試連接設備。確保驅動程序已正確安裝。

  • 應用安裝失敗:檢查APK文件是否完整無損,嘗試使用不同的APK安裝工具或重新下載APK文件。

  • 日志輸出異常:檢查日志輸出是否被其他程序干擾,或嘗試重啟設備和電腦后再查看日志。

  • 無線連接問題:確保設備已開啟無線調試功能,并正確輸入驗證碼進行連接。

  • 權限問題:檢查應用的權限是否正確配置,或嘗試使用root權限執行相關操作。

  • 其他問題:查看ADB的錯誤提示信息,根據提示查找解決方案或查閱相關文檔和論壇獲取幫助。 總結:ADB是一個強大且靈活的工具,通過掌握其基本原理和使用方法,開發者可以更高效地進行Android開發與調試。通過不斷實踐和探索高級技巧,可以更好地應對各種復雜的問題和需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95595.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Golang】:數據類型

目錄 1. 基本數據類型 1.1 布爾類型 1.2 整數類型 1.3 浮點數類型 1.4 復數類型 1.5 字符類型 1.6 字符串類型 2. 類型轉換 2.1 基本數據類型 → string 2.2 string → 基本數據類型 3. 常量 1. 基本數據類型 1.1 布爾類型 Go中的布爾類型取值為true或false&#…

旋鈕鍵盤項目---foc講解(開環)

這里就不過多的講解什么原理&#xff0c;公式的變換了&#xff0c;感興趣的可以看燈哥開源&#xff0c;講解的非常好的。當然&#xff0c;更細致的講解&#xff0c;也可以看b站其他教學。 我這里主要講解我對于開環部分的理解&#xff0c;以及stm32代碼的實現邏輯。可以看作是…

數據科學與計算:爬蟲和數據分析案例筆記

案例 1&#xff1a;中國大學排名爬取與分析 一、任務描述 目標&#xff1a;爬取高三網中國大學排名一覽表&#xff0c;提取學校名稱、總分、全國排名、星級排名、辦學層級等數據&#xff0c;并保存為 CSV 文件。 網址&#xff1a;2021中國的大學排名一覽表_高三網 二、任務…

華測科技的3D GPR數據分析

很高興得到了張總的支持&#xff0c;獲得了他們雷達的數據&#xff0c;并寫了雷達數據讀取和轉換文件。1 背景搜索后發現華測實力很強&#xff0c;因為他們可達到100km/h的時速&#xff0c;以前我只知道中電眾益可以達到這個速度。2數據格式分析2.1 華測數據因為長時間不編程&a…

最長鏈(二叉樹直徑DFS)

題目描述現給出一棵N個結點二叉樹&#xff0c;問這棵二叉樹中最長鏈的長度為多少&#xff0c;保證了1號結點為二叉樹的根。輸入第1行為包含了一個正整數N&#xff0c;為這棵二叉樹的結點數&#xff0c;結點標號由1至N。 接下來N行&#xff0c;這N行中的第i行包含兩個正整數l[i]…

802.11 Wi-Fi 競爭機制深度分析:CSMA/CA 與 DCF

802.11 Wi-Fi 競爭機制深度分析&#xff1a;CSMA/CA 與 DCF 一、核心機制&#xff1a;CSMA/CA&#xff08;載波偵聽多路訪問/沖突避免&#xff09; 傳統以太網使用 CSMA/CD&#xff08;沖突檢測&#xff09;&#xff0c;但無線環境中無法實現沖突檢測&#xff0c;因此802.11采用…

【Go語言-Day 36】構建專業命令行工具:`flag` 包入門與實戰

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

C語言——深入理解指針(四)

C語言——深入理解指針&#xff08;四&#xff09; 數組名的意義sizeof&#xff08;數組名&#xff09;&#xff0c;且數組名單獨放在sizeof內部&#xff0c;則這里的數組名表示整個數組&#xff0c;計算的是整個數組的大小&數組名&#xff0c;這里的數組名表示的是整個數組…

LeetCode 刷題【42. 接雨水】

42. 接雨水 自己做 解&#xff1a;雙指針左右分割容器 class Solution { public:int trap(vector<int>& height) {int res 0;int len height.size();if(len < 2) //構不成一個容器了&#xff0c;直接返回return res;int end len - 1; //右邊界int…

網絡的基本概念、通信原理以及網絡安全問題

目錄 1、 什么是網絡&#xff1f; &#xff08;1&#xff09;網絡的概念與本質 &#xff08;2&#xff09;電壓信號的合并與抵消 &#xff08;3&#xff09;電壓的本質 2、中轉設備 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;中轉設備的處理能力與編程能…

Windows下使用WSL2創建Ubuntu子系統(更改安裝位置與啟動圖形桌面)

Windows下使用WSL2創建Ubuntu子系統&#xff08;更改安裝位置與啟動圖形桌面&#xff09; 本文介紹如何使用WSL2創建Ubuntu子系統&#xff0c;并更改安裝位置到其他磁盤&#xff0c;并啟動圖形桌面Xfce4。 WSL 版本: 2.5.7.0 系統版本: Windows11 23H2 相關工具&#xff1a;Mo…

時間泄漏 TemporalLeakage

時間泄漏 TemporalLeakage: 就是后續有事件發生&#xff0c;然后才有了這個結果&#xff0c;但是在該事件發生之前&#xff0c;不應該預測該結果。 Temporal Leakage 問題是往往導致縱向Planning不“果斷”。 解決方案&#xff1a;人工標注出時間發生的時刻 真值只監督時間發生…

獨立書店數字化轉型:絕版書修復檔案系統與讀者閱讀行為分析營銷平臺

在電商沖擊與閱讀習慣變遷的雙重壓力下&#xff0c;獨立書店正遭遇 “舊書修復難、新書賣不動” 的生存困境。傳統模式中&#xff0c;絕版書修復依賴老師傅經驗&#xff0c;單本修復周期長達 2 周&#xff0c;損耗率超 30%&#xff1b;營銷缺乏數據支撐&#xff0c;導致客流年均…

const修飾指針用法詳解

目錄 一、const修飾變量 繞過const限制的問題 二、const修飾指針變量 1、無const修飾的指針 2、const放在*左邊 3、const放在*右邊 4、*兩邊都有const 三、使用建議 四、記憶技巧 一、const修飾變量 在C語言中&#xff0c;變量默認是可修改的。如果我們希望某個變量不能…

pcl法線估計的踩坑

1&#xff0c;normalestimation對點云法線的評估&#xff0c;只輸出法線向量&#xff0c;并不輸出xyz值。如果輸出類型是pointnormal&#xff0c;那么這點云的法向量有值&#xff0c;xyz值都是02&#xff0c;添加點云xyz數據。可以使用 pcl::concatenatefields(*a,*b,*c)函數p…

利用Minicsv庫解析csv文件的c程序及讀入測試

上午的c程序寫入xlsx較快但不正確&#xff0c;python程序雖正確但過慢。所以找了一個全部源程序加起來不到4K字節的C語言csv解析庫Minicsv&#xff0c;來改寫&#xff0c;改寫結果如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h…

企微用戶部門同步HRS系統

企微用戶導入HR系統流程說明 概述 本文檔詳細說明了WechatUserImportServiceImpl.importWechatUsersToHrs()方法的業務流程和實現邏輯。該方法負責將企業微信用戶數據同步導入到HR管理系統中&#xff0c;包括員工信息、工作信息和任職記錄的創建與更新。 主要功能 數據同步…

告別傳統SEO!擁抱下一代流量密碼:生成式引擎優化(GEO)實戰指南

前言&#xff1a;為什么你的“最佳實踐”SEO正在失效&#xff1f;你是否發現&#xff0c;即使嚴格遵循了谷歌自2019年以來的所有“最佳實踐”&#xff0c;你的技術博客或產品文檔的流量依舊增長乏力&#xff0c;甚至不升反降&#xff1f;你不是一個人。問題在于&#xff0c;游戲…

week1-[一維數組]傳送

week1-[一維數組]傳送 題目描述 有 nnn 個傳送門&#xff0c;從第 iii 個傳送門進去后會被傳送到第 aia_iai? 個傳送門&#xff0c;進而被傳送到第 aaia_{a_i}aai?? 個傳送門&#xff0c;如此一直下去……小 A 想知道從第 kkk 個傳送門進去后&#xff0c;能不能回到第 kkk 個…

【18】目心智能——目心智能 嵌入式一面 ,校招,面試問答記錄

目心智能——目心智能 嵌入式一面 &#xff0c;校招&#xff0c;面試問答記錄 1 簡單自我介紹2 你做了這么多算法&#xff0c;為什么不找算法的&#xff1f;3 我們主要還是軟件開發&#xff0c;不做結構設計4 模電知識6 CSDN應該附鏈接在簡歷上&#xff0c;稍后發給我&#xff…