Android,javamail和proguard

我试图在我的 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.

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...