Печать версии Okhttp во время выполнения
В нашем мобильном приложении javafx мы используем Okhttp3 4.9.1 для HTTP-запросов. Один из наших разработчиков сказал мне, что даже если мы укажем Okhttp как внешнюю зависимость, на устройстве Android он будет использовать только Okhttp, связанный с android. Поэтому я просто хотел проверить это и попытался распечатать версии okhttp во время выполнения, подобное этой . Не сработало (ClassNotFoundExceptions). Итак, мой вопрос:
- Мобильные приложения javafx используют okhttp в комплекте с android или тот, который мы указали как зависимость?
- Как получить версию okhttp в комплекте с android в мобильном приложении javafx?
1 ответ
Если вы объедините OkHttp в свое приложение, оно будет использовать эту версию вместо встроенной версии Android. Они также различаются по упаковке, так что вы не можете их легко перепутать. Я не думаю, что вы можете напрямую использовать https://android.googlesource.com/platform/external/okhttp/+/master/repackaged/okhttp/src/main/java/com/android/okhttp/OkHttpClient.java в своем приложение, но я не уверен.
Вы должны быть в состоянии использовать
okhttp3.OkHttp.VERSION
напрямую, но у него есть ошибка, заключающаяся в том, что это константное значение, поэтому оно встроено во время компиляции. Таким образом, вы можете прочитать это, используя отражение, предполагая, что proguard не применяется и перемещает классы.
Вы также можете посмотреть пользовательский агент по умолчанию в перехватчике, который использует это поле версии.
Class.forName("okhttp3.internal.Version")
не будет работать, потому что это внутренняя деталь, и с тех пор она переехала. Он был перемещен в 4.7.0 https://github.com/square/okhttp/commit/72cb889c867481c578bce663d3ea0d92e648fcac#diff-6e62984ccabc6dc7bb9bbda58768b4af28bf789f6415d09c2d89de4387ecf816