MQTT安卓客户端
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
陈曦 efbf147319 change 9 months ago
app change 9 months ago
gradle/wrapper OPENSSL报错: undefined symbol 9 months ago
library change 9 months ago
.gitignore OPENSSL报错: undefined symbol 9 months ago
LICENSE OPENSSL报错: undefined symbol 9 months ago
README.md OPENSSL报错: undefined symbol 9 months ago
build.gradle OPENSSL报错: undefined symbol 9 months ago
gradle.properties change 9 months ago
gradlew OPENSSL报错: undefined symbol 9 months ago
gradlew.bat OPENSSL报错: undefined symbol 9 months ago
settings.gradle OPENSSL报错: undefined symbol 9 months ago

README.md

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