Androidプロジェクトに対してProGuardを実行すると、次の警告が表示されます。
Note: duplicate definition of library class [org.Apache.http.conn.scheme.HostNameResolver]
Note: duplicate definition of library class [org.Apache.http.conn.scheme.SocketFactory]
Note: duplicate definition of library class [org.Apache.http.conn.ConnectTimeoutException]
Note: duplicate definition of library class [org.Apache.http.params.HttpParams]
Note: duplicate definition of library class [Android.net.http.SslCertificate$DName]
Note: duplicate definition of library class [Android.net.http.SslError]
Note: duplicate definition of library class [Android.net.http.SslCertificate]
Note: there were 7 duplicate class definitions.
here を見つけて、無視してこれを修正します:
-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**
-keep class Android.net.http.** { *; }
-dontwarn Android.net.http.**
使用済みライブラリから重複を削除する方法がわかりません。 dontwarn
を使用した後でも、警告は消えません。
これは無視するだけでこの警告を処理する正しい方法ですか、それとも問題につながる可能性がありますか?
プロガードオプション-printconfiguration config.txt
を追加すると、プロガードオプションが追加されます
-libraryjars 'D:\ tools\Android\platforms\Android-23\Android.jar'
-libraryjars 'D:\ tools\Android\platforms\Android-23\optional\org.Apache.http.legacy.jar'
重複したクラス(SslErrorなど)がAndroid.jarとorg.Apache.http.legacy.jarの両方に表示されます
Proguardは、useLibrary 'org.Apache.http.legacy'
を実行しなくても2番目のjarを追加します。ここに 未解決バグ が問題を説明しています。
したがって、この問題については何もできません。無視してください:
-dontnote Android.net.http.*
-dontnote org.Apache.commons.codec.**
-dontnote org.Apache.http.**
ライブラリーjar(実際には電話のライブラリー)にある限り、クラスを保持する必要はありません。 dontwarnは警告ではなく、メモであるため機能しません。
おそらく、あなたはproguard-project.txtで「-injars」と「libraryjars」に言及しているので、最新のビルドシステムがそれらに言及するのを考慮しているので、再度言及する必要はありません。
ソース: http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass
これが役立つと思います。:)
Build.gradleに以下を追加することで、重複するクラスを許可しないように(最初のクラスのみを取得するように)gradleに指示できます。
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}