在Android 9 中移植自己的app,用到automove 中Car service和Car-lib,简单总结一下

项目背景

  1. 原来在Android 4上开发的App,移植到Android 9中。
  2. 接收can信号在app中进行处理。
  3. 原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/

需要注意的地方

  1. 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" />
  1. 在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}}},
     ....
     }
  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开发的精髓。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值