我使用javax.mail来从我的活动中发送邮件。为了开发这个应用程序,我使用Android Studio。
要使用此方法,需要3个.jar文件(mail.jar、activation.jar和additionnal.jar)。我阅读的所有信息都说要将这3个文件放在libs文件夹中,将它们添加为库并在gradle.build中命名。
但是当我意识到“添加到库”选项不显示时,我遇到了第一个问题。所以我尝试手动在模块设置、gradle.build等中添加依赖项……但是这些方法都没有起作用,我无法选择导入。
但最终我找到了一种方法,乍一看似乎可行。进入模块设置/应用程序/依赖项,我选择+号并选择“库依赖项”。然后我使用Maven Central搜索,找到了以下2个:
- javax.mail:mail:1.5.0-b01
- javax.activation:activation:1.1.1
然后我转到顶级gradle.build并添加:
allprojects {
repositories {
mavenCentral()
}
}
接着,在应用程序的内部 gradle.build 中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'javax.mail:mail:1.5.0-b01'
compile 'javax.activation:activation:1.1.1'
}
但即便如此,我仍无法使其正常工作。它开始运行并似乎进展顺利,但在发送电子邮件时,应用程序会崩溃并显示以下内容:
java.lang.NoClassDefFoundError: javax.activation.DataHandler
at com.myapp.mail.MailSender.sendMail(MailSender.java:64)
at com.myapp.TrackingService.sendEmail(TrackingService.java:341)
at com.myapp.TrackingService.doLocationUpdate(TrackingService.java:281)
at com.myapp.TrackingService.onStartCommand(TrackingService.java:82)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2726)
at android.app.ActivityThread.access$2100(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5146)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
at dalvik.system.NativeStart.main(Native Method)
更新- 添加了gradle.build文件:
顶层gradle.build文件:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
应用内 gradle.build:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.irvvin.trackme"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res/values-v14'] } }
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'javax.mail:mail:1.5.0-b01'
compile files('libs/activation.jar')
//Now I take "mail" from maveen and "activation" from library, but I have tried diferent
// combiations, such as selecting all from library (the imports where not showing) and
// all from maveen (works but shows this error).
//With the actual combination, also throws this same error.
}
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_21\bin\java.exe'' finished with non-zero exit value 2.
- masmicclasspath 'com.android.tools.build:gradle:1.1.3'
这是1.1.0中的一个错误,但仍不确定它是否能够正常工作。只能冒险一试了。 - Mohammad Arman