为自定义HIDL接口添加DM&&FCM(六)

1.概览

  引入HIDL的一个重要原因是Android团队想要将Android Framework和Android vendor之间的代码进行解耦,即franmework不依赖于vendor的代码,如此Android团队在开发franework的时候就可以屏蔽底层的硬件差异了。在面向对象编程中提倡基于接口编程其实也是这个思想,调用者并不直接调用实现类提供的接口,而是通过事先定义好的接口进行调用/实现。为了实现framework和vendor解耦,Android引入了VINTF object(Vendor Interface Object)。接下来要讲的DM(device manifest)和FCM(Framework Compatibility Matrixes)则属于VINTF object的一部分。
  VINTF object则是用于framework告知vendor其想要什么,以及vendor告知framework它有什么。下面看下它们的关系图。

VINTF object 的涉及主要涉及的功能如下:
  对于vendor
    a) Defines a schema for the static component.(the device manifest file).
    b) Adds build time support for defining the device manifest file for a given device.
    c) Defines the queryable API at runtime that retrieves the device manifest file (along with the other runtime-collectible information) and packages them into the query result.
  对于framework
    a) Defines a schema for the static component (the framework manifest file).
    b) Defines the queryable API at runtime that retrieves the framework manifest file and packages it into the query result.

2.设备清单-Manifests

   一个VINTF object数据由来自device manifest 和 framework manifest files 的所匹配的信息组成,例如DM中提供的和FCM所要求的组件成功匹配上的一例。
  Device Manifests由厂商维护,其中包含vendor Manifests 和 ODM Manifests两个部分。
Device Manifests
  The vendor manifest specifies HALs, SELinux policy versions, etc. common to an SoC. It is recommended to be placed in the Android source tree at device/VENDOR/DEVICE/manifest.xml, but multiple fragment files can be used.
ODM Manifests
  The ODM manifest lists HALs specific to the product in the ODM partition.

3.兼容矩阵-Compatibility Matrixes

  FCM 用于描述 framework 在运行时所需要的组件。FCM又分为SCM(system compatibilty matrix),PCM(product compatibility matrix)和 SECM(system_ext compatibility matrix)。 被列出在FCM的组件则静态的写入xml文件中,并且Android在编译、运行以及做VTS测试的时候都会检测设备能否满足FCM的要求。

4.ICustomHardware的 DM

4.1 在Android.bp中添加DM信息

//file:test/flagstaffTest/hardware/interfaces/custom_hardware/1.0/default/Android.bp
cc_binary {name: "flagstaff.hardware.custom_hardware@1.0-service",...vintf_fragments: ["flagstaff.hardware.custom_hardware@1.0.xml"],
}

4.2 flagstaff.hardware.custom_hardware@1.0.xml

//file:test/flagstaffTest/hardware/interfaces/custom_hardware/1.0/default/flagstaff.hardware.custom_hardware@1.0.xml
<manifest version="1.0" type="device"><hal format="hidl"><name>flagstaff.hardware.custom_hardware</name><transport>hwbinder</transport><version>1.0</version><interface><name>ICustomHardware</name><instance>default</instance><instance>custom</instance></interface></hal>
</manifest>

  此处的DM信息说明,vendor侧提供了2个版本1.0接口ICustomHardware的实现,其分别是default和custom。在使用时可以使用如下方法选择获取对应实例

//获取default实例
android::sp<ICustomHardware> instance = ICustomHardware::getService();
//获取custom实例
android::sp<ICustomHardware> custom = ICustomHardware::getService("custom");

5.ICustomHardware的FCM

5.1 将FCM添加到Android编译系统

//file:test/flagstaffTest/device.mk
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE += \test/flagstaffTest/compatibility_matrix/framework_compatibility_matrix.xml

5.2 framework_compatibility_matrix.xml

//file:test/flagstaffTest/compatibility_matrix/framework_compatibility_matrix.xml
<compatibility-matrix version="2.0" type="framework"><hal format="hidl" optional="true"><name>flagstaff.hardware.custom_hardware</name><version>1.0</version><interface><name>ICustomHardware</name><instance>default</instance><instance>custom</instance></interface></hal>
</compatibility-matrix>

  此处的FCM信息说明,framework需要版本为1.0接口ICustomHardware的两个实现,其分别是default和custom。但是此处的optional为true意味着该组件为可选,所以即使不提供对应的DM的话也不影响系统编译运行测试的。
  另外如果有问题,欢迎留言或者email(836190520@qq.com)我,技术升级在于交流~~

Android R(11)为自定义HIDL接口添加DMFCM(六)相关推荐

  1. Android R 11 后台定位权限没有 始终允许选项的解决方法

    在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...

  2. android 通知 按钮,在自定义通知中添加按钮操作

    我已经制作了custom notification并且有一个按钮,我想functionalities on notification and button click执行两个不同的functional ...

  3. Android R(11)文件读写适配

    首先来一张适配完成后,申请权限的页面,点击打开即可: AndroidManifest.xml权限申请: <uses-permission android:name="android.p ...

  4. Android R(11) 特殊字符~导致编译失败

    一.编译 错误信息 FAIL 项TestGlobEscapes. 二. 问题定位 根据fial TestGlobEscapes 查找到文件 build\blueprint\pathtools\glob ...

  5. Android R常见GC类型与问题案例

    前言 Android系统的APP运行需要依赖ART虚拟机(Android Runtime),ART虚拟机的主要作用是给APP的java代码提供运行环境,其中编译.执行.垃圾回收(GC)模块是ART虚拟 ...

  6. Android11添加AIDL系统服务及HIDL接口服务

    软件平台:Android11 硬件平台:QCS6125 直接上需求:首先添加自定义系统服务并且开机自启动:其次该服务要调用HW层service的方法. 前半部分之前添加过N次,不是难点,后半部分的实现 ...

  7. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

  8. Android R 、Android 11 API 30差异报告解读

    本文基于Android开发者网站的API参考和差异报告部分进行应用开发中常用的重点API变化进行解读分析,目的在于了解Android11的API差异,了解Android11新增接口能力的同时适配目前正 ...

  9. Android动画效果之自定义ViewGroup添加布局动画

    Android动画效果之自定义ViewGroup添加布局动画 前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢 ...

最新文章

  1. Vista下控件无法安装解决办法
  2. centos快速安装npm-2.15.8
  3. Puppet之简单安装Nginx
  4. mysql中检索以名字_【MySQL必知必会】第四章 检索数据
  5. 【SPOJ-QTREE】树链剖分
  6. string、stringbuilder、stringbuffer区别
  7. java面试题 sql_Java面试题总结之数据库与SQL语句
  8. Oracle 练习题P256
  9. AspNetPager分页控件的运用 【转】-有用
  10. 使用Python编写打字训练小程序
  11. python zipfile_python zipfile模块
  12. 《Linux编程》学习笔记 ·000【Linux介绍】
  13. 高中计算机学ppt吗,高中信息技术人工智能教学培训课件选修5ppt
  14. Oracle表添加时间字段(执行insert、update时,时间字段自动插入当前系统时间)
  15. [转载]Geronimo renegade: OpenEJB 和 Apache Geronimo 的 EJB 实现
  16. 苹果App Store审核指南中文翻译(更新)
  17. 三分频电路Verilog设计
  18. 帆软BI工具Fine BI连接数据库
  19. SEO页面优化方案指南
  20. 教师资格证科目二备考重点总结

热门文章

  1. Phpstorm+phpstudy组合配置开发环境(Win端)
  2. KVM虚拟化部署Centos
  3. 索尼摄像机V1C语言设置,索尼摄像机随机软件(Picture package) v1.8官方版
  4. 分布式事务解决方案——TCC
  5. 操作系统的基本概念|操作系统
  6. Java数据结构学习——排序二叉树
  7. Revit二次开发_轴网快速标注
  8. Python自动化测试学习3
  9. 【Spark GraphX】社交网图分析
  10. PAP和CHAP的区别