Android Studio: NoClassDefFoundError

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I'm trying to build an app that sends an email using javamail and gmail's smtp service, but when I run it it crashes when I call Session.getInstance. After debugging it appears that it's a NoClassDefFoundError regarding com.sun.mail.util.MailLogger. I read elsewhere that I had to add an older mail package in order to get it, but I'm still getting errors.

Here's what I have in Android Studio:

 // Get system properties     Properties properties = System.getProperties();      // Setup mail server     properties.put("mail.smtp.host", host);     properties.put("mail.smtp.auth", "true");     properties.put("mail.smtp.starttls.enable", "true");     properties.put("mail.transport.protocol","smtp");     properties.put("mail.smtp.port", "587");      authenticator = getAuthenticator();     /* What getAuthenticator looks like:     return new javax.mail.Authenticator() {         protected PasswordAuthentication getPasswordAuthentication() {             return new PasswordAuthentication("myemail@gmail.com ", "password");         }     };     */      // Get the default Session object, with authentication     try {         session = Session.getInstance(properties, authenticator);     } catch (Error e) {         // Unnecessary code for debugging         int hold = 0;     }      // Create a default MimeMessage object.     MimeMessage message = new MimeMessage(session);      try {         // Set From: header field of the header.         message.setFrom(new InternetAddress(from));          // Set To: header field of the header.         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));          // Set Subject: header field         message.setSubject(subject);          // Now set the actual message         message.setText(content);          // Send message         Transport.send(message);     } catch (AddressException e) {         throw new Error("bad address");     } catch (MessagingException e){         throw new Error("bad message data");     } 

And my build looks like this:

apply plugin: 'com.android.application' android {      compileSdkVersion 22      buildToolsVersion "22.0.1"       defaultConfig {          applicationId "com.bsitpa.myfirstapp"          minSdkVersion 15          targetSdkVersion 22          versionCode 1          versionName "1.0"      }      buildTypes {          release {              minifyEnabled false              proguardFiles getDefaultProguardFile('proguard-android.txt'),    'proguard-rules.pro'          }      }      packagingOptions {         exclude 'META-INF/LICENSE.txt'      } }  dependencies {     compile fileTree(include: ['*.jar'], dir: 'libs')     compile 'com.android.support:appcompat-v7:22.2.1'     compile 'javax.mail:javax.mail-api:1.5.3'     //compile 'javax.mail:mail:1.5.0-b01'     compile files('mail-1.5.0-b01.jar') } 

The debugging error: "java.lang.NoClassDefFoundError: Failed resolution of Lcom/sun/mail/util/MailLogger"

And just so you know, I am completely new to AndroidStudio and Gradle.

Thanks a ton, Ryan

回答1:

Not sure if you solved this already, but I found you need to use an Android specific Java Mail library.

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

I was running into your error and other similar ones using the latest Java Mail libraries but switching to these fixed all of them.

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



回答2:

In Module Settings, Dependencies, make sure libs is set to "Compile"



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!