Android MQTT使用
使用Android MQTT用eclipse的paho库需要在build.gradle
引入以下内容
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
顺便提两句,service需要在Manifest中声明
<!--MQTT Service 需要-->
<service android:name="org.eclipse.paho.android.service.MqttService" />
两个项目的源码位置在
org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0-----link
org.eclipse.paho:org.eclipse.paho.android.service:1.1.1----link
问题
现在大多使用AndroidX项目,而service包是用v4包写的,AndroidX项目自然找不到v4包。这里有两种方法解决。
- 将项目改为v4的,那你只能在新建项目时,勾选support包,以便不使用androidx包,否则两个包之间会有冲突。
- 下载service的源码,更改v4包为androidX包
记录下第2种解决方案
下载源码
org.eclipse.paho:org.eclipse.paho.android.service:1.1.1.zip address
添加到模块
下载好zip之后解压可以将org目录拷贝到自己项目中新建的模块中,下图中的mqtt_service_library。
将org目录拷入,可以看到java目录下只有org,我这里将自己创建时生成的com包删除了。
导入cilent库
这个模块也需要mqtt cilent库,在其build.gradle中导入
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
更改v4为androidx
然后的报错应该就是如下的v4了,改成下面的androidx即可
import android.support.v4.content.LocalBroadcastManager;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
app模块导入
将修改完成的导入到自己的app模块中即可,build.gradle
如下
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
//MQTT服务,本应使用'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
//但其只能使用V4包,下载源码修改导入androidx包,源码位置你可以在这里找到版本1.1.1的源代码:
//https://github.com/eclipse/paho.mqtt.android/tree/v1.1.1
implementation project(path: ':mqtt_service_library')
如此就应该可以使用了。当然可以将这个模块导出jar包使用。我生成的包放在如下链接,有兴趣可以自取。
链接: mqtt_service.jar 提取码: gxmh
app目录下的build.gradle
记得要修改为
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
implementation files('libs/mqtt_service.jar')
//MQTT服务,本应使用'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
//但其只能使用V4包,下载源码修改导入androidx包,源码位置你可以在这里找到版本1.1.1的源代码:
//https://github.com/eclipse/paho.mqtt.android/tree/v1.1.1
// implementation project(path: ':mqtt_service_library')