Android中的java.lang.NoClassDefFoundError: javax.activation.DataHandler错误

22

我正在制作一个Android手机上的电子邮件发送应用程序,为此我包含了两个jar文件activation.jarmail.jar。但是当我运行这个应用程序并尝试发送邮件时,我在LogCat上收到以下错误。

java.lang.NoClassDefFoundError: javax.activation.DataHandler 

我是Android的新手,所以无法解决这个问题。请帮帮我。谢谢。


已经导入了DataHandler类。 - ngesh
3个回答

62

有一个适用于Android的javamail端口,你应该使用它。在你的应用程序中需要包含三个库:mail.jar、activation.jar和additionnal.jar(sic)。看起来你缺少了一些激活库所依赖的内容,这可能是因为你没有使用这个库的Android端口。

我曾经在一个项目中成功地使用过适用于Android的版本的javamail,并且它表现得非常好。


8
嗨,谢谢马克...我没有包含 additional.jar。感谢您的支持。 - Balban
1
我没有包含activation.jar和additional.jar文件。 - Nabin
2
这个在Maven里面有吗?这样我就可以把它作为一个库添加到Android Studio中了。 - Calyth
现在谷歌代码即将关闭,这个项目会被迁移到例如Github吗?我已经向在谷歌代码上发布该项目的Alexandre Thiel发送了这个问题。 - kumaheiyama
2
不幸的是它是GPL,这使得它对于几乎所有不是玩家的人都没有用处。 - Brill Pappin

9

JavaMail API 参考实现版本 1.5.5 及更高版本已内置支持Android,并包含OAuth2的支持。

根据文档:

Android 没有提供 Java 兼容的运行时环境,因此无法运行标准的 JavaMail 发布版。取而代之的是,为 Android 提供了特殊版本的 JavaMail。这个特殊版本的 JavaMail 依赖于特殊版本的 JavaBeans Activation Framework。

您可以通过将以下内容添加到您的 Android 应用程序的 build.gradle 文件中来尝试此版本:

 android {
     packagingOptions {
         pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
     }
 }

 repositories { 
     jcenter()
     maven {
         url "https://maven.java.net/content/groups/public/"
     }
 }

 dependencies {
     compile 'com.sun.mail:android-mail:1.5.5'
     compile 'com.sun.mail:android-activation:1.5.5'
 }

JavaMail 1.6.0开始:

Android版JavaMail需要至少Android API 19,对应于Android KitKat,目前是Android支持的最旧版本。


如果编写一个通用库,可以在服务器JVM上运行,请使用相同的依赖项android-mailandroid-activiation,而不是javax.mailjavax.activation-api - Abhinav Atul

0

如果你正在构建一个Java AWT应用程序或Android应用程序的邮件发送器,需要使用3个jar文件:

  • activation.jar(其中包含Mime.class等类)
  • javax_mail.jar (其中包含Session.class等类)
  • additional.jar (其中包含awt文件)

链接:https://code.google.com/archive/p/javamail-android/downloads

我发表评论是因为我在创建我的Java邮件发送器应用程序时遇到了太多问题,如java.lang.NoClassDefFoundError.javax.activation.DataHandler,然后我发现我忘了添加附加的jar文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接