关于AIDL通讯在魅族16Xs的兼容性问题

最近在项目中遇到一个AIDL兼容魅族手机(16Xs,16s)问题,记录一下,以便下次后续翻阅。

1.设定好统一接口ICpMessage
2.程序A(com.xxx.xxxA)设定AIDL需要绑定的服务, 在AndroidManifest.xml中声明服务。

<service android:name=".XxxAidlService"android:exported="true"/>

3.程序B(com.xxx.xxxB)(对外提供的SDK包)绑定程序A所提供的服务

Intent intent = new Intent();
intent.setClassName("com.xxx.xxxA", "com.xxx.xxxA.XxxAidlService");
activity.bindService(intent, mConn, Context.BIND_AUTO_CREATE);

具体问题如下:
程序B(SDK)在调用程序A时,无法进行服务的绑定,但是可以调起程序A。

在华为,三星,Vivo, Oppo等手机(也包含Android 9.0)均表现正常,唯独在魅族的16Xs,16s(Android 9.0)无法进行绑定,出现如下异常:

03-31 22:15:54.681 I/Interception( 1590): third procedure runType: retrieve_service caller: com.xxx.xxxB callee: com.xxx.xxxA fg: true processName: com.xxx.xxxA calleeCalss: com.xxx.xxxA.XxxAidlService intent: Intent { cmp=com.xxx.xxxA/.XxxAidlService }
03-31 22:15:54.681 D/Interception( 1590): V4 isInterceptByRule realCallingPid: 8041 isMatch: false, runType=retrieve_service|||callerPkg=com.xxx.xxxB|||calleePkg=com.xxx.xxxA|||calleeClass=com.xxx.xxxA.XxxAidlService|||processName=com.xxx.xxxA|||action=|||data===|||extras===*|||interaction=fg|||intercept result=0
03-31 22:15:54.681 W/Interception( 1590): Link isInterceptAsUsual, caller com.xxx.xxxB call com.xxx.xxxA interception default intercept as true!
03-31 22:15:54.681 W/Interception( 1590): reason:6)finally, intercept as usual, interception = true details<<runType:retrieve_service isFgAction:true callerPkg:com.xxx.xxxB calleePkg:com.xxx.xxxA processName:com.xxx.xxxA Intent { cmp=com.xxx.xxxA/.XxxAidlService }>>

看到log中第一行,intent: Intent { cmp=com.xxx.xxxA/.XxxAidlService },觉得并无异常,component已经是正确的了,所以不觉得setClassName()有问题。
第二行的log,明确说明了callee 的pid not match(isMatch:false), 但是在程序运行后检查pid与log提示的pid 也就是说问题出在了intent的参数上面,所以才会出现几第三行和第四行的intercept.
接着修改intent, 将packageName,className使用ComponentName进行设置传递,添加的时候没有把握,所以添加了setPackage()。具体如下:

Intent intent = new Intent();
intent.setPackage("com.xxx.xxxA");
ComponentName componentName = new ComponentName("com.xxx.xxxA", "com.xxx.xxxA.XxxAidlService");
intent.setComponent(componentName);
activity.bindService(intent, mConn, Context.BIND_AUTO_CREATE);

修改之后,sdk却依然不能唤起服务。
参考网上一些文章进行分析,怀疑可能是魅族OEM软体对该bindService的动作进行了限制(Android原生:bindService动作会检索所有程序包含的服务(不管是否启动),如果服务未启动,通过判断Context.BIND_AUTO_CREATE的设置,进行启动。)
而魅族的OEM软体可能对此作了修改,使Context.BIND_AUTO_CREATE无效,也就是说,只能对已经启动的服务进行bindService操作。
带着这个想法,在程序A的application->onCreate()函数中添加服务的启动代码:

startService(new Intent(this, XxxAidlService.class));

修改之后,sdk就能兼容魅族16Xs和16s.

总结:对于兼容性适配问题,多分析给出的log,在确保代码无误的情况下,可以对framework的修改进行假设,尝试对应的修改来对自己的假设进行验证。

关于AIDL通讯在魅族16Xs的兼容性问题相关推荐

  1. 魅族16Xs 内测安卓10自己回退flyme稳定版

    魅族16Xs 内测安卓10自己回退flyme稳定版 唉!失望. 魅族这一手猝不及防. 事先声明,本文章仅供参考,刷机导致的后果,不负任何责任. 那直接开始. 使用9008线刷. 先准备好需要用到的文件 ...

  2. 魅族16Xs体验:同档位最值得入手的“千元旗舰”

    16Xs是魅族最近发布的一款新机,三星AMOLED屏幕.高通骁龙675处置器.后置三摄 其中主摄采用的是4800万像素的三星GM1传感器,这是目前千元档旗舰主流的配置. 并且在相机算法的优化上,Fly ...

  3. 魅族6支持html吗,魅族手机浏览器兼容性调优最佳实践_html/css_WEB-ITnose

    问题一.非 position:absolute 容器 height:100% 不生效,导致 bottom 定位错位 截图1:容器实际高度渲染为0 截图2: 节点1 样式中包含了 position:re ...

  4. Android为TV端助力 浅谈Aidl 通讯机制

    服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...

  5. 魅族怎么更改html,魅族手机浏览器兼容性调优最佳实践_html/css_WEB-ITnose

    问题一.非 position:absolute 容器 height:100% 不生效,导致 bottom 定位错位 截图1:容器实际高度渲染为0 截图2: 节点1 样式中包含了 position:re ...

  6. 魅族手机浏览器兼容性调优最佳实践

    问题一.非 position:absolute 容器 height:100% 不生效,导致 bottom 定位错位 截图1:容器实际高度渲染为0 截图2: 节点1 样式中包含了 position:re ...

  7. c++采集声卡输出_耳上明珠 | 魅族双 C 耳机 — EP2C

    魅族双 C 耳机 魅族 16s 取消了 3.5mm 耳机接口,使用 USB 输出数字音频信号,支持 Type-C 数字耳机或数字转接器.除了无线蓝牙耳机和一线难求的魅族 HIFI 解码耳放外,与魅族 ...

  8. 求生欲很强!魅族16s Pro正式发布,2699元起

    今天下午,魅族在珠海正式发布魅族16s Pro新机,该机在微博已宣传许久,诸多卖点也一一揭晓了,所以用户最关注的绝对是价格了,终于在介绍了一个多小时产品之后公布了价格:6GB+128GB版售价2699 ...

  9. 号称装669个APP依然不卡顿 魅族“神机”发布:红米K20怎么看?

    今天下午,魅族在北京举办新品发布会,正式推出了"三摄长续航 极边全面屏"的新品魅族16Xs.魅族16Xs采用与魅族16s同款的极边全面屏,搭载骁龙 675处理器,后置4800万像素 ...

最新文章

  1. 云时代服务器端工程师必备 CDN 技能包
  2. 浅析刚刚起步的创业公司应该如何选择适合自己的网站类型呢?
  3. kwvcprojparser不是内部_在盗版window xp上安装的visual studio 2010学习版编译ace6.1时出现如下问题...
  4. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_18_数学工具类Math...
  5. 5G NR 随机接入--PRACH
  6. kotlin android获取按钮,Kotlin 实现按钮点击跳转监听事件方式
  7. Go学习笔记—Channel通道
  8. h264码流文件通过计算first_mb_in_slice区分帧边界
  9. 精灵说科技 java,Java动画动画(精灵)
  10. [原创]JSLint-Toolkit v1.2 - Update with qooxdoo1.3
  11. MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)
  12. 映射器配置文件和映射器接口
  13. swift——富文本文字的简单使用
  14. 密码字典生成工具:crunch
  15. 网络安全web渗透技术
  16. 印象笔记的插件在chrome使用问题
  17. cns/clns搭建给clnc(udp转发)
  18. 网络爬虫/数据抓取,反爬虫(更新版)
  19. 权宜之计是什么意思_四代火影死后,为什么没有五代火影上任?网友:纲手还在赌钱呢...
  20. python编程课程是骗人的吧_在朋友圈买下编程课,你上的是Python还是成功学

热门文章

  1. java实现excel导入数据库,附架构师必备技术详解
  2. 阿里 c++ 编码规范 百度网盘_阿里云网盘开启公测预约!不限速,2T永久免费!!硬刚百度网盘~...
  3. 段子PK秀:古代人打仗也这么自恋?
  4. centos7.9使用dnf包管理器安装openresty
  5. Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
  6. StringUtils isEmpty 和 isBlank 区别
  7. excel 区间人数柱状图_Excel图表教程:区间柱状图
  8. 做微商减肥产品在陌陌怎么引流?巧用陌陌引流到微信
  9. aws codecommit配置和使用
  10. Javascript对象进行扁平化处理