首先,我已经提到过类似的帖子,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.** {*;}
乍一看,这似乎有效,因为它编译时没有任何警告。但是,它无法读取消息内容并直接跳过它。我尝试了以下方法:
- -includelibraryjars 明确命名 javamail 所需的 3 个 jar 文件。
- - 按照新的 libs/include 格式,将 jar 删除为外部库。
- - 维护 proguard-android.txt 中的默认 android 设置
- - 遵循 proguard 常见问题解答中的故障排除指南。
- - 开始一个新项目并将源文件复制到它。
- - 尝试了各种 proguard 选项,包括 -dontshrink、keepnames 等
- - 痴迷项目/清洁
经过几个小时的挫折后,我发现这似乎有效:
-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.**
当然这很荒谬,因为我打开了 -dontobfuscate 和 -dontshrink。任何 proguard 和 javamail 专家都有解决方案吗?我是 ADT17,使用 2.1(api7) 进行构建。如果我可以将罐子完全排除在流程之外?在这一点上,任何建议都将是天赐之物。