📚 1.CarServcie 是什么?包含些什么?
1. CarService 代码路径如下:
android11.0\packages\services\Car
- 如上图所示,AAOS的代码主要包含两部分, 其一是提供个APP调用的jar包, 其代码相当于客户端, 通过AIDL和服务端(service)中的服务进行通信.
如下图中所示,property 模块中,包含了提供给APP调用的CarPropertyManager.java,和服务端通信的
ICarProperty.aidl.
- android11.0/packages/services/Car/car-lib/src/android/car/hardware/property/CarPropertyManager.java
public class CarPropertyManager extends CarManagerBase {
private static final boolean DBG = true;
private static final String TAG = "CarPropertyManager";
private static final int MSG_GENERIC_EVENT = 0;
private final SingleMessageHandler<CarPropertyEvent> mHandler;
private final ICarProperty mService;
private final int mAppTargetSdk;
CarPropertyManager继承自CarManagerBase , 是一个Java层的管理服务.这个类运行在APP的进程中.
ICarProperty.aidl 是用来描述CarPropertyManager 和 CarPropertyService之间的接口方法,概述如下:
package android.car.hardware.property;
import android.car.hardware.CarPropertyConfig;
import android.car.hardware.CarPropertyValue;
import android.car.hardware.property.ICarPropertyEventListener;
/**
* @hide
*/
interface ICarProperty {
void registerListener(int propId, float rate, in ICarPropertyEventListener callback) = 0;
void unregisterListener(int propId, in ICarPropertyEventListener callback) = 1;
List<CarPropertyConfig> getPropertyList() = 2;
CarPropertyValue getProperty(int prop, int zone) = 3;
void setProperty(in CarPropertyValue prop, in ICarPropertyEventListener callback) = 4;
String getReadPermission(int propId) = 5;
String getWritePermission(int propId) = 6;
}
car-lib的代码结构如下:
我们需要关注的是 media,hardware,input,user这几个主要目录.
文件夹 | 描述 |
---|---|
media | 媒体相关的模块 |
hardware | 车辆硬件相关的模块 |
input | 输入事件相关的模块 |
user | 多用户相关的模块 |
其中 hardware 中包含了几个模块如下:
目录 | 描述 |
---|---|
cabin | 车身相关的模块 |
havc | 空调相关的模块 |
power | 车辆电源相关的模块 |
property | 车辆属性相关的模块 |
2.APP端常用的类如下:
类名 | 描述 |
---|---|
android11.0_rk3568/packages/services/Car/car-lib/src/android/car/hardware/cabin/CarCabinManager.java | 车身相关的模块 |
android11.0_rk3568/packages/services/Car/car-lib/src/android/car/hardware/hvac/CarHvacManager.java | 空调相关的模块 |
android11.0_rk3568/packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerManager.java | 车辆电源相关的模块 |
android11.0_rk3568/packages/services/Car/car-lib/src/android/car/hardware/property/CarPropertyManager.java | 车辆属性相关的模块 |
🧱 3. 服务端的代码如下:
AAOS的服务端代码分2类, 一类是继承自CarServiceBase,另外一类是继承自HalServiceBase
- 其中继承自CarServiceBase的服务,是实现了APP端的AIDL中Stub的服务端. 用来和APP端进行Binder通信.
- 而继承自HalServiceBase的这一类服务,是和Vehicle的HAL打交道的,需要接收或者处理车辆属性的类.
类名 | 描述 |
---|---|
android11.0_rk3568/packages/services/Car/service/src/com/android/car/audio/CarAudioService.java | AAOS的音频服务 |
android11.0_rk3568/packages/services/Car/service/src/com/android/car/audio/CarAudioFocus.java | AAOS的音频焦点服务 |
android11.0_rk3568/packages/services/Car/service/src/com/android/car/CarService.java | AAOS的服务总入口,提供给SystemServer启动 |
android11.0_rk3568/packages/services/Car/service/src/com/android/car/CarPropertyService.java | 车辆属性服务 |
“专注AAOS架构与实战,欢迎关注一起探索车载开发。”
下一篇推荐:
👉 AAOS系列之(三)----CarService启动流程