Skip to content

KeyYao/mqtt_client_android

Repository files navigation

Android Mqtt Client

基于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类型

禁用OpenSSL

修改/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

Releases

No releases published

Packages

No packages published

Languages