Плагин Android Gradle 8.0.0 с Kotlin 1.8.20 вызывает проблему минимизации OkHttp3 R8

После обновления до Kotlin 1.8.20 с помощью Android Gradle Plugin (AGP) 8.0.0 я внезапно получаю следующие сообщения об ошибках при запуске задачи :app:minifyProdWithR8 Gradle:

Missing class org.bouncycastle.jsse.BCSSLSocket (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 5 other contexts)
Missing class org.bouncycastle.jsse.provider.BouncyCastleJsseProvider (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.<init>())
Missing class org.conscrypt.Conscrypt$Version (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int))
Missing class org.conscrypt.Conscrypt (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int) and 4 other contexts)
Missing class org.conscrypt.ConscryptHostnameVerifier (referenced from: okhttp3.internal.platform.ConscryptPlatform$DisabledHostnameVerifier)
Missing class org.openjsse.javax.net.ssl.SSLParameters (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List))
Missing class org.openjsse.javax.net.ssl.SSLSocket (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 1 other context)
Missing class org.openjsse.net.ssl.OpenJSSE (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.<init>())
Missing class org.slf4j.impl.StaticLoggerBinder (referenced from: void org.slf4j.LoggerFactory.bind() and 3 other contexts)

В моем проекте есть клиентская библиотека Ktor io.ktor:ktor-client-android:2.2.4, которая, вероятно, зависит от okhttp3 и других недостающих классов. Кто-нибудь еще испытывает эту проблему?

Простое добавление правил исключения в proguard-rules.pro не кажется мне правильным на данный момент.

3
0
771
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Между тем я мог решить проблему самостоятельно. Для всех, кто сталкивается с этой проблемой. Вот обходной путь, который я использую сейчас:

Основываясь на следующем обсуждении и этом запросе на включение в самой библиотеке OkHttp, я добавил следующие правила в свой proguard-rules.pro файл:

-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
-dontwarn org.slf4j.impl.StaticLoggerBinder

Эти сообщения, вероятно, являются предупреждениями перед обновлением до AGP 8.0.0. С 7.0.0 добавлены предупреждения об отсутствующих классах, а также анонсирован план по их ошибкам.

Также см. https://issuetracker.google.com/278765639, где сообщалось об этой проблеме.

Файл app/build/outputs/mapping/release/missing_rules.txt генерируется AGP с директивами -dontwarn, необходимыми для избежания ошибки компиляции.

Просто добавьте следующий код в свой файл Gradle:

  packagingOptions {
        resources {
            META-INF/proguard/okhttp3.pro
               }

после этого попробуйте собрать релизную версию также перейдите в app/build/outputs/mapping и добавьте все строки с -dontwarn в файл proguard

для меня было ниже строк:

-dontwarn java.lang.management.ManagementFactory
-dontwarn java.lang.management.RuntimeMXBean
  • Я использовал версию журнала okhttp 5.0.0-alpha.11.

Другие вопросы по теме