Печать версии Okhttp во время выполнения

В нашем мобильном приложении javafx мы используем Okhttp3 4.9.1 для HTTP-запросов. Один из наших разработчиков сказал мне, что даже если мы укажем Okhttp как внешнюю зависимость, на устройстве Android он будет использовать только Okhttp, связанный с android. Поэтому я просто хотел проверить это и попытался распечатать версии okhttp во время выполнения, подобное этой . Не сработало (ClassNotFoundExceptions). Итак, мой вопрос:

  1. Мобильные приложения javafx используют okhttp в комплекте с android или тот, который мы указали как зависимость?
  2. Как получить версию 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

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