更新到 Android Studio 3.1 后,项目未构建:程序类型已存在:com.sun.activation.registries.LineTokenizer

After update to Android Studio 3.1 the project does not build: Program type already present: com.sun.activation.registries.LineTokenizer

我刚刚将我的 Android Studio 更新到 3.1 版,我对一条未知错误消息感到惊讶:程序类型已存在:com.sun.activation.registries.LineTokenizer

> :testeapn:transformClassesWithDexBuilderForDebug AGPBI:
> {"kind":"error","text":"Program type already present: com.sun.activation.registries.LineTokenizer","sources":[{}],"tool":"D8"}
> :testeapn:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
> 
> FAILURE: Build failed with an exception.
> 
> * What went wrong: Execution failed for task ':testeapn:transformDexArchiveWithExternalLibsDexMergerForDebug'.

经过大量挖掘后,我意识到问题出在 javax.mail 库上。因此,在删除每个 .jar 和对该库的所有提及后,我可以重新构建,但我删除了我的应用程序的此功能。

现在我必须让我的应用程序再次发送邮件,但我找不到如何执行此操作,我向您寻求帮助。

我google很多,在https://javaee.github.io/javamail/Android中发现了新信息(至少对我而言):我们不应该添加additionnal.jarmail.jaractivation.jar。我们必须添加新的依赖项:

implementation 'com.sun.mail:android-mail:1.6.1'
implementation 'com.sun.mail:android-activation:1.6.1'

但是,在我的 app.gradle 中添加这些行之后,没有写一行代码,我又遇到了上述错误。

有人知道这条消息是什么意思以及该怎么做吗?

从 3 个 jar(additionnal.jarmail.jaractivation.jar)升级到 com.sun.mail:android-mail:1.6.1com.sun.mail:android-activation:1.6.1 后,我遇到了与您完全相同的问题.我也在使用 Android Studio 3.1。

我的解决方案是,不使用 1.6.1,而是使用稍旧的版本 1.6.0。错误消失,应用程序重新构建并运行。

implementation 'com.sun.mail:android-mail:1.6.0' implementation 'com.sun.mail:android-activation:1.6.0'


一些细节

我在那里做了一些挖掘。问题似乎是 com.sun.mail:android-activation:1.6.1 依赖于 javax.activation:activation:1.1,并且这两个包都包含 com.sun.activation.registries.* 类。它导致构建失败。

相反,com.sun.mail:android-activation:1.6.0 中不存在依赖项。

依赖图由运行gradlew :app:dependencies --configuration debugRuntimeClasspath生成。

  • 使用 1.6.0

    debugRuntimeClasspath - Resolved configuration for runtime for variant: debug +--- com.sun.mail:android-mail:1.6.1 | +--- com.sun.mail:android-activation:1.6.1 | | \--- javax.activation:activation:1.1 | \--- javax.activation:activation:1.1 +--- com.sun.mail:android-activation:1.6.1 (*) +---

  • 使用 1.6.0

    debugRuntimeClasspath - Resolved configuration for runtime for variant: debug +--- com.sun.mail:android-mail:1.6.0 | \--- com.sun.mail:android-activation:1.6.0 +--- com.sun.mail:android-activation:1.6.0

您也可以在下面的屏幕截图中看到它。

Android Studio screen shot when using version 1.6.1

虽然我想向他们的开发人员发布错误报告。他们的旧 Issue Tracker 页面 (https://github.com/javaee/javamail/issues) is closed, and their new project page on Eclipse Foundation (https://projects.eclipse.org/projects/ee4j.javamail) 速度极慢,我几乎无法打开它。