当前位置: 首页 > news >正文

Android13集成paho.mqtt.android启动异常

项目中原依赖是:

implementation('org.eclipse.paho:org.eclipse.paho.android.service:1.1.1') {exclude module: 'support-v4'transitive = true
}
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'

在Android10系统运行正常,能够连接服务端,在Android13中出错,log如下:

E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: paho4782357715513
    Process: com.xxx.xxxx, PID: 24859
    java.lang.IllegalArgumentException: com.xxx.xxxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
    Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
        at android.app.PendingIntent.checkFlags(PendingIntent.java:401)
        at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:671)
        at android.app.PendingIntent.getBroadcast(PendingIntent.java:658)
        at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)
        at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1214)
        at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1050)
        at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151)
        at java.lang.Thread.run(Thread.java:1012)

查询系统中使用:PendingIntent的地方做了版本判断,

PendingIntent piResult;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {piResult = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_IMMUTABLE);
} else {piResult = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_ONE_SHOT);
}

替换后依然启动报错,错误如上面相同,然后查询方法(mqtt库无法兼容高版本android13的问题),给与帮助, 使用

paho.mqtt.android 3.3.0 的版本可以正常运行,
下载 serviceLibrary-release.aar导入项目libs中,dependencies中添加依赖

       implementation files('libs/serviceLibrary-release.aar')

移除依赖: implementation('org.eclipse.paho:org.eclipse.paho.android.service:1.1.1')

原先所有导入import org.eclipse.paho.android.service.MqttAndroidClient 替换成:import info.mqtt.android.service.MqttAndroidClient ;

在MQTT android客户端,添加最后一个Ack.AUTO_ACK参数

client = new MqttAndroidClient(context, serverURI, clientId, Ack.AUTO_ACK);

替换后运行出现的错误是:

E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: paho5848521383808
    Process: com.xxx.xxx, PID: 29345
    java.lang.NoClassDefFoundError: Failed resolution of: Ltimber/log/Timber;
        at info.mqtt.android.service.ping.AlarmPingSender.start(AlarmPingSender.kt:57)
        at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1214)
        at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1050)
        at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151)
        at java.lang.Thread.run(Thread.java:1012)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "timber.log.Timber" on path: DexPathList[[zip file "/data/app/~~3Ta3tpvBlIuf4vOif31Pcg==/com.zpd.mdm-07aOyZj6lephuXGMHk0ADA==/base.apk"],nativeLibraryDirectories=[/data/app/~~3Ta3tpvBlIuf4vOif31Pcg==/com.zpd.mdm-07aOyZj6lephuXGMHk0ADA==/lib/arm64, /data/app/~~3Ta3tpvBlIuf4vOif31Pcg==/com.zpd.mdm-07aOyZj6lephuXGMHk0ADA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at info.mqtt.android.service.ping.AlarmPingSender.start(AlarmPingSender.kt:57) 
        at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1214) 
        at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1050) 
        at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151) 
        at java.lang.Thread.run(Thread.java:1012) 

然后添加timber导入:

implementation 'com.jakewharton.timber:timber:4.7.1' 

编译后重新运行正常了

相关文章:

  • 探索计算机视觉技术的应用前景
  • 如何基于OpenCV和Sklearn算法库开展机器学习算法研究
  • 便利工具分享:一个proto文件的便利使用工具
  • Filter和ThreadLocal结合存储用户id信息
  • HashMap散列表的相关知识点
  • Python Flask: 构建轻量级、灵活的Web应用
  • 一键云端,AList 整合多网盘,轻松管理文件多元共享
  • jbase打印导出实现
  • TCP/IP详解卷一第三章“链路层”概要总结(未完编辑中)
  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • QQ五毛项目记
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • [acwing周赛复盘] 第 94 场周赛20230311
  • 解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?
  • Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2019年如何成为全栈工程师?
  • FineReport中如何实现自动滚屏效果
  • IOS评论框不贴底(ios12新bug)
  • java2019面试题北京
  • JavaScript类型识别
  • Java精华积累:初学者都应该搞懂的问题
  • oldjun 检测网站的经验
  • SpiderData 2019年2月23日 DApp数据排行榜
  • windows下如何用phpstorm同步测试服务器
  • 编写高质量JavaScript代码之并发
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 问题之ssh中Host key verification failed的解决
  • 《天龙八部3D》Unity技术方案揭秘
  • (26)4.7 字符函数和字符串函数
  • (6)添加vue-cookie
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (十) 初识 Docker file
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • .NET Micro Framework初体验
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • [20190113]四校联考
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C/C++随笔] char与unsigned char区别
  • [C++]高精度 bign (重载运算符版本)
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [ffmpeg] av_opt_set 解析
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
  • [IOI2018] werewolf 狼人
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用