在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相关推荐

  1. android WIFI相关问题集合

    1.Wi-Fi hotspot cannot be used normally 问题描述: android P - Settings - Network & internet - Hotspo ...

  2. SA6155P max9288 camera 笔记-2

    GMSL方案,还是记录一下吧,调试过程中随手记录 比较杂乱,没有整理,随便看看吧 MAX9288 3.12Gbps GMSL Deserializers for Coax or STP Input a ...

  3. Android 8.0 VTS 测试 FAIL 项解决记录

    本文是转自https://zhuanlan.zhihu.com/p/28426650 注意:本文基于 Android 8.0 进行分析. 1. 前言 这篇文章所记录的是我自己在 Amlogic 平台上 ...

  4. 【Android】An activity without a UI must call finish() before onResume() completes

    今天在配合客户实现安装第三方app时,遇到一个问题,安装过程中,会长时间黑屏(30s~60s),最初怀疑是否是安装时,android系统资源(内存和CPU)剩余不多,导致安装时间较长,但是这样的话,解 ...

  5. Android R config_biometric_sensors默认通用定制common可好?

    前面已经写过一个帖子-<Android R Setupwizard无指纹.人脸录入>发现,这个无异于开了个定制值,加入某项目中共分支不同varint有FP设备,而另外的又没有. 这时候合理 ...

  6. rk3368 Android9.0 HIDL调试记录

    rk3368 Android9.0 HIDL调试记录 Platform: RK3368 OS: Android 9.0 Kernel: 4.4.194 文章目录 rk3368 Android9.0 H ...

  7. Android 8.0 VTS 测试 FAIL 失败项解决记录

    Android 8.0 VTS 测试 FAIL 失败项解决记录 Qidi 2017.08.09 (Markdown & Haroopad) 注意:本文基于 Android 8.0 进行分析. ...

  8. 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 ...

  9. Linux Driver 和Device匹配过程分析

    Linux Driver 和Device匹配过程分析 1,总线注册匹配过程 1.1 struct platform_driver 1.2 struct device_driver 1.3 PCIe总线 ...

最新文章

  1. 四十七、磁盘调度算法
  2. python 程序流程控制结构-Python基础—程序控制结构
  3. 转仁兄:Binary search and its variation
  4. python传文件给java_python使用简单http协议来传送文件
  5. STM32H743+CubeMX-QSPI+DMA读取外部FLASH(W25Q128JVSQ)
  6. 计算机网络学习笔记:第三章
  7. 如何将分表汇总到总表_总表输入数据,自动拆分到分表,你会吗?
  8. M0最高优先级的中断设计
  9. Spring 事务失效的 8 大场景,看看你都遇到过几个?
  10. 更新mysql软件_MySQL软件升级
  11. 获取GridView控件总列数
  12. Windows程序设计与C语言的主要区别是什么?
  13. taro更新页面数据_taroRefresh
  14. python计算矩阵的散度_Python Sympy计算梯度、散度和旋度的实例
  15. 松翰单片机--SN8F5702学习笔记(六)TIMER2
  16. arduino灯光装置_基于Arduino的智能家居灯控系统设计
  17. R语言:表达式、数学公式、特殊符号
  18. LeetCode/LintCode 题解丨一周爆刷双指针:数组中的最长山脉
  19. 20145212 罗天晨 网络欺诈技术防范
  20. 增大 MAT 堆内存

热门文章

  1. AI 入行那些事儿(9)人工智能对人类社会的影响
  2. C. Xenon's Attack on the Gangs(树形dp)
  3. 各种复杂网络处理工具
  4. 码牛学院安卓Android移动互联网高级开发正式课学习笔记
  5. 开发润乾报表过程:因为内容过多分页导致的这条线
  6. Android--- Drawer and Tab Navigation with ViewPager
  7. java 带根号的开平方
  8. Unity 获取Android手机返回键Home按键信息
  9. Python并发编程之线程的玩法
  10. 关于pycharm提取