在Android 9 中移植自己的app,用到automove 中Car service和Car-lib,简单总结一下
16lz
2021-01-23
项目背景
- 原来在Android 4上开发的App,移植到Android 9中。
- 接收can信号在app中进行处理。
- 原Android的VehicleService被替换,自己service。
软件结构
解释:
1、VehicleService和libVehicle是自己改过的,开机启动。
2、Car-service 是Android原生的,在packages/services/Car/service目录下
编译生成目录out/target/product/hikey970/system/priv-app/CarService/CarService.apk
3、AppFW service 是App 的server, 通过AppFW获取Car-service中的server,在onCreate中
mCarApiClient = Car.createCar(this, mCarConnectionCallback); mCarApiClient.connect();
然后,在CarConnectionCallback 中的onServiceConnected方法中处理结果
4、 Autmotive HALs:位置目录 hardware/interfaces/automotive/
需要注意的地方
- manifast权限配置检查
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.car.permission.CAR_POWERTRAIN" /> <uses-permission android:name="android.car.permission.CAR_VENDOR_EXTENSION" /> <uses-permission android:name="android.car.permission.CAR_SPEED" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" tools:ignore="ProtectedPermissions" />
- 在hal 层有config property配置
配置car vehical 支持哪些property,Android 目录文件hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
const ConfigDeclaration kVehicleProperties[]{ {.config = { .prop = toInt(VehicleProperty::INFO_FUEL_CAPACITY), .access = VehiclePropertyAccess::READ, .changeMode = VehiclePropertyChangeMode::STATIC, }, .initialValue = {.floatValues = {15000}}}, {.config = { .prop = toInt(VehicleProperty::INFO_FUEL_TYPE), .access = VehiclePropertyAccess::READ, .changeMode = VehiclePropertyChangeMode::STATIC, }, .initialValue = {.int32Values = {1}}}, .... }
- 获取不了car server,大多数都是服务名称错误,或失败不成功,
clean
重新编译。
try { IBinder binder = service.getCarService(serviceName); if (binder == null) { Log.w(CarLibLog.TAG_CAR, "getCarManager could not get binder for service:" + serviceName); return null; } manager = createCarManager(serviceName, binder); if (manager == null) { Log.w(CarLibLog.TAG_CAR, "getCarManager could not create manager for service:" + serviceName); return null; } mServiceMap.put(serviceName, manager); } catch (RemoteException e) { handleRemoteException(e); }
网上资料有很多,就不说了。
这里面设计几个Android 技术,binder、aidl什么的,不好懂,其他的感觉也没什么。
感觉Android做的挺好的,按照自己的需求修修补补就好了。
重要的还是要了解Android开发的精髓。
更多相关文章
- 最新res索引讲解(drawable、layout、values等目录的分辨率和layou
- Android 系统 目录 分析
- Android入门(二):Android工程目录结构
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
- android 获取sd卡根目录
- android 文件目录权限
- Android开发系列教程——目录
- Android Studio 各个依赖包存放目录
- [置顶] Android——4.2.2 文件系统目录分析