项目背景

  1. 原来在Android 4上开发的App,移植到Android 9中。
  2. 接收can信号在app中进行处理。
  3. 原Android的VehicleService被替换,自己service。

软件结构

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

解释:
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开发的精髓。

更多相关文章

  1. 最新res索引讲解(drawable、layout、values等目录的分辨率和layou
  2. Android 系统 目录 分析
  3. Android入门(二):Android工程目录结构
  4. 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
  5. android 获取sd卡根目录
  6. android 文件目录权限
  7. Android开发系列教程——目录
  8. Android Studio 各个依赖包存放目录
  9. [置顶] Android——4.2.2 文件系统目录分析

随机推荐

  1. android里面的USB功能-----Accessory模式
  2. 如何打包你自己的apk程序到Android里?
  3. Android(安卓)之 Activity和Intent用法介
  4. 简单介绍Android中Activity的四种启动模
  5. android select选择器 checkbox改外观,but
  6. Android(安卓)开发程序员必备网站
  7. Android(安卓)五大布局(LinearLayout、Fra
  8. 自己对android开机速度优化的一点理解
  9. Android练习项目——知乎日报
  10. Android中的Shape和Selector的结合使用实