Android USB流程分析:UMS功能实例详解

版权申诉
0 下载量 119 浏览量 更新于2024-03-08 收藏 3.75MB PDF 举报
Androidusb流程分析.pdf主要以UMS(usb mass storage)为例来分析流程,从插入USB开始到状态栏弹框,再从选择UMS功能开始往下的流程。文档指出,以前并没有看到过USB相关代码,网上也很少有分析usb FRAMEWORK相关内容。因此,文档中可能存在错误,欢迎指正。 总体框图显示,LINUX KERNEL GADGET架构为Linux USB Gadget分为三层:USB Gadget功能层、BSP/Driver、硬件层。开发者通常要在USB Gadget功能层实现具体的设备驱动,如Anddroid在此层实现了adb,mtp,mass_storage等。在浏览参考关注此层代码时,会发现“composite”是此层的关键字。此层中关键的数据结构是:struct usb_composite_driver。这一层的驱动文件一般为:driver/usb/gadget/android.c(android实现的)或driver/usb。 在分析流程中,文档指出UMS功能实现的关键是在USB Gadget功能层完成的,其中的数据结构是由struct usb_composite_driver定义的。这一层的驱动文件通常为driver/usb/gadget/android.c或driver/usb。同时,在UMS功能实现过程中,还需要涉及到BSP/Driver层的开发者通常要实现的部分,这些部分包括具体的设备驱动实现以及硬件连接。因此,UMS功能的实现是在多个层次的协同工作下完成的,需要开发者对不同层次的架构有一定的了解才能进行有效的分析与调试。 总的来说,Androidusb流程分析.pdf提供了一个以UMS为例的USB流程分析,主要通过对不同层次的架构和关键数据结构的分析,来揭示UMS功能实现的整个流程。该文档的编写对于对USB相关代码感兴趣的开发者来说是一份宝贵的参考资料,不仅可以帮助他们更好地理解USB在Android系统中是如何实现的,也可以帮助他们分析和调试USB相关的代码。尽管文档中可能存在一些错误,但这并不影响它作为一份重要的参考资料的价值。希望更多的开发者可以对这方面的工作进行深入的研究,并且在发现错误时能够积极指正,共同完善这方面的知识体系。

# -*- coding: UTF-8 -*- from lib2to3.pgen2 import driver from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="通讯录") el1.click() el2 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.FrameLayout[3]/android.widget.RelativeLayout") el2.click() el3 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[1]/android.widget.TextView") el3.click() el4 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[8]") el4.click() el5 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[11]") el5.click()

2023-06-08 上传