6

まず、私はすでに同様の投稿、Android、javamail、および proguardを参照しました

言及された解決策は、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 でデフォルトの Android 設定を維持
  4. -proguard faq のトラブルシューティング ガイドに従いました。
  5. - 新しいプロジェクトを開始し、ソース ファイルをそれにコピーしました。
  6. -dontshrink、keepnamesなどを含むさまざまなプロガードオプションを試しました
  7. -強迫的なプロジェクト/クリーン

数時間の欲求不満の後、これが私が見つけたもので、うまくいっているようです:

-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 をオンにしているので、それはばかげています。プロガードとJavamailの達人はこれに対する解決策を持っていますか? 私は ADT17 で、ビルドに 2.1(api7) を使用しています。ジャーをプロセスから完全に除外できたら?この時点で、どんなアドバイスも天の恵みになります。

4

3 に答える 3

18

問題が解決しました。上記のリンクに記載されている他のソリューションに問題がある人のために、ここにソリューションを投稿しました。

javamail (Mail.java) でヘルパー クラスを使用していたため、そのクラスを -keep として含める必要がありました。Android、javamail、および 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.**
于 2012-06-02T21:51:04.803 に答える