7

我正在尝试在我的 Android 应用程序中使用 javamail,但 proguard 抱怨它找不到一大堆东西。我尝试了在互联网上搜索时发现的各种补救措施,但似乎没有任何效果。有没有人让这个东西工作?谢谢。

我在默认的 proguard.cfg 中添加了一些 -dontwarn 命令,并成功消除了除此之外的所有警告消息:

Warning: org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class [Ljava.awt.datatransfer.DataFlavor;

此警告甚至与所有其他警告的格式都不相同。

4

3 回答 3

23

我正在使用 2.1 SDK,这可能会有所作为。我也有一个相当复杂的电子邮件。但是我现在已经对它进行了排序,升级到 proguard 4.6 并将以下行添加到我的 proguard,cfg 中:

-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**

-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}

-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}

最后一组行很重要。我通过对 javamail 包中的每个 jar 运行 tar tf 命令来获得它。

SDK 17 更新

Android SDK 17 对 jar 的加载方式进行了一些更改。如果您有一个使用外部 jar 的项目,升级到 SDK 17 或更高版本可能会破坏它。要解决此问题,请从菜单中选择 Project > Properties > Java Build Path > Order and Export,然后选中 javamail 使用的三个 jar 左侧的框。这可确保将 jar 导出到目标构建。如果没有这个修复,项目仍然会构建,但 javamail 将不再工作,proguard 也会失败。这根本不是一个proguard问题。这是一个 Android SDK 问题。不需要对 proguard.cfg 进行任何更改。

升级 SDK 的另一个结果是不再需要手动升级 proguard。

于 2011-03-26T13:42:16.557 回答
1

参照。ProGuard 手册 > 故障排除 > 警告:找不到超类或接口。

今天更详细的类似问题和答案:一个在 stackoverflow 上一个在 ProGuard 的帮助论坛上

乱码错误消息“[Ljava.awt.datatransfer.DataFlavor;” 已在 ProGuard 4.6 中解决。您可以简单地替换 Android SDK 中的 proguard.jar。或者,您可以通过列出引用类而不是引用类来解决此问题:“-dontwarn org.apache.harmony.awt.datatransfer.DataProxy”。

于 2011-03-25T22:09:51.013 回答
0

你在使用这个项目:javamail-android吗?

它对我来说毫无问题(诚然使用 2.3 SDK 中的默认 Proguard 设置),所以问题可能是标准 javamail 需要 Android 中不存在的 AWT 类。

相关的示例代码在 Android 中的 Sending Emails without User Intervention (no Intents)

于 2011-03-26T10:46:58.067 回答