java.lang.NoClassDefFound错误javax Gmail API

时间:2015-06-12 17:03:44

标签: java android android-studio google-api-java-client gmail-api

我正在处理我正在处理的gmail客户端中的异常。

是个例外 在getDefaultInstance行上触发的

java.lang.NoClassDefFound

   Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

我已经包含了javax jar,如下所示:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.google.android.gms:play-services:7.3.0'
    compile 'com.google.api-client:google-api-client:1.20.0'
    compile 'com.google.api-client:google-api-client-android:1.20.0'
    compile 'com.google.api-client:google-api-client-gson:1.20.0'
    compile 'com.google.apis:google-api-services-gmail:v1-rev29-1.20.0'
    compile  'javax.mail:javax.mail-api:1.5.2'
}

我用谷歌搜索了这个,但不太确定如何解决这个问题。我已经尝试过清理和重建,但在这两种情况下仍然会抛出异常。任何帮助,将不胜感激。

执行细节消息:

Didn't find class "com.sun.mail.util.MailLogger" on path: DexPathList[[zip file "/data/app/com.android.application.androidgmailclient-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

更新

我发现缺少的类“MailLogger”不是javax.mail-api的一部分而是它是1.5.0-b01的'javax.mail:mail:1.5.0-b01'jar的一部分是最新版本:

http://mvnrepository.com/artifact/javax.mail/mail/1.5.0-b01

所以我将compile 'javax.mail:mail:1.5.0-b01'包含在我的gradle文件中,然后在外部库中找到了jar。我将jar复制到app / libs然后点击“Add as Library”。我可以看到MailLogger类现在存在,这是异常中的轰炸。我的gradle文件现在看起来像这样:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0 rc2"

    packagingOptions{
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    defaultConfig {
        applicationId "com.android.app.androidgmailclient"
        minSdkVersion 16
        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 'com.google.android.gms:play-services:7.3.0'
    compile 'com.google.api-client:google-api-client:1.20.0'
    compile 'com.google.api-client:google-api-client-android:1.20.0'
    compile 'com.google.api-client:google-api-client-gson:1.20.0'
    compile 'com.google.apis:google-api-services-gmail:v1-rev29-1.20.0'
    compile 'javax.mail:mail:1.5.0-b01'
    compile files('libs/mail-1.5.0-b01.jar')
}

然而,当我现在去构建项目时,我得到了这个构建错误:

错误:任务':app:dexDebug'执行失败。

  

com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'command'/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/ java''以非零退出值2结束

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

发生此错误是因为您要添加两次相同的库。

compile 'javax.mail:mail:1.5.0-b01'
compile files('libs/mail-1.5.0-b01.jar')

删除其中一行然后我认为应该可以正常工作。

答案 1 :(得分:1)

不确定您是否已经解决了这个问题,但我发现您需要使用Android特定的Java Mail库。

# cd [Downloads]/ && yum install glibc-common-2.12-1.192.el6.x86_64.rpm glibc-2.12-1.192.el6.i686.rpm

我使用最新的Java Mail库遇到了您的错误和其他类似的错误,但切换到这些修复了所有这些库。

https://java.net/projects/javamail/pages/Android

Android Studio: NoClassDefFoundError

答案 2 :(得分:0)

我假设您已成功编译代码,但遇到了运行时异常。您需要在最终包中包含jar文件。请查看this onethis one