Cannot find entry in either framework or device manifest

在android里使用hidl技术,代替了以前的dlopen的方式来加载第三方的so.从android8.0开始使用Android Treble框架来加载service.这里从我在实际开发中遇到的问题说起,在VTS测试服务是否存在时,老是报Cannot find entry XXX服务。各种关键接口找不到,也不知道问题出在哪里。所以只好看其源码实现了。
1.各种hal文件都继承胃IBase接口,而IBase定义在system/libhidl/transport/base目录下
2…hal会被hidl-gen程序进行解析,生成输出文件。下面看两个核心的接口的生成,一个是getService 一个是registerAsService
3.一般代码里经常看到IXXXXService.getService()。但是getService这个接口根本没查询不到。其实这个接口,是hidl-gen自动生成的。其核心文件是system/tools/generateCpp.cpp
接口declareGetService申明getService定义,截图如下在这里插入图片描述接口implementGetService实现了getService的定义,部分截图如下在这里插入图片描述declareServiceManagerInteractions接口申明registerAsService
在这里插入图片描述implementServiceManagerInteractions接口实现registerAsService在这里插入图片描述从自动生成的代码来看,registerAsService基本就是调用hwservicemanager add接口把自己注册到map中去。这一块代码大家有兴趣自己去看,这里关注的是getService的调用。
来看下大体的流程图在这里插入图片描述这里要注意的是,我这个代码比较旧。根最新的版本差异是很大的,但原理差不多。
1.首先getService获取服务,紧接着就是getTransport的接口调用。我个人有理解就是在这里做了一层拦截处理,在配置文件里面没找到我们所要求的服务,就会报错并结束服务的获取。
这里首先会去system/etc/vintf/manifest.xml文件去找我们调用者的服务名,如果找到就返回。
如果没找到就会去vendor/etc/vintf/manifest.xml文件去找,如果找到就返回。如果没找到则返回NULLPRT
同时打印Cannot find entry xxx in either framework or device manifest.
所以,如果我们碰到这样的LOG后,首先要去检测这两个文件里面有没有配置我们调用的服务,没有就要自己配置。一般是没有配置引起的,当然也有可能是xml增加的语法有问题,比如对齐。个人感觉C++对xml支持不够强大。
以上是我自己的理解,如有不妥之处敬请提出。大家一起学习

bovie@DESKTOP-1K1R5SV:~/workspace$ adb logcat | grep -E 'hwservicemanager|VtsHal' 06-06 10:49:19.376 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest. 06-06 10:49:19.412 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest. 06-06 10:49:20.436 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest. 06-06 10:49:29.285 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.wifi.hostapd@1.0::IHostapd/default in either framework or device VINTF manifest. 06-06 10:49:32.349 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.wifi.hostapd@1.0::IHostapd/default in either framework or device VINTF manifest. 06-06 10:49:39.657 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.drm@1.0::IDrmFactory/default in either framework or device VINTF manifest. 06-06 10:49:39.722 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.drm@1.0::IDrmFactory/default in either framework or device VINTF manifest. 06-06 10:49:39.758 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.drm@1.0::IDrmFactory/default in either framework or device VINTF manifest. 06-06 10:49:39.826 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.drm@1.0::IDrmFactory/default in either framework or device VINTF manifest. 06-06 10:49:39.917 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.drm@1.0::IDrmFactory/default in either framework or device VINTF manifest. 06-06 10:50:03.006 8513 8513 I VtsHalIdentityTargetTest: getDeviceHalManifest: Reading VINTF information. 06-06 10:50:03.011 8513 8513 I VtsHalIdentityTargetTest: Loaded APEX Infos from /apex/apex-info-list.xml 06-06 10:50:03.012 8513 8513 I VtsHalIdentityTargetTest: getDeviceHalManifest: Successfully processed VINTF information 06-06 10:50:03.012 8513 8513 I VtsHalIdentityTargetTest: getFrameworkHalManifest: Reading VINTF information. 06-06 10:50:03.014 8513 8513 I VtsHalIdentityTargetTest: Loaded APEX Infos from /apex/apex-info-list.xml 06-06 10:50:03.014 8513 8513 I VtsHalIdentityTargetTest: getFrameworkHalManifest: Successfully processed VINTF information 06-06 10:50:14.190 8881 8881 I VtsHalIdentityTargetTest: getDeviceHalManifest: Reading VINTF information. 06-06 10:50:14.196 8881 8881 I VtsHalIdentityTargetTest: Loaded APEX Infos from /apex/apex-info-list.xml 06-06 10:50:14.196 8881 8881 I VtsHalIdentityTargetTest: getDeviceHalManifest: Successfully processed VINTF information 06-06 10:50:14.196 8881 8881 I VtsHalIdentityTargetTest: getFrameworkHalManifest: Reading VINTF information. 06-06 10:50:14.198 8881 8881 I VtsHalIdentityTargetTest: Loaded APEX Infos from /apex/apex-info-list.xml 06-06 10:50:14.199 8881 8881 I VtsHalIdentityTargetTest: getFrameworkHalManifest: Successfully processed VINTF information 06-06 10:50:22.319 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.wifi.hostapd@1.0::IHostapd/default in either framework or device VINTF manifest. 06-06 10:50:25.469 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.wifi.hostapd@1.0::IHostapd/default in either framework or device VINTF manifest. 06-06 11:01:17.131 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest. 06-06 11:01:17.178 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest. 06-06 11:01:17.753 301 301 I hwservicemanager: getTransport: Cannot find entry android.hardware.media.omx@1.0::IOmx/default in either framework or device VINTF manifest.
06-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruk_spp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值