介绍USB服务在Android服务体系中的位置,源码的位置及使用AndroidStudio 查看USB模块FWK的配置方式。
Windows环境准备
WSL2安装及AOSP源码下载编译 (shimo.im)
安卓服务概览
Android 主要有如下7类服务:
- 核心服务,如ActivityManagerService,WindowManagerService
- 通信相关服务,如:Wifi相关服务,Telephone相关服务;
- 系统功能相关服务,如:AudioService,MountService,UsbService;
- BatteryService,VibratorService
- 相对独立的服务:EntropyService,DiskStatsService,Watchdog;
- 蓝牙服务
- 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 的文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52# 几个根目录的规则 ^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 使用:
复制代码
1
2
3
4
5
6
7
8
9
10# 在源码根目录执行 source build/envsetup.sh # 加载正确的Java lunch aosp_x86_64-eng cd development/tools/idegen mm croot development/tools/idegen/idegen.sh
AS 配置
大小写敏感配置
复制代码
1
2idea.case.sensitive.fs=true
VM 配置
Android Studio 打开项目
打开之后需要一定时间建立索引。
vscode 打开项目
我们使用vscode 查看c/c++代码,字节在ubuntu中使用命令行打开对应目录即可,vscode会自动提示安装对应的本地及远程的c++插件,按提示安装即可。
复制代码
1
2code frameworks/base/services/core/jni/
配置 C++ 的头文件查找地址:
在包含路径中输入:aosp/** (如: /home/hanlyjiang/aosp/**)
参考
- Android8.0 USB系统框架_Sherlock的博客-CSDN博客_android usb框架
- PTP 和 MTP_Cxiaolinxiaozi的专栏-CSDN博客
附
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55find . -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
相关文件:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16./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模块源码分析(一)- 准备Windows环境准备安卓服务概览源码分布阅读工具准备参考附的全部内容,更多相关安卓USB模块源码分析(一)-内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复