2012-06-01 30 views
3

首先,我已經給提到了類似的帖子,Android, javamail and proguard的Android,ProGuard,並將JAVAMAIL

提到的解決方案是明確地保持在下面的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.** {*;} 

乍一看,這似乎奏效,因爲它沒有任何警告地編譯。但是,它在閱讀郵件內容時失敗並跳過它。我試過以下內容:

  1. -includelibraryjars明確命名javamail所需的3個jar文件。
  2. - 刪除新的libs/include格式的jar作爲外部庫。
  3. - 在proguard-android.txt中維護默認安卓設置
  4. - 關注在proguard faq中的故障排除指南。
  5. - 啓動一個新項目並將其複製到源文件中。
  6. -tried各種proguard的選項,包括-dontshrink,keepnames等
  7. -obsessive項目/潔淨

無奈的幾個小時後,這裏是我發現,似乎工作:

-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)構建。如果我可以從這個過程中完全排除罐子?任何建議在這一點上都是天賜之物。

回答

8

問題已解決。我已經在此處發佈瞭解決方案,以解決上述鏈接中提到的其他解決方案存在問題的任何人。

因爲我使用的是javamail(Mail.java)的幫助類,所以我需要將該類作爲-keep包含,以便它可以工作。我編輯了在Android, javamail and 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.** 
+0

'-keep class com.sun.mail.handlers。** {*;}'爲我做了訣竅,即使收縮了。 –

+0

很好的解決方案。謝謝。 – Brave

+0

該解決方案允許編譯並保留郵件功能,即使在刪除-dontshrink語句時:-) – Pascal