首先,我已經給提到了類似的帖子,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.** {*;}
乍一看,這似乎奏效,因爲它沒有任何警告地編譯。但是,它在閱讀郵件內容時失敗並跳過它。我試過以下內容:
- -includelibraryjars明確命名javamail所需的3個jar文件。
- - 刪除新的libs/include格式的jar作爲外部庫。
- - 在proguard-android.txt中維護默認安卓設置
- - 關注在proguard faq中的故障排除指南。
- - 啓動一個新項目並將其複製到源文件中。
- -tried各種proguard的選項,包括-dontshrink,keepnames等
- -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)構建。如果我可以從這個過程中完全排除罐子?任何建議在這一點上都是天賜之物。
'-keep class com.sun.mail.handlers。** {*;}'爲我做了訣竅,即使收縮了。 –
很好的解決方案。謝謝。 – Brave
該解決方案允許編譯並保留郵件功能,即使在刪除-dontshrink語句時:-) – Pascal