我试图在我的
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导出到目标构建.如果没有此修复程序,项目仍将构建,但javamail将不再起作用,proguard也将失败.这根本不是一个问题.这是一个Android SDK问题.不需要更改proguard.cfg.