CarRadioService 分析
需求需要自己做个车机版 Radio app,需要 framework 提供接口,并且需要定义在 CarService 中,所以这里对 CarService 的流程做了个简单地总结,以及如何在 framework 层定义接口,最后是在模拟器中如何调试接口。
启动流程
步骤 0-27:
CarService.java
1 | // 1 |
ICarImpl.java
1 | // 2 |
VehicleHal.java
1 | // 3 |
HalClient.java
1 | // 4 |
RadioHalService.java
1 | // 10 |
CarRadioService.java
1 | // 12 |
CarRadioManager.java
1 | // 27 |
CarRadioEventListener.java
1 | // 26 |
App 调用接口
初始化 Car 及 CarRadioManager
1 | public Car car; |
接口定义 (framework层定义)
CarRadioManager.java
1 | public boolean setPreset(CarRadioPreset preset) throws IllegalArgumentException, |
RadioHalService.java
1 | public boolean setRadioPreset(CarRadioPreset preset) { |
HalClient.java
1 | public void setValue(VehiclePropValue propValue) throws PropertyTimeoutException { |
hardware:
模拟器如何做调试
编译 Car 版本的 harware 源码,及 CarService Apk
注:Genymotion pixel xl 对应的是 marlin 版本, 编译出来是64位不能用,所以需要编译 x86 版本,为32位的将编译生成的三个库文件导入模拟器相应位置。
Z:\SourceCode\android-8.0.0_r1\out\target\product\generic_x86\system\vendor\etc\init
android.hardware.automotive.vehicle@2.0-service.rc
Z:\SourceCode\android-8.0.0_r1\out\target\product\generic_x86\system\vendor\bin\hw
android.hardware.automotive.vehicle@2.0-service
Z:\SourceCode\android-8.0.0_r1\out\target\product\generic_x86\system\lib
android.hardware.automotive.vehicle@2.0.so
- 安装 CarService apk