android proguard,跳过罐子

时间:2011-03-23 20:23:35

标签: android proguard

我想知道是否有可能跳过proguard中的jar,这样它就不会混淆它们......我试图用这个命令做到这一点:-libraryjars myjar.jar但是我的代码一直有问题..

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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