Контекст
Я пытаюсь включить Flipper отладочный инструмент в мое приложение с сетевым плагином. Чтобы это было полезно, мне нужно добавить перехватчик Flipper Network в мой модуль HTTP, который предоставляет клиент OkHttp для моего приложения. Я включаю только библиотеки Flipper в конфигурации отладки. Я включаю Flipper deps в мой http-модуль следующим образом:
dependencies {
[...]
debugImplementation dep('com.facebook.flipper:flipper')
debugImplementation dep('com.facebook.flipper:flipper-network-plugin')
}
Проблема
Проблема, с которой я сталкиваюсь, заключается в том, что Flipper транзитивно зависит от okhttp:3.14.1'
и наше приложение поддерживает клиентов до уровня API 16. Теперь проблема в том, что ниже API 21 (Lolipop) Я не могу использовать любую версию okhttp выше 3.12.x.
Из-за этого, другие вещи, которые зависят от OkHttp, начинают использовать версию OkHttp
выше 8.12.x, что делает инициализацию HTTP-разрыва.
11-08 13:48:28.394 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: java.util.Objects
at okhttp3.CertificatePinner.withCertificateChainCleaner(CertificatePinner.java:231)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:238)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
Глядя на дерево зависимостей, оноМне кажется, что из-за того, что Flipper требует версии 3.14.1 OkHttp, другие части моего приложения, которым требуется клиент OkHttp в конфигурации отладки, также используют 3.14.1 вместо 3.13.1:
debugAndroidTest
[...]
+--- project :libs:http-retrofit
| +--- project :libs:http (*)
| +--- com.squareup.okhttp3:okhttp:3.12.3 -> 3.14.1 (*)
| +--- javax.inject:javax.inject:1
| +--- com.squareup.retrofit2:retrofit:2.5.0
| | \--- com.squareup.okhttp3:okhttp:3.12.0 -> 3.14.1 (*)
Как я могу заставить Gradle не изменять версию зависимости OkHTTP где-либо еще?
Если я использую только Flipper, использую версию 3.14.1, я могу легко исключить установку Flipper в коде, проверив APIуровень.