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.