Smack lanza "NoClassDefFoundError: Resolución fallida de: Lorg / jxmpp / util / XmppStringUtils"

Tengo un problema con mi aplicación en la que quiero crear un cliente XMPP simple que se conecta a mi servidor. Tengo el problema siguiente cuando estoy comenzando la aplicación (la compilación funciona sin problemas), pero mi aplicación cierra inmediatamente.

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jxmpp/util/XmppStringUtils; at org.jivesoftware.smack.provider.ProviderManager.getKey(ProviderManager.java:314) at org.jivesoftware.smack.provider.ProviderManager.addStreamFeatureProvider(ProviderManager.java:304) at org.jivesoftware.smack.provider.ProviderManager.addLoader(ProviderManager.java:140) at org.jivesoftware.smack.initializer.UrlInitializer.initialize(UrlInitializer.java:54) at org.jivesoftware.smack.SmackInitialization.loadSmackClass(SmackInitialization.java:232) at org.jivesoftware.smack.SmackInitialization.parseClassesToLoad(SmackInitialization.java:193) at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:163) at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:148) at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:116) at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96) at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:38) at org.reisacher.zapp.Main.login(Main.java:30) at org.reisacher.zapp.Main.onCreate(Main.java:73) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jxmpp.util.XmppStringUtils" on path: DexPathList[[zip file "/data/app/org.reisacher.zapp-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469 at org.jivesoftware.smack.provider.ProviderManager.getKey(ProviderManager.java:314) at org.jivesoftware.smack.provider.ProviderManager.addStreamFeatureProvider(ProviderManager.java:304)             at org.jivesoftware.smack.provider.ProviderManager.addLoader(ProviderManager.java:140)             at org.jivesoftware.smack.initializer.UrlInitializer.initialize(UrlInitializer.java:54)             at org.jivesoftware.smack.SmackInitialization.loadSmackClass(SmackInitialization.java:232)             at org.jivesoftware.smack.SmackInitialization.parseClassesToLoad(SmackInitialization.java:193)             at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:163)             at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:148)             at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:116)             at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96)             at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:38)             at org.reisacher.zapp.Main.login(Main.java:30)             at org.reisacher.zapp.Main.onCreate(Main.java:73)             at android.app.Activity.performCreate(Activity.java:5990)             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)             at android.app.ActivityThread.access$800(ActivityThread.java:151)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Suppressed: java.lang.ClassNotFoundException: org.jxmpp.util.XmppStringUtils at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 27 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Pero de alguna manera no puedo encontrar nada relacionado con el "XmppStringUtils"

Este es el código en la línea 30

 public void login() throws XMPPException, IOException, SmackException { XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setServiceName("reisacher.de") .setHost("192.168.178.6") .setPort(5222) .build(); AbstractXMPPConnection connection = new XMPPTCPConnection(config); connection.connect(); connection.login(username, password); } 

Y estas son mis importaciones

 import org.jivesoftware.smack.AbstractXMPPConnection; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; 

Además de mi build.gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. apply plugin: 'jetty' buildscript { repositories { maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } } dependencies { compile "org.igniterealtime.smack:smack-android:4.1.1" compile "org.igniterealtime.smack:smack-tcp:4.1.1" // optional features compile "org.igniterealtime.smack:smack-android-extensions:4.1.1" compile "org.igniterealtime.smack:smack-core:4.1.1" } allprojects { repositories { jcenter() } } 

Gracias

Del javadoc de NoClassDefFoundError :

Lanzado si la máquina virtual de Java o una instancia de ClassLoader intenta cargar en la definición de una clase (como parte de una llamada de método normal o como parte de crear una nueva instancia utilizando la nueva expresión) y no se pudo encontrar ninguna definición de la clase.

Java utiliza enlaces dinámicos, lo que significa que los símbolos (nombres de clase, …) están vinculados cuando se utilizan por primera vez. Como Mohit ya señaló, parece que le falta la biblioteca JXMPP, que es una dependencia (transitiva) de Smack. Supongo que ha añadido Smack a su proyecto simplemente colocándolo en la carpeta libs/ . Este enfoque no es recomendable, ya que fácilmente se pierda una dependencia trasitiva de Smack, como le sucedió a usted. En su lugar utilizar un sistema de construcción que es capaz de resolver las dependencias como Maven o Gradle. Ver también:

  • Cómo utilizar Smack 4.1 en Android?
  • Guía de lectura y actualización de Smack 4.1

Necesitó cuatro archivos extra jar.

1) jxmpp-core.jar

2) jxmpp-jid.jar

3) jxmpp-stringprep-libidn

4) jxmpp-util-cache

Puede descargar todos ellos desde el enlace de abajo.

https://oss.sonatype.org/content/repositories/releases/org/jxmpp/

  • Libgdx no procesa las fuentes correctamente después de reanudar
  • AsyncTask.executeOnExecutor () antes de API Nivel 11
  • ¿Proguard trabaja para ocultar las constantes de cadena estáticas?
  • Seguridad de facturación InApp y invocación de métodos remotos
  • Java - android UDP falta de fiabilidad
  • Trabajos de fondo de Android para la sincronización con un servicio web
  • ListFragment cómo obtener la listView?
  • Android Cómo activar el hotspot en Android Programáticamente
  • ¿Es posible establecer de forma selectiva módulos para componentes en Dagger 2?
  • ¿Por qué estoy obteniendo nullpointer en onMeasure en GridView
  • Cómo compartir un objeto entre dos subprocesos (sincronización de subprocesos)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.