2015-05-31 35 views
6

我的应用程序出现问题,我想创建一个连接到我的服务器的简单XMPP客户端。 我在启动应用程序时遇到了以下问题(编译运行无问题),但我的应用程序立即关闭。Smack引发“NoClassDefFoundError:失败的解决方案:Lorg/jxmpp/util/XmppStringUtils”

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 

但我有点找不到有关失踪 “XmppStringUtils”

这东西是在第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); 
} 

代码,这是我进口

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; 

加上我的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() 
    } 
} 

谢谢

+0

你解决了这个错误? – CoronaPintu

+0

是的,我忘了在第二个build.gradle文件中添加依赖关系。 检查您是否拥有$ root/build.gradle和$ root/app/build.gradle中的所有依赖项。这解决了我的错误 –

回答

2

NoClassDefFoundError's javadoc

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

Java使用动态链接,这意味着符号(类名,...)第一次使用时有联系。正如Mohit已经指出的那样,看起来你缺少JXMPP库,这是Smack的(传递)依赖。我假设你只需将Smack添加到libs/文件夹中就可以将Smack添加到您的项目中。不建议使用这种方法,因为您很容易错过Smack的一种过度依赖,就像它发生在您身上一样。而是使用一个能够解决像Maven或Gradle这样的依赖关系的构建系统。另请参见:

+0

谢谢,忘了在第二个.gradle文件中添加“编译...”行。像现在一样的魅力,没有手动图书馆工作 –

8

您需要四个额外的jar文件。

1)jxmpp-core.jar添加

2)jxmpp-jid.jar

3)jxmpp-STRINGPREP-的libidn

4)jxmpp-util的缓存

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

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

+2

感谢实际送我到库而不是只是说“使用maven” –

+0

阿门到... –

3

问题来自于推了更新的错误一个依赖de.measite.minidns。所以我通过排除自动依赖和包括上一个稳定版本来解决这个问题。它解决了我的问题。

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' 
+0

你节省了我的一天。非常感谢! –

相关问题