摘要:,,本文介绍了Android学习中的第14个主题,主要聚焦于VINF(Virtual Input Framework)和兼容性矩阵。文章指出,VINF在Android开发中扮演着重要角色,为开发者提供了创建虚拟输入设备的功能。兼容性矩阵在Android系统中也至关重要,确保不同设备和版本的Android系统能够无缝兼容应用。通过学习和理解这些内容,开发者可以更好地优化应用性能,提高用户体验。
周末琢磨这玩意让人欲罢不能,只能先暂时搁置看看,VINTF是供应商接口对象(VINTF 对象),它属于兼容性矩阵概念,这不禁让我想起了之前看过的一部电影,异次元杀阵。
基础知识
这是谷歌官方的图示,关于VINTF的基础概念,其实质就是两部分:设备提供的能力和系统需要的能力,通过查看这两者的兼容性,来判断它们是否能够匹配,这两者都是通过xml进行描述的,主要是在Android8之后,system和vendor为了兼容性而分离出来的,举个例子:
设备侧是通过Manifest进行描述的,路径为:device/VENDOR/DEVICE/manifest.xml,内容大致如下:
<device> <CONFIG_ANDROID>y</CONFIG_ANDROID> <CONFIG_ARM64>y</CONFIG_ARM64> </device>
系统侧则是通过Matrix进行描述,路径为:/system/libhidl/manifest.xml,内容示例:
<service name="android.hidl.allocator" version="1.0"> <interface name="IAllocator" transport="ashmem"/> </service>
详细图示和更多关于Manifest类型、Makefile Target、生成文件等内容,可以参照VINTF的官方文档或相关博客,我们需要在/vendor/etc/vintf下增加device_manifest和device_framework_compatibility_matrix这两个xml文件。
服务构建与实践
从实践角度来说,要增加一个AIDL服务,大致分为两个步骤。
1、服务编写:首先在BP文件中增加对应的XML片段,如vintf_fragments: ["android.hardware.xxx-service.xml"]
,然后在代码中增加该xml,内容大致如下:
<service name="android.hardware.xxx" version="1"> <interface name="Ixxx" transport="default"/> </service>
之后正常编译。
2、运行环境搭建:主要是三个文件,增加系统需要的能力和设备提供的能力,具体命令如:
adb push compatibility_matrix.device.xml /system/etc/vintf/compatibility_matrix.device.xml adb push compatibility_matrix.xml /vendor/etc/vintf/compatibility_matrix.xml和上述的xml略有不同,主要是列出服务名称、版本和接口等信息,将之前构造服务的xml复制到板子的指定路径,如果运行服务出现错误,通常会提示
Android servicemanager.cpp: servicemanager: Could not find in the VINTF manifest
,这时一般就是xml没有正确拷贝。验证
可以通过以下命令在设备端验证提供的能力:
查看HAL能力/system/bin/lshal --init-vintf
查看AIDL能力service list
参考资料
VINTF: manifest.xml | Cool Fish In Glacier
官方文档https://source.android.com/docs/core/architecture/vintf/resources?hl=zh-cn
VINTF简介-CSDN博客
清单 | Android 开源项目 | Android Open Source Project
仅供参考,具体操作可能因设备和系统版本而异,建议在官方文档和社区论坛中查找更详细和准确的信息。
还没有评论,来说两句吧...