當前位置:
首頁 > 最新 > adb使用技巧和usb通信原理探索

adb使用技巧和usb通信原理探索

一、adb使用的技巧

1. 查詢當前展示的Activity

adb shell dumpsys activity top | head -n 10

dumpactivity

2. 備份和還原所有安裝的apk

找出設備上安裝的第三方apk包名: adb shell pm list packages -3

依據apk包名找出apk: adb shell pm path $pkg

導出apk文件: adb shell pull $path

把導出的apk文件安裝到新設備里: adb install -r $file

腳本:

疑惑, 第7行通過包名查詢apk安裝路徑時, 在命令最後添加一個&字元, 不添加無法正常找出所有apk路徑, 不知道什麼原由。

3. adb調試wifi模式和usb模式切換

手機端(root)

安裝terminal

stop adbd

start adbd

電腦上切換wifi

切wifi: adb tcpip 5555

切usb: adb usb

電腦端連接設備

wifi模式: adb connect 手機ip:5555

usb模式: 通過usb連接手機

二、adbs端和adbd端,usb通信原理探索

1. 識別usb設備, 找到USB設備信息

lsusb

usb_device_info記錄ID,訪問網站查看usb設備類型(設備是什麼)http://www.linux-usb.org可以確實設備的Vendors和設備類型(印表機/Mass Storage等)

2. Linux內核識別設備

udevadm monitor --kernel

usb_kernel_monitor接著去查詢一下device的信息udevadm info -q all -p

usb_kernel_info

3. adbs 訪問的device文件

啟動adbs,查看一下進程訪問的device文件adb start-server ps -ef | grep adb lsof -p $pid

adb_access_device_file

4. adbs源代碼分析

調用棧

從usb_vendors.c文件中,可以知道vendor信息是被"固化"adbs裡面。(那是否就可以解釋為啥linux不需要adb驅動呢)

adbs_init_vendorsusb_linux.c文件的函數列表

adbs_usb_linux_functions裡面讀取函數,主要封裝linux usb 通用的訪問device的方式。

5. adbd 訪問的device文件

adb shell su (root許可權) lsof > /sdcard/lsof.data adb pull /sdcard/lsof.data less lsof.data

adbd_access_file

6. adbd源代碼分析

調用棧

usb_adb_init的內容, 可以確定adbd確實訪問了/dev/android_adb文件(設備結點)

usb_linux_client.c文件定義讀取函數,從實現上看它主要通過/dev/android_adb文件與外界通信。

adbd_usb_linux_client_function

7. 串聯adbs和adbd(android kernel)

android.c和f_adb.c代碼所在路徑是/drivers/usb/gadget/ 注意:這裡的代碼是kernel的源代碼,不是Android的源代碼(aosp)。如果你也下載了linux kernel, 會發現沒有這兩個文件的。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Mob開發者服務平台 的精彩文章:

Android如何使用ShareSDK集成社會化分享

TAG:Mob開發者服務平台 |