当前位置: 首页 > 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' 

编译后重新运行正常了

http://www.lryc.cn/news/233697.html

相关文章:

  • STM框架之按键扫描新思路
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 剑指offer --- 用两个栈实现队列的先进先出特性
  • 流媒体协议
  • ClickHouse的分片和副本
  • C语言编程陷阱(五)
  • chardet检测文件编码,使用生成器逐行读取文件
  • html所有标签和DOCTYPE的总结
  • 2023年11月15号期中测验判断题(Java)
  • 基于 selenium 实现网站图片采集
  • vue3相关内容
  • AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FreeRTOS移植
  • 《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化
  • 基于单片机的自动循迹小车(论文+源码)
  • linux系统中安装python到指定目录
  • 分布式事务 - seata安装
  • CentOS to 浪潮信息 KeyarchOS 迁移体验与优化建议
  • Go解析soap数据和修改其中数据
  • LeetCode98. Validate Binary Search Tree
  • 【LeetCode】206. 反转链表
  • 飞天使-通过GET 和POST进案例演示
  • 【MySql】12- 实践篇(十)
  • <C++> 反向迭代器
  • 【EI会议征稿】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
  • 格力报案称“高管遭自媒体侮辱诽谤”
  • HBase之Compaction
  • 设计模式之结构型模式
  • centOs 6.10 编译 qt 5.15.11
  • Redis对象的数据结构及其原理汇总
  • @RestController 注解网页返回 [] ,出现的bug