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' 

编译后重新运行正常了

相关推荐
松仔log11 小时前
Java中级——组合和继承
android·java·开发语言
我命由我1234514 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian23315 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_9557596215 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马15 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone15 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone15 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子19 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker19 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone19 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常