基于mosquitto的android mqtt客户端
- 使用mosquitto/lib的代码,用c++封装接口
- 对外提供java接口,简单易用
- 支持OpenSSL加密
- 实现订阅、解除订阅、发布消息等功能
MqttClient.java
/**
* 获取单例
*/
public static MqttClient getInstance()
/**
* 启动mqtt服务
*/
public void start(@NonNull String host, int port, @NonNull String uuid, boolean clearSession)
public void start(@NonNull String host, int port, @NonNull String uuid, boolean clearSession, @NonNull String caFilePath, @NonNull String username, @NonNull String password)
/**
* 重连服务
*/
public void reconnect()
/**
* 订阅主题
*/
public void subscribe(String topic)
public void subscribe(String topic, int qos)
public void subscribe(List<String> topicList)
public void subscribe(List<String> topicList, List<Integer> qosList)
/**
* 解除订阅
*/
public void unsubscribe(String topic)
public void unsubscribe(List<String> topicList)
/**
* 发布消息
*/
public void publish(String topic, String message)
public void publish(String topic, String message, int qos)
/**
* mqtt事件回调接口
*/
public interface MqttCallback {
@WorkerThread
void onMessage(@NonNull String topic, @NonNull String message);
@WorkerThread
void onLog(String str);
}
/**
* 设置mqtt事件回调
*/
public void setOnMqttCallback(@Nullable MqttCallback callback)
- 导入Module: Android Studio -> File -> New -> Import Module -> 选中“library”文件夹
- 修改app/build.gradle文件,添加ndk abiFilters设置
android {
...
defaultConfig {
...
ndk {
abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a'
}
}
}
- 添加依赖
dependencies {
implementation project(':library')
}
因为默认支持OpenSSL,依赖静态库只添加了三个abi版本,所以项目编译默认只支持'armeabi-v7a', 'x86', 'arm64-v8a'
,如需支持其他cpu abi,请自行编译OpenSSL静态库
- 把
libssl.a libcrypto.a
文件添加到/library/src/main/jni/lib
目录下,并用文件夹区分abi类型 - 修改
library/build.gradle
,添加对应的abi类型 - 修改
app/build.gradle
,添加对应的abi类型
修改/library/src/main/jni/Android.mk
文件,注释掉下面的代码
...
# ssl lib
#include $(CLEAR_VARS)
#LOCAL_MODULE := ssl
#LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libssl.a
#include $(PREBUILT_STATIC_LIBRARY)
# crypto lib
#include $(CLEAR_VARS)
#LOCAL_MODULE := ssl_crypto
#LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libcrypto.a
#include $(PREBUILT_STATIC_LIBRARY)
...
#LOCAL_CFLAGS += -DWITH_TLS_PSK
#LOCAL_CFLAGS += -DWITH_TLS
...
# link lib
#LOCAL_STATIC_LIBRARIES := ssl ssl_crypto
...
app module只实现了简单的调用,相关日志输出到了logcat