2011-03-23 40 views
2

我想知道是否有可能跳過罐子裏的proguard,以便它不會混淆他們......我試圖做到這一點comand:-libraryjars myjar.jar但我保持與我的代碼的問題..android proguard跳過罐子

我想導出具有的JavaMail API爲Android和項目應該使用IMAPS協議中檢索我的Exchange電子郵件項目...

我使用的是信任管理器通過證書驗證(因爲我的exc服務器上有自簽名證書)。如果我編譯並運行應用程序而不導出它,一切正常。如果我導出應用程序,則會收到無效的證書錯誤。

在我的活動我通過SSLSocketFactory的一個屬性對象(即跳過證書驗證的一個):

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

所以我覺得這個問題能夠在JavaMail的罐子在某個地方,但我不知道如何讓所有類的jar從proguard跳過...

回答

3

在一般的ProGuard配置中,指定-libraryjars確實是首選解決方案。

在Android構建腳本中,libs目錄中的jar已經自動添加爲-injars,這使得這不太方便。儘管如此,您仍然可以指定保留所有代碼,例如所有公共類,字段和方法庫:

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

您可以通過只保留相關的類,例如細化配置

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

不知道庫的內部實現,這個細化可能需要一些實驗。

+0

所以如果我有一個名爲mail的包,並且在一個名爲com.sun.activation.registres的包內,我可以這樣做:-keep public class mail。** { public *; } 那個數據包會被proguard滑過?謝謝! – Cata 2011-03-24 06:37:15

+1

我也注意到這個mail.jar在javax.activation包裏面,這個包也在jre庫中。我的項目有jre庫導入,有沒有一種方法可以指定從哪裏跳過包的jar文件? – Cata 2011-03-24 06:48:17