Smack throws "NoClassDefFoundError: permission failure: Lorg / jxmpp / util / XmppStringUtils"

I am having a problem with my application in which I want to create a simple XMPP client that connects to my server. I had the following problem when I run the application (compilation runs without problems), but my application instantly closes.

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 

But for some reason I can not find anything related to the missing "XmppStringUtils"

This is the code on line 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); } 

And this is my import

 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; 

Plus my 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() } } 

thanks

+6
source share
3 answers

From NoClassDefFoundError javadoc :

It is thrown if an instance of the Java virtual machine or an instance of ClassLoader tries to load into the class definition (as part of a regular method call or as part of creating a new instance using a new expression), and no class definition can be found.

Java uses dynamic binding, which means that characters (class names, ...) are bound when first used. As Mojit has already pointed out, it seems that you are missing the JXMPP library, which is a (transitive) dependency of Smack. I assume that you added Smack to your project by simply placing it in the libs/ folder. This approach is not recommended, as you can easily miss the Smack transit dependency, as it happened to you. Instead, use a build system that can resolve dependencies like Maven or Gradle. See also:

+2
source

You needed four additional jar files.

1) jxmpp-core.jar

2) jxmpp-jid.jar

3) jxmpp-stringprep-libidn

4) jxmpp-util-cache

You can download all of them from the link below.

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

+8
source

The problem arises from one de.measite.minidns dependency, which pushes the update to fail. Therefore, I fixed it this way by excluding autodependence and including the latest stable version. This fixed my problem.

 compile('org.igniterealtime.smack:smack-android-extensions:4.2.0') { exclude group: 'de.measite.minidns' } compile('org.igniterealtime.smack:smack-tcp:4.2.0') { exclude group: 'de.measite.minidns' } compile group: 'de.measite.minidns', name: 'minidns-hla', version: '0.2.2' 
+3
source

Source: https://habr.com/ru/post/988278/


All Articles