Android FMRadio上层调试

  • 背景
  • 获取RadioManager对象为空
  • HDIL相关问题

背景

在某个平台上,应用同事一直反馈FMRadio报错,闪退。这部分功能我们在framework部分和hal部分有修改,特别是hal部分,没有使用原生的broadcastradio。但是维护这块代码的同事离职了,工作也没有交接,也没有留下任何文档。领导说“看看”,然后就接下了这活儿

获取RadioManager对象为空

我先看了一下应用端的代码,由于应用是系统应用,UID是system uid。所以获取RadioManager的方式是使用的RadioManager的构造方法

    /*** @hide*/public RadioManager(@NonNull Context context) throws ServiceNotFoundException {mContext = context;mService = IRadioService.Stub.asInterface(ServiceManager.getServiceOrThrow(Context.RADIO_SERVICE));}

但是通过log看到获取到的RadioManager对象为空,就说明RADIO_SERVICE没有publish ,也就是BroadcastRadioService没有启动,可以通过service list的命令看下。于是就在SystemServer中看了一下BroadcastRadioService的启动条件

if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_BROADCAST_RADIO)) {traceBeginAndSlog("StartBroadcastRadioService");mSystemServiceManager.startService(BroadcastRadioService.class);traceEnd();
}

关于hasSystemFeature,可以跟踪代码,最终在SystemConfig.java中看到相关实现逻辑,是通过mAvailableFeatures这个map来判断的是否支持BroadcastRadio这个功能。而这个map的值是通过解析etc/permissions/etc/sysconfig/ 相关目录下的xml配置文件来判断的。例如BroadcastRadio的就是这个样子

会根据feature标签判断系统是不是支持该功能。

看了一下机器中的环境,这个文件并没有参与到编译中,于是将这块代码添加到了编译当中

用新的ROM验证通过,应用端能够正常的拿到BroadcastRadioService,该问题解决,这是第一个问题点。

HDIL相关问题

解决了上面的问题,framework部分的服务正常运行,但是应用依旧无法正常运行。于是就产生了第二个问题,应用通过RadioManager 的listModules方法获取到的设备上存在的所有广播无线电模块的描述符列表为0,也就意味着没有办法通过某设备ID去进行tune,也就是进行调频道。那我们就看下listModules是如何实现的。


其中hal1/BroadcastRadioService 是通过nativeLoadModules,也就是会通过jni的方式,去找到BroadcastRadioFactory中connectModule的实现。 剩下的hal2/BroadcastRadioService 没有通过jni这种方式。具体的在这不展开了,后面有时间慢慢梳理两者的区别。我们是通过第一种方式去实现的,但是发现整个链路没有通。

hal层的服务又是正常运行的,那么问题肯定出在jni和hidl之间,添加了相关log调试发现有如下报错

看到这个报错,问题就很明显了,hidl的接口没有在manifest.xml中配置导致的,将hidl的接口添加到manifest.xml中后调试

添加完成后,整个链路正常了,可以调试了,剩下的就是解决bug和功能实现了。因为我们自己实现的hal服务借用了broadcastradio的BroadcastRadioFactory的相关接口,但是却将broadcastradio的接口在manifest.xml中的配置缺被人删掉了,所以才导致了这个问题。

Android FMRadio上层调试相关推荐

  1. android fm 耳机,Android杂谈:音频调试小计

    经常要搞音频调试,很麻烦,现在记录下. 常用数据结构 /system/media/audio/include/system/audio.h 定义了常用的stream类型,例如3就是音乐的stream. ...

  2. Android STB 高效调试技巧

    文章目录 一.编译 1.1 版本全编 1.2 模块单编 1.3 芯片特有单编模块 1.3.1 Uboot 1.3.2 boot.img&dt.img 二.调试 2.1 文件替换 2.1.1 常 ...

  3. Android逆向--如何调试smali代码?

    最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享. 本文介绍Android逆向中smali代码的调试及环境的准备. 事先准备如下工具: Android killer:反编译 ...

  4. Android逆向之调试smali代码基础

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Android逆向中调试smali代码的方法." 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享 ...

  5. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  6. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  7. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)

    本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤. 环境: Ubuntu 12.04,o ...

  8. HBuilder Android真机调试

    关于调试 难者不会,会者不难.对于调试,这句话尤其合适.无论是前端调试.Java调试.PHP调试.Python调试,还是我们这次要研究的HBuilder Android真机调试,都是一个道理.欲速则不 ...

  9. Android studio断点调试(全在这里)

    转载地址:http://blog.csdn.net/huangxiaominglipeng/article/details/53100811 有人说Android 的调试是最坑的,那我只能说是你不会用 ...

最新文章

  1. Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
  2. win 2008 控制共享文件夹大小_win10如何一键网络共享
  3. 【转】使用genstring和NSLocalizedString实现App文本的本地化
  4. 以太坊、Hyperledger Fabric和Corda,哪个更好?
  5. html自动执行的事件,js自执行事件
  6. 域名服务器(DNS)工作原理
  7. 怎么用计算机改变声音的音调,调音台使用教程大全
  8. 淄博神爱计算机官网,【最美教师】张萍:大爱无言 育人无声
  9. C#模拟js的Json对象创建,操作
  10. SQL Server中的事务日志管理(2/9):事务日志架构概述
  11. Quartus II13.1破解
  12. 【STM32】开发板学习1 NUCLEO-L476RG:GPIO例程 点亮LED2灯
  13. 搜狐CEO张朝阳决定分拆网游业务单独上市
  14. 用浏览器控制台获取一些网页资源
  15. android+广播+讲解,Android广播机制
  16. DY(抖音)、KS(快手)、西瓜、知乎等批量去水印小程序版本可视化版本
  17. 电视盒子安装linux微信,怎么在电视上安装微信-电视盒子(智能电视)这样几步设置,轻松安装APP软件...
  18. 5.4.7 延迟的心跳
  19. ZigBee无线点灯示例
  20. 心路历程:爬虫实战——从数据到产品

热门文章

  1. app启动页html模板,APP引导页设计的五种常见表现方式
  2. 基于python的个人博客_一款基于 Django 的极简主义个人博客系统
  3. 4.(简答题,25.0分) (20分)(1)定义一个新冠病毒类Virus,定义一个德尔塔病毒类(Delta)和奥密克戎病毒类(Omicron),这两个类是新冠病毒类的子类;定义一个“可抵御地”接口,德
  4. 对待事物,乐观积极。
  5. hloj#168“倒牛奶”解题讨论
  6. 为什么很多人认为测试就是“鼠标点点点”?
  7. 红黑树的历史和由来。
  8. 关于把小写数字转化为大写数字的java代码
  9. Web 2.0概念地图-from Tim Oreilly
  10. 武侠中的基本要素(武侠之奥义)