Я запускаю ProGuard для своего проекта Android и получаю следующие предупреждения:
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.
Я нашел здесь, чтобы исправить это, игнорируя его:
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-dontwarn android.net.http.**
Я не вижу способа удалить дубликаты из используемых библиотек. Даже после использования dontwarn
предупреждения не исчезают.
Это правильный способ обработки этого предупреждения, просто игнорируя его, или это может привести к проблемам?
java
android
android-studio
proguard
android-proguard
исповедовать
источник
источник
progaurd
файл правилОтветы:
Если вы добавите опцию Proguard,
-printconfiguration config.txt
вы увидите, что Proguard добавляетваши дублированные классы (например, SslError) представлены как в android.jar, так и в org.apache.http.legacy.jar
Proguard добавляет вторую банку, даже если вы этого не сделаете.
useLibrary 'org.apache.http.legacy'
Вот открытая ошибка, описывающая проблему.Так что теперь мы ничего не можем поделать с проблемой. Просто проигнорируйте это:
Нет необходимости хранить классы, пока они находятся в библиотеке jar (фактически, в библиотеке телефона). dontwarn не работает, потому что это не предупреждение, а примечание.
источник
useLibrary 'org.apache.http.legacy'
в build.gradle и поместить-dontnote
в файл proguard. Но все равно возникают проблемы. Я использовал api 22, работал нормально. Сейчас я обновляюсь до 23, я получаю эти ошибки при попытке собрать подписанный. Иногда оценка работает на неопределенный срок. Не знаю, что еще делать.proguard option -printconfiguration config.txt
?Вероятно, вы упомянули «-injars» и -libraryjars в вашем proguard-project.txt, учитывая, что последняя система сборки позаботится об их упоминании за вас ... так что вам не нужно упоминать это снова.
источник: http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass
Думаю, это поможет. :)
источник
Вы можете указать gradle не допускать дублирования классов (взять только первый), добавив в свой build.gradle следующее:
источник
android{jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } }
но получаю сообщение об ошибке Ошибка: метод Gradle DSL не найден: 'jar ()'jar {
- это задача в java-плагине gradle, поэтому, если вы,apply plugin: 'java'
то сможете использовать этот блок jar; он не попадает внутрь другого блока; он находится на корневом уровне build.gradle. ( см. этот документ Gradle ) Я использовал его в приложении, но не уверен, что это имеет значение.Вы можете попробовать это в своем build.gradle для всего, что указано в журналах как дубликаты. Я не уверен, что это сработает, поэтому попробуйте и сообщите, работает он или нет.
packagingOptions { exclude 'android.net.http.SslCertificate' }
источник