android xmpp ejabberd smack asmack

Integración de Smack con el proyecto de Android Studio para la aplicación de chat.



xmpp ejabberd (3)

Estoy intentando implementar un chat messenger usando el servidor ejabberd y la biblioteca de smack pero me cuesta mucho integrar todos los archivos y dependencias de smack. Estoy usando Android Studio.

Mi build.gradle (módulo):

apply plugin: ''com.android.application'' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example.nit.xmppclient" minSdkVersion 18 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.android.support:appcompat-v7:22.2.0'' compile "org.igniterealtime.smack:smack-android:4.1.0" compile "org.igniterealtime.smack:smack-tcp:4.1.0" compile "org.igniterealtime.smack:smack-android-extensions:4.1.0" compile ''org.ogce:xpp3:1.1.6'' }

Primero recibí el error XMLpullparser y luego agregué xpp3. Pero después de agregar xpp3 estoy obteniendo

Error:Gradle: Execution failed for task '':app:preDexDebug''. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ''command ''/usr/lib/jvm/java-7-openjdk-amd64/bin/java'''' finished with non-zero exit value 1

build.gradle (proyecto):

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath ''com.android.tools.build:gradle:1.2.2'' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() maven { url ''https://oss.sonatype.org/content/repositories/snapshots'' } mavenCentral() } }

Preguntas:

Cómo eliminar el error o cuál puede ser la causa del error. ¿Me podría estar perdiendo alguna dependencia?

Usar smock aumentará el tamaño de la aplicación. ¿Puedo obtener un mensaje instantáneo sin usar ninguna biblioteca y escribir el código del lado del servidor? ¿Te gusta usar la biblioteca ejabberd para node-js y la aplicación de Android hablando con nodejs en lugar de ejabberd?

Y sí yo más cosa:

public class XMPPClient { private static int port = 5222; private static String host = "my-ip"; private static String service = "my.com"; static XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder() .setServiceName(service) .setPort(port) .setHost(host) .setCompressionEnabled(false).build(); static XMPPTCPConnection connection = new XMPPTCPConnection(conf); public static void register(String username, String password) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException { AccountManager accountManager = AccountManager.getInstance(connection); accountManager.createAccount(username,password); } public static void main (String args[]) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException { register("user", "password"); } }

Recibo el error cuando estoy ejecutando la clase XMPPClient


Intenta cambiar tus dependencias y construir con gradles.

compile ''org.igniterealtime.smack:smack-android:4.1.6'' compile ''org.igniterealtime.smack:smack-tcp:4.1.6'' compile ''org.igniterealtime.smack:smack-im:4.1.6'' compile ''org.igniterealtime.smack:smack-extensions:4.1.6''


Parece que necesitas agregar soporte multidex. Agregue soporte multidex en el archivo build.gradle de su aplicación

android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile ''com.android.support:multidex:1.0.0'' }


Si se hace lo que se hace en la pregunta, él / ella podrá integrar la biblioteca.

Solo estaba ejecutando el archivo, no todo el proyecto, esto podría parecer un error tonto, pero después de construir el proyecto todo funcionó bien.