Intereting Posts
Реагировать собственные свойства textDecoration, не работающие на Android Фильтр и активность Android Manifest-intent Json Parsing из Url В Android, не работает Поместите блок в центр ScrollView ./fastboot: нет такого файла или каталога Android: печать Bluetooth Заменить ListFragment с помощью фрагмента внутри ViewPager с вкладками Длительный эффект анимации перехода на линейную компоновку Как сделать сегментированный поиск / слайдер похожим на следующий? WebSockets для Android и приложений для iOS Получение ошибки «Активность Java.lang.IllegalStateException была уничтожена» при использовании вкладок с ViewPager Новая ошибка библиотеки Android Design с AppBarLayout и панелью инструментов WearableListView.Item отсутствует в носимой библиотеке поддержки 1.1 Родные объявления против межстраничных объявлений против баннеров, которые будут генерировать больше доходов? Как реализовать собственные объявления? Как преобразовать строку в заголовок в android?

ProGuard: дублированное определение класса библиотеки?

Я запускаю свой 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 предупреждения не исчезают.

Это правильный способ справиться с этим предупреждением, просто игнорируя его или это может привести к проблемам?

Если вы добавите опцию -printconfiguration config.txt вы увидите, что proguard добавляет

-libraryjars 'D: \ tools \ android \ platform \ android-23 \ android.jar'

-libraryjars 'D: \ tools \ android \ platform \ android-23 \ optional \ org.apache.http.legacy.jar'

Ваши дублированные классы (например, SslError) представлены как в android.jar, так и в org.apache.http.legacy.jar

Proguard добавляет вторую банку, даже если вы не useLibrary 'org.apache.http.legacy' Вот открытая ошибка, описывающая проблему.

Так что теперь мы ничего не можем с этим поделать. Просто игнорируйте это:

 -dontnote android.net.http.* -dontnote org.apache.commons.codec.** -dontnote org.apache.http.** 

Нет необходимости держать классы до тех пор, пока они находятся в библиотечном банке (фактически, на телефоне). Dontwarn не работает, потому что это не предупреждение, это записка.

Вероятно, вы упоминали «-injars» и -libraryjars в вашем proguard-project.txt, учитывая, что последняя система сборки заботится о том, чтобы упомянуть их для вас. Так что вам не нужно упоминать об этом снова.

Источник: http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass

Я думаю, это поможет. 🙂

Вы можете сказать, что gradle не допускает дублирование классов (возьмите только первое), добавив следующее в ваш build.gradle:

 jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } 

Вы можете попробовать это в своем build.gradle для всего, что обозначено как дублирующее в журналах. Я не уверен, что это сработает, поэтому попробуйте и сообщите, работает ли это или нет.

 packagingOptions { exclude 'android.net.http.SslCertificate' }