我试图在我的Android应用程序中使用javamail,但是proguard提示它找不到的全部内容。我尝试了在搜索互联网时发现的各种补救措施,但似乎没有任何效果。有人让这个东西起作用吗?谢谢。
我在defauly proguard.cfg中添加了一些-dontwarn命令,并成功消除了除以下警告消息之外的所有警告消息:
Warning: org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class [Ljava.awt.datatransfer.DataFlavor;
此警告甚至与其他所有警告的格式都不相同。
最佳答案
我正在使用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或更高版本可能会破坏它。要解决此问题,请从菜单中选择“项目”>“属性”>“Java构建路径”>“顺序和导出”,然后选中javamail使用的三个jar左侧的复选框。这样可以确保将 jar 导出到目标版本。没有此修复程序,该项目仍将生成,但是javamail将不再起作用,并且proguard也将失败。这完全是而不是的问题。这是一个Android SDK问题。无需更改proguard.cfg。
升级SDK的另一个结果是,不再需要手动升级proguard。