2011-01-22 53 views
160

對於Android開發,現在哪個XMPP庫是最佳選擇?Android和XMPP:當前可用的解決方案

  • 我一直在使用patched Smack library如 建議在許多其他問題 在這裏SO。但是,這是兩年前Smack API的補丁版本 。和 雖然它一般很好,我 探索任何其他更近的 選項。

  • 我一直在尋找的official Smack API和一點點 研究之後,現在看來,這可能會工作得 時下罰款(雖然我還沒有 在實際應用中嘗試過呢)。

  • 還有另一種解決方案我來到 ,Beem's aSMACK library。 Beem是一個相當新的XMPP客戶端,用於 android以及我所瞭解的 他們正在使用他們自己的補丁 版本的aSMACK。

  • 最後,還有aSMACK但 也尚未相當 一段時間更新(如網站建議)。

你有任何其他建議也可以解釋爲什麼我應該選擇在上面,其餘的呢?

+2

你去有什麼用結束?我正在試圖決定是否使用官方音樂? – Tom 2011-06-10 14:29:19

+0

@Tom:我繼續使用第一個選項,並且從未更改爲其他版本,因爲項目開發在本文後不久就停止了。但是,我傾向於在未來使用ASmackService,正如Flow的回答中所提到的,因爲我喜歡最小化。 – alkar 2011-06-13 19:10:46

+2

只是一個ping /筆記,我已經重新打開這個贊成重複,導致這被關閉。 – 2011-08-21 17:27:34

回答

5

我最近偶然發現了另一個開源的解決方案:jaxmpp2

jaxmpp2還針對Android的(和Java SE)。我真的不能說其他任何事情,因爲我在Android/XMPP項目中不使用jaxmpp2。但它看起來像aSmack的有效替代品。

3

使用qsmack爲Android

https://code.google.com/p/qsmack/downloads/list

其最新版本的Android

我有一個努力的聊天,羣聊,視頻傳輸,音頻傳輸,最後一次露面,變更登記數字...幾乎完成最新的應用程序。我在openfire上創建了很多插件

3

我想使用libstrophe和jni。使用這個目標是跨平臺,易於使用和性能。 libstrophe是用c編寫的,所以很容易編寫android makefile,因爲依賴關係只有openssl和expat lib。在我的情況下,我使用libjingle中的openssl和expat lib,它已經連接到android和ios。 (只需要將gyp文件移植到android makefile或IOS項目中)。

下面是我的android的makefile

 


    LOCAL_PATH:= $(call my-dir)/../../libstrophe-0.8.7 

    SSL_PROJECT_PATH := openssl/libs/android 

    include $(CLEAR_VARS) 

    LOCAL_MODULE := openssl 

    OPENSSL_LIB_NAME := lib$(LOCAL_MODULE).a 

    LOCAL_CFLAGS := -DL_ENDIAN \ 
     -DOPENSSL_THREADS \ 
     -DPURIFY \ 
     -DTERMIO \ 
     -D_REENTRANT \ 
     -DOPENSSL_NO_HW \ 
     -DOPENSSL_NO_GOST \ 
     -DOPENSSL_NO_DTLS1 \ 
     -DOPENSSL_NO_RDRAND \ 
     -DOPENSSL_NO_RSAX \ 
     -Wall -pipe -fno-exceptions -fno-rtti -fstrict-aliasing -mfpu=neon -mfloat-abi=softfp 


    OPENSSL_PATH := openssl/openssl 
    OPENSSL_PATH_INC := $(LOCAL_PATH)/openssl/openssl 

    LOCAL_C_INCLUDES := \ 
     $(OPENSSL_PATH_INC) \ 
     $(OPENSSL_PATH_INC)/include \ 
     $(OPENSSL_PATH_INC)/crypto \ 
     $(OPENSSL_PATH_INC)/crypto/asn1 \ 
     $(OPENSSL_PATH_INC)/crypto/evp \ 
     $(OPENSSL_PATH_INC)/crypto/modes \ 
     $(LOCAL_PATH)/openssl/config/android \ 
     $(LOCAL_PATH)/openssl 

    LOCAL_ARM_MODE := arm 
    LOCAL_CFLAGS += $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK 


    LOCAL_SRC_FILES := \ 
     // here is openssl file which is defined in gyp 

    LOCAL_SHORT_COMMANDS := true 

    include $(BUILD_SHARED_LIBRARY) 


    include $(CLEAR_VARS) 

    STROPHE_PATH := $(LOCAL_PATH) 
    EXPAT := expat-2.1.0 
    OPENSSL_PATH := openssl/openssl 
    OPENSSL_PATH_INC := $(LOCAL_PATH)/openssl/openssl 


    EXPAT_SRC_FILES := \ 
     $(EXPAT)/lib/xmlparse.c \ 
     $(EXPAT)/lib/xmlrole.c \ 
     $(EXPAT)/lib/xmltok.c 

    COMMON_CFLAGS := \ 
     -Wall \ 
     -Wmissing-prototypes -Wstrict-prototypes \ 
     -Wno-unused-parameter -Wno-missing-field-initializers \ 
     -fexceptions \ 
     -DHAVE_EXPAT_CONFIG_H \ 
     -DLOGGING -DANDROID \ 



    COMMON_C_INCLUDES += \ 
     $(LOCAL_PATH)/$(EXPAT)/lib \ 
     $(STROPHE_PATH) \ 
     $(STROPHE_PATH)/src \ 
     $(OPENSSL_PATH_INC) \ 
     $(OPENSSL_PATH_INC)/include \ 
     $(OPENSSL_PATH_INC)/crypto \ 
     $(OPENSSL_PATH_INC)/crypto/asn1 \ 
     $(OPENSSL_PATH_INC)/crypto/evp \ 
     $(OPENSSL_PATH_INC)/crypto/modes \ 
     $(LOCAL_PATH)/openssl/config/android \ 
     $(LOCAL_PATH)/openssl \ 
     ../android/jni 


    STROPHE_SRC_FILES := src/auth.c \ 
     src/conn.c \ 
     src/ctx.c \ 
     src/event.c \ 
     src/handler.c \ 
     src/hash.c \ 
     src/jid.c \ 
     src/md5.c \ 
     src/sasl.c \ 
     src/scram.c \ 
     src/sha1.c \ 
     src/snprintf.c \ 
     src/sock.c \ 
     src/stanza.c \ 
     src/thread.c \ 
     src/tls_openssl.c \ 
     src/util.c \ 
     src/parser_expat.c \ 
     src/message.c \ 
     src/presence.c \ 
     src/roster.c 


    JNI_SRC_FILES := ../android/jni/strophe-jni.c 

    ifeq ($(TARGET_ARCH),arm) 
     LOCAL_SDK_VERSION := 8 
    else 
     LOCAL_SDK_VERSION := 9 
    endif 

    LOCAL_ARM_MODE := arm 
    LOCAL_SHORT_COMMANDS := true 
    LOCAL_SYSTEM_SHARED_LIBRARIES := libc 
    LOCAL_SHARED_LIBRARIES := openssl 

    LOCAL_SRC_FILES := $(EXPAT_SRC_FILES) 
    LOCAL_SRC_FILES += $(STROPHE_SRC_FILES) 
    LOCAL_SRC_FILES += $(JNI_SRC_FILES) 

    LOCAL_CFLAGS += $(COMMON_CFLAGS) 
    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
    LOCAL_CFLAGS += $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK 
    LOCAL_C_INCLUDES += $(COMMON_C_INCLUDES) 


    LOCAL_MODULE:= libnativeclient 
    LOCAL_MODULE_TAGS := optional 

    include $(BUILD_SHARED_LIBRARY) 

 
0

使用Smack 4.1 Readme and Upgrade Guide

使用的Android 2.3的工作室,最近我已經實現了一個非常簡單的方式演示。

- >只添加應用級gradle這個gradle這個依賴如下

compile "org.igniterealtime.smack:smack-tcp:4.1.0" 

// Optional for XMPPTCPConnection 

compile "org.igniterealtime.smack:smack-android-extensions:4.1.0" 

- >配置連接配置
注意:在的AsyncTask或其他後臺線程調用此

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
        .setUsernameAndPassword("Your Username here", "Your Password here") 
        .setHost("Host name here") 
        .setServiceName("Your service name here") 
        .setPort(Your port number here) 
        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) //Disable or enable as per development mode 
        .setDebuggerEnabled(true) // to view what's happening in detail 
        .build(); 

- >使用isConnected()isAuthenticated()

- >使用ChatManager添加chatListener

相關問題