2

難読化されないように、proguard で jar をスキップできるかどうかを知りたいです...このコマンドでそれを実行しようとしています: -libraryjars myjar.jar しかし、コードに問題があり続けています..

Android 用の Javamail API を持つプロジェクトをエクスポートしようとしていますが、プロジェクトは imaps プロトコルを使用して交換メールを取得することになっています...

私はトラスト マネージャーを使用して証明書の検証に合格しています (exc サーバーに自己署名証明書があるため)。アプリをエクスポートせずにコンパイルして実行すると、すべて正常に動作します。アプリをエクスポートすると、無効な証明書エラーが発生します。

私のアクティビティでは、Property オブジェクトで SSLSocketFactory (証明書の検証をスキップするもの) を渡します。

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

したがって、問題はjavamail jarのどこかにあると思いますが、jarのすべてのクラスをproguardによってスキップさせる方法がわかりません...

4

1 に答える 1

4

一般的な ProGuard 構成では、 -libraryjars を指定することが実際に推奨されるソリューションです。

Android ビルド スクリプトでは、libs ディレクトリ内の jar が既に -injars として自動的に追加されているため、これはあまり便利ではありません。ただし、ライブラリ内のすべてのパブリック クラス、フィールド、およびメソッドなど、すべてのコードを保持するように指定することもできます。

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

関連するクラスのみを保持することで、構成を調整できる場合があります。

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

ライブラリの内部実装を知らなくても、この改良にはおそらく多少の実験が必要になるでしょう。

于 2011-03-23T22:18:04.220 に答える