【问题标题】:java.lang.NoClassDefFound error javax Gmail APIjava.lang.NoClassDefFound 错误 javax Gmail API
【发布时间】:2015-08-28 18:54:34
【问题描述】:

我正在使用的 gmail 客户端遇到异常。例外是

java.lang.NoClassDefFound 在 getDefaultInstance 行上触发

   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 中,然后点击“添加为库”。我可以看到 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: Process 'command'/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/ java'' 以非零退出值 2 结束

有什么想法吗?

【问题讨论】:

  • 请添加堆栈跟踪。
  • 添加异常详细信息
  • 你是如何运行你的程序的?从 IDE 还是命令行?
  • 我从 Android Studio 运行应用程序。
  • 您是否尝试反编译dex 并查看该类是否存在?

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


【解决方案1】:

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

compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'

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

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

Android Studio: NoClassDefFoundError

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-20
        • 2018-09-06
        • 2021-01-23
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 2020-06-21
        相关资源
        最近更新 更多