介绍USB服务在Android服务体系中的位置,源码的位置及使用AndroidStudio 查看USB模块FWK的配置方式。

Windows环境准备

WSL2安装及AOSP源码下载编译 (shimo.im)

安卓服务概览

Android 主要有如下7类服务:

  1. 核心服务,如ActivityManagerService,WindowManagerService
  2. 通信相关服务,如:Wifi相关服务,Telephone相关服务;
  3. 系统功能相关服务,如:AudioService,MountService,UsbService
  4. BatteryService,VibratorService
  5. 相对独立的服务:EntropyService,DiskStatsService,Watchdog;
  6. 蓝牙服务
  7. UI相关服务,如:状态栏服务,通知管理服务。

源码分布

  • FWK/API 即 Java层api:

    • frameworks/base/core/java/android/hardware/usb/
    • frameworks/base/core/java/com/android/internal/usb
  • Service 层: Java 及JNI实现
    • frameworks/base/services/usb (Java)
    • frameworks/base/services/core/jni/ (cpp)
    • system/core/libusbhost ©
  • HAL(硬件抽象层) 接口定义 :
    • hardware/interfaces/usb
  • 内核层:
    • bionic/libc/kernel/uapi/linux/usb

阅读工具准备

AS项目文件生成

过滤规则编辑,在aosp源码根目录下添加名为 excluded-paths 的文件

# 几个根目录的规则
^art/.*
^packages/.*
^bootable/.*
^build/.*
^cts/.*
^dalvik/.*
^developers/.*
^external/.*
^platform_testing/.*
^pdk/.*
^sdk/.*
^system/.*
^test/.*
# platform-compat中有注解的类
^tools/(?!(platform-compat))
^development/.*
^device/.*
^prebuilts/*
# 这里我们查看这两个模块,所以注释掉
#^libcore/.*
#^frameworks/.*# 关于out其他的一些规则
#^out/*
^out/soong/.intermediates/.*/stubsDir/.*
^out/soong/.intermediates/.*/aapt2/.*#^out/soong/.intermediates/frameworks/base/system-api-stubs-docs/android_common/stubsDir/android/hardware/usb/UsbDevice.java
^out/soong/.intermediates/(?!((frameworks)|(libcore)))# ./out/soong/.intermediates/frameworks/native/libs/binder/libbinder/android_x86_64_shared/gen/aidl/android/os/BnServiceManager.h
# ^out/soong/.intermediates/.*
#^out/target/.*# 根据实际运行情况补充的规则
# 移除可能的jar
# 如 ./frameworks/base/tools/aapt2/integration-tests/CommandTests/android-28.jar
^frameworks/(?!base)
^frameworks/base/tools/aapt2/.*\.jar
# 排除一干测试文件目录
^frameworks/.*/tests
^frameworks/base/(?!((core)|(services)))
^hardware/interfaces/(?!usb)
^bionic/libc/kernel/uapi/linux/(?!usb)
^libcore/*
gradle-wrapper.jar
^tools/*# 对于sdk源码的隐藏,我们exclude掉,以使可以找到真正的源码
^libcore/ojluni/annotations

执行如下命令生成 android.ipr 文件以供 AndroidStudio 使用:

# 在源码根目录执行
source build/envsetup.sh
# 加载正确的Java
lunch aosp_x86_64-eng
cd development/tools/idegen
mm croot
development/tools/idegen/idegen.sh

AS 配置

大小写敏感配置

idea.case.sensitive.fs=true

VM 配置

Android Studio 打开项目

打开之后需要一定时间建立索引。

vscode 打开项目

我们使用vscode 查看c/c++代码,字节在ubuntu中使用命令行打开对应目录即可,vscode会自动提示安装对应的本地及远程的c++插件,按提示安装即可。

code frameworks/base/services/core/jni/

配置 C++ 的头文件查找地址:

在包含路径中输入:aosp/** (如: /home/hanlyjiang/aosp/**)

参考

  • Android8.0 USB系统框架_Sherlock的博客-CSDN博客_android usb框架
  • PTP 和 MTP_Cxiaolinxiaozi的专栏-CSDN博客

find . -type d -name "usb"
./bionic/libc/kernel/uapi/linux/usb
./cts/apps/CtsVerifier/src/com/android/cts/verifier/usb
./cts/hostsidetests/usb
./cts/hostsidetests/usb/SerialTestApp/src/com/android/cts/usb
./cts/hostsidetests/usb/src/com/android/cts/usb
./cts/tests/tests/usb
./cts/tests/tests/usb/src/android/usb
./development/host/windows/prebuilt/usb
./development/host/windows/usb
./device/google/bonito/usb
./device/google/bramble/usb
./device/google/coral/usb
./device/google/crosshatch/usb
./device/google/redfin/usb
./device/google/sunfish/usb
./external/autotest/client/common_lib/cros/cfm/usb
./external/crosvm/devices/src/usb
./external/kernel-headers/original/uapi/linux/usb
./external/linux-kselftest/tools/testing/selftests/drivers/usb
./external/ltp/testcases/kernel/device-drivers/usb
./external/u-boot/doc/device-tree-bindings/usb
./external/u-boot/drivers/usb
./external/u-boot/include/dt-bindings/usb
./external/u-boot/include/linux/usb
./external/u-boot/include/usb
./frameworks/base/core/java/android/hardware/usb
./frameworks/base/core/java/com/android/internal/usb
./frameworks/base/libs/usb
./frameworks/base/libs/usb/src/com/android/future/usb
./frameworks/base/libs/usb/tests/AccessoryChat/accessorychat/linux/usb
./frameworks/base/packages/SystemUI/src/com/android/systemui/usb
./frameworks/base/services/usb
./frameworks/base/services/usb/java/com/android/server/usb
./frameworks/base/tests/UsbHostExternalManagmentTest/AoapTestDevice/src/com/android/hardware/usb
./frameworks/base/tests/UsbHostExternalManagmentTest/AoapTestHost/src/com/android/hardware/usb
./frameworks/base/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb
./frameworks/base/tests/UsbTests/src/com/android/server/usb
./hardware/google/pixel/usb
./hardware/interfaces/usb
./packages/apps/Settings/src/com/android/settings/connecteddevice/usb
./packages/apps/Settings/tests/robotests/src/com/android/settings/connecteddevice/usb
./packages/services/Car/car-usb-handler/src/android/car/usb
./packages/services/Car/tests/CarDeveloperOptions/src/com/android/car/developeroptions/connecteddevice/usb
./packages/services/Car/tests/usb
./packages/services/Car/tests/usb/AoapHostApp/src/com/google/android/car/usb
./packages/services/Car/tests/usb/AoapPhoneCompanionApp/src/com/google/android/car/usb
./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot/usr/include/linux/usb
./test/framework/harnesses/host_controller/utils/usb
./test/vts-testcase/fuzz/config/usb
./test/vts-testcase/hal/usb
./test/vts-testcase/hal/usb/gadget/V1_1/host/src/com/android/usb
./test/vts-testcase/hal-trace/usb
./tools/test/connectivity/acts/tests/google/usb

相关文件:

./hardware/interfaces/usb
./bionic/libc/kernel/uapi/linux/usb./frameworks/base/services/usb
./frameworks/base/libs/usb./frameworks/base/core/java/android/hardware/usb
./frameworks/base/core/java/com/android/internal/usb./frameworks/base/services/core/jni/
com_android_server_UsbAlsaJackDetector.cpp
com_android_server_UsbDescriptorParser.cpp
com_android_server_UsbDeviceManager.cpp
com_android_server_UsbHostManager.cpp
com_android_server_UsbMidiDevice.cpp

安卓USB模块源码分析(一)- 准备相关推荐

  1. Wifi模块—源码分析Wifi热点扫描2(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程,也是Wifi扫描过程的延续,可以先看前面Wifi扫描的分析过程. Wifi模块-源码分析Wifi热点扫描(Andr ...

  2. Wifi模块—源码分析Wifi热点扫描(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点查找过程,也是Wifi启动的过程延续,Wifi启动过程中会更新Wifi的状态,框架层也有相应广播发出,应用层接收到广播后开始进行热点的扫描.可以先看 ...

  3. python树状节点 可拖拽_Python 的 heapq 模块源码分析

    原文链接:Python 的 heapq 模块源码分析 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中的子节点都与父母排序顺序关系.因为堆排序中的树是 ...

  4. Python 的 heapq 模块源码分析

    作者:weapon 来源:https://zhuanlan.zhihu.com/p/54260935 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中 ...

  5. Wifi模块—源码分析Wifi启动(Android P)

    一.前言 Android P在wifi这块改动挺大的,Wifi到AndoidO之后不再使用jni,所以AndroidP也一样不再使用jni来实现Java代码与本地的C/C++代码交互,而是使用HIDL ...

  6. Wifi模块—源码分析Wifi启动2(Android P)

    一 前言 在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程.如果没有看上一篇的建议先回头看看   Wifi模块-源码分析Wifi启动1(And ...

  7. dubbo源码分析系列——dubbo-cluster模块源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 模块功能介绍 该模块的使用介绍请参考dubbo官方用户手册如下章节内容. 集群容错 负载均衡 路由规则 配置规则 注册中心参考 ...

  8. kafka源码愫读(5)、ReplicaManager模块源码分析

    1.ReplicaManager模块简介 replicaManager主要用来管理topic在本broker上的副本信息.并且读写日志的请求都是通过replicaManager进行处理的. 每个rep ...

  9. Python 的 enum 模块源码分析

    ♚ 作者:weapon,闲来笑浮生悬笔一卷入毫端,朱绂临身可与言者不过二三. 博客:zhihu.com/people/hong-wei-peng 要想阅读这部分,需要对元类编程有所了解. 成员名不允许 ...

最新文章

  1. 蓝桥杯-回文数(java)
  2. PyCharm中目录directory与包package的区别
  3. ssh中exit命令退出远程服务器_Linux:ssh远程执行命令并自动退出
  4. mysql jion 实现原理_MySQL-join的实现原理、优化及NLJ算法
  5. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)
  6. 【Python】第一个程序---Helloworld!
  7. C++ const常量和指针
  8. 数据库设计三大范式详解
  9. 【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
  10. HTML和CSS面试题
  11. GitChat · 安全 | 揭秘我国的电子取证技术
  12. AD 10分钟画一块最简PCB
  13. java 子类属性覆盖_java子类和父类属性重复问题
  14. 虚拟机VMware安Mac OS时没有Apple mac选项
  15. WUSTOJ 1923 一笔画 【回溯】
  16. 挑选代表( 招商银行信用卡中心)
  17. 2015 usnews美国大学研究生计算机专业排名,2015年USNews美国大学经济学专业研究生排名...
  18. cmw测试ble_如何测试CC2640的BLE射频指标(一)
  19. 毕业设计 stm32单片机的家庭成员监控监护系统 - 物联网 嵌入式
  20. android 定位服务源码,android gps定位app源码(GpsTracker)

热门文章

  1. ION-DTN设计约束
  2. Linux系统常用的工具
  3. RTT之添加串口设备
  4. 在C#中使用My命名空间
  5. 每日一道 LeetCode (42):旋转数组
  6. 红米5plus成功移植刷入ubuntu20.04
  7. 干货分享)五金模具设计的资料!
  8. 39健康网之前世今生
  9. 关于在linux上面配置ADSL拨号代理的注意事项
  10. k86跟mysql_FriendFeed如何用MySQL储存K-V数据