Java 掴掴掴掴掴掴;NoClassDefFoundError:未能解析:Lorg/jxmpp/util/XmppStringUtils";

Java 掴掴掴掴掴掴;NoClassDefFoundError:未能解析:Lorg/jxmpp/util/XmppStringUtils";,java,android,smack,Java,Android,Smack,我的应用程序有一个问题,我想创建一个简单的XMPP客户端来连接到我的服务器。 我在启动应用程序时遇到了以下问题(编译过程中没有问题),但我的应用程序立即关闭 java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jxmpp/util/XmppStringUtils; at org.jivesoftware.smack.provider.ProviderManager.getKey(ProviderManager

我的应用程序有一个问题,我想创建一个简单的XMPP客户端来连接到我的服务器。 我在启动应用程序时遇到了以下问题(编译过程中没有问题),但我的应用程序立即关闭

   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
这些是我的进口货

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;
再加上我的身材,格雷德尔

// 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()
    }
}

谢谢

您需要四个额外的jar文件

1) jxmpp-core.jar

2) jxmpp-jid.jar

3) jxmpp stringprep libidn

4) jxmpp util缓存

你可以从下面的链接下载它们

来自:

如果Java虚拟机或类加载器实例尝试 在类的定义中加载(作为普通方法调用的一部分或 作为使用新表达式创建新实例的一部分)和 可以找到该类的定义

Java使用动态链接,这意味着符号(类名,…)在第一次使用时是链接的。正如Mohit已经指出的,您似乎缺少JXMPP库,它是Smack的一个(可传递的)依赖项。我假设您确实通过将Smack放入
libs/
文件夹来为您的项目添加Smack。不推荐使用这种方法,因为您很容易错过Smack的一个积极的依赖项,就像它发生在您身上一样。取而代之的是使用一个能够解决那些依赖关系的构建系统,比如Maven或Gradle。另见:


问题来自于一个依赖de.measite.minidns,它推送了一个带有bug的更新。因此,我通过排除自动依赖并包括上一个稳定版本来修复它。它解决了我的问题

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'

谢谢,忘了在第二个.gradle文件中添加“compile…”行。现在就像一个魔咒,没有手动库work@Flow,似乎即使是gradle也无法解决您删除的这些可传递依赖项。签出
https://github.com/deniswisedeniswise/smacktutorial
,它生成但产生的运行时错误与解决此错误的方法相同?是的,我忘记在第二个build.gradle文件中添加依赖项。检查$root/build.gradle和$root/app/build.gradle中是否有所有依赖项。这解决了methanks将我发送到libs的错误,而不仅仅是说“使用maven”你救了我一天。谢谢!
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'