2

我想知道是否可以在 proguard 中跳过 jars,以免混淆它们......我正在尝试用这个命令来做到这一点: -libraryjars myjar.jar 但我的代码一直有问题..

我正在尝试导出一个具有适用于 android 的 javamail api 的项目,并且该项目应该使用 imaps 协议检索我的交换电子邮件...

我正在使用信任管理器来通过证书验证(因为我的 exc 服务器上有自签名证书)。如果我编译并运行应用程序而不导出它,一切正常。如果我导出应用程序,我会收到无效的证书错误。

在我的活动中,我在 Property 对象上传递了 SSLSocketFactory(跳过证书验证的那个):

props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.socketFactory.class", "mail.utils.DummySSLSocketFactory");  

所以我认为问题可能出在javamail jar中,但我不知道如何让proguard跳过jar中的所有类......

4

1 回答 1

4

在一般的 ProGuard 配置中,指定 -libraryjars 确实是首选解决方案。

在 Android 构建脚本中,libs 目录中的 jars 已经自动添加为 -injars,这使得这不太方便。您仍然可以指定保留所有代码,例如库中的所有公共类、字段和方法:

-keep public class mail.** {
  public *;
}

您可以通过仅保留相关类来优化配置,例如

-keep class mail.imaps.socketFactory
-keep class mail.utils.DummySSLSocketFactory
...

在不知道库的内部实现的情况下,这种改进可能需要一些实验。

于 2011-03-23T22:18:04.220 回答