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支持不够强大。
以上是我自己的理解,如有不妥之处敬请提出。大家一起学习
Cannot find entry in either framework or device manifest相关推荐
- android WIFI相关问题集合
1.Wi-Fi hotspot cannot be used normally 问题描述: android P - Settings - Network & internet - Hotspo ...
- SA6155P max9288 camera 笔记-2
GMSL方案,还是记录一下吧,调试过程中随手记录 比较杂乱,没有整理,随便看看吧 MAX9288 3.12Gbps GMSL Deserializers for Coax or STP Input a ...
- Android 8.0 VTS 测试 FAIL 项解决记录
本文是转自https://zhuanlan.zhihu.com/p/28426650 注意:本文基于 Android 8.0 进行分析. 1. 前言 这篇文章所记录的是我自己在 Amlogic 平台上 ...
- 【Android】An activity without a UI must call finish() before onResume() completes
今天在配合客户实现安装第三方app时,遇到一个问题,安装过程中,会长时间黑屏(30s~60s),最初怀疑是否是安装时,android系统资源(内存和CPU)剩余不多,导致安装时间较长,但是这样的话,解 ...
- Android R config_biometric_sensors默认通用定制common可好?
前面已经写过一个帖子-<Android R Setupwizard无指纹.人脸录入>发现,这个无异于开了个定制值,加入某项目中共分支不同varint有FP设备,而另外的又没有. 这时候合理 ...
- rk3368 Android9.0 HIDL调试记录
rk3368 Android9.0 HIDL调试记录 Platform: RK3368 OS: Android 9.0 Kernel: 4.4.194 文章目录 rk3368 Android9.0 H ...
- Android 8.0 VTS 测试 FAIL 失败项解决记录
Android 8.0 VTS 测试 FAIL 失败项解决记录 Qidi 2017.08.09 (Markdown & Haroopad) 注意:本文基于 Android 8.0 进行分析. ...
- USB OTG(Host) 、 USB ADB(Device)、DWC3 Charge
USB ADB: Corresponding to USB Device Mode USB OTG: Corresponding to USB Host Mode USB EAP: Correspon ...
- Linux Driver 和Device匹配过程分析
Linux Driver 和Device匹配过程分析 1,总线注册匹配过程 1.1 struct platform_driver 1.2 struct device_driver 1.3 PCIe总线 ...
最新文章
- 四十七、磁盘调度算法
- python 程序流程控制结构-Python基础—程序控制结构
- 转仁兄:Binary search and its variation
- python传文件给java_python使用简单http协议来传送文件
- STM32H743+CubeMX-QSPI+DMA读取外部FLASH(W25Q128JVSQ)
- 计算机网络学习笔记:第三章
- 如何将分表汇总到总表_总表输入数据,自动拆分到分表,你会吗?
- M0最高优先级的中断设计
- Spring 事务失效的 8 大场景,看看你都遇到过几个?
- 更新mysql软件_MySQL软件升级
- 获取GridView控件总列数
- Windows程序设计与C语言的主要区别是什么?
- taro更新页面数据_taroRefresh
- python计算矩阵的散度_Python Sympy计算梯度、散度和旋度的实例
- 松翰单片机--SN8F5702学习笔记(六)TIMER2
- arduino灯光装置_基于Arduino的智能家居灯控系统设计
- R语言:表达式、数学公式、特殊符号
- LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉
- 20145212 罗天晨 网络欺诈技术防范
- 增大 MAT 堆内存