Android,Proguard和Javamail

Thu*_*sDP 5 android jakarta-mail proguard

首先,我已经提到过类似的帖子,Android,javamail和proguard

提到的解决方案是在proguard-project.txt中明确地保留以下内容:

-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.** {*;}
Run Code Online (Sandbox Code Playgroud)

乍一看,这似乎是有效的,因为它编译时没有任何警告.但是,它无法读取消息内容,只是跳过它.我尝试过以下方法:

  1. -includelibraryjars明确命名javamail所需的3个jar文件.
  2. - 将jar作为外部库删除,遵循新的libs/include格式.
  3. - 维护proguard-android.txt中的默认android设置
  4. - 跟随proguard常见问题解答中的故障排除指南.
  5. - 启动一个新项目并将源文件复制到它.
  6. - 各种程序选项,包括-dontshrink,keepnames等
  7. - 专业项目/清洁

经过几个小时的挫折之后,我发现这似乎有用了:

-dontobfuscate
-dontshrink
-keepdirectories
-keeppackagenames javax.mail.**
-keeppackagenames javax.activation.**
-keeppackagenames com.sun.mail.**
-keeppackagenames myjava.**
-keeppackagenames org.apache.harmony.**
-keeppackagenames mailcap.**
-keeppackagenames mimetypes.**
-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.** {*;}

-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**
Run Code Online (Sandbox Code Playgroud)

当然这是荒谬的,因为我正在开启-dontobfuscate和-dontshrink.任何proguard和javamail专家都有解决方案吗?我是ADT17,使用2.1(api7)进行构建.如果我可以完全从过程中排除罐子呢?在这一点上,任何建议都是天赐之物.

Thu*_*sDP 15

问题解决了.我已经在这里发布了解决方案,以解决上面链接中提到的其他解决方案的问题.

因为我正在使用带有javamail(Mail.java)的帮助器类,所以我需要将该类包含为-keep以便它可以工作.我编辑了Android,javamail和proguard提供的解决方案以包含帮助程序类,因为许多人使用这个,而另一个解决方案可能会失败,如果没有它.

把它放在你的proguard-project.txt文件中.我使用了默认的android设置.

-dontshrink
-keep class javax.** {*;}
-keep class com.sun.** {*;}
-keep class myjava.** {*;}
-keep class org.apache.harmony.** {*;}
-keep public class Mail {*;}
-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**
Run Code Online (Sandbox Code Playgroud)