1

在我们的javafx移动应用程序中,我们使用Okhttp3 4.9.1来处理 http 请求。我们的一位开发人员告诉我,即使我们将 Okhttp 指定为外部依赖项,在 android 设备中它也只会使用与 android 捆绑的 Okhttp。所以我只是想验证它并尝试像这样在运行时打印 okhttp 版本。它不起作用(ClassNotFoundExceptions)。所以,我的问题是,

  1. javafx 移动应用程序使用“与 android 捆绑的 okhttp ”还是我们指定为依赖项的应用程序?
  2. 如何在 javafx 移动应用程序中获取与 android 捆绑的“okhttp”版本?
4

1 回答 1

1

如果您将 OkHttp 捆绑到您的应用程序中,它将使用该版本而不是内置的 Android 版本。它们的包装也不同,所以你不能轻易弄错它们。我不认为你可以直接使用https://android.googlesource.com/platform/external/okhttp/+/master/repackaged/okhttp/src/main/java/com/android/okhttp/OkHttpClient.java应用程序,但我不确定。

您应该可以okhttp3.OkHttp.VERSION直接使用,但它有一个错误,即它是 const 值,因此在编译时内联。因此,假设未应用 proguard 并移动类,您可以使用反射阅读此内容。

您还可以查看使用此版本字段的拦截器中的默认用户代理。

Class.forName("okhttp3.internal.Version")行不通,因为它是一个内部细节,并且已经移动。它被移入 4.7.0 https://github.com/square/okhttp/commit/72cb889c867481c578bce663d3ea0d92e648fcac#diff-6e62984ccabc6dc7bb9bbda58768b4af28bf789f6415d09c2d89de4387ecf816

于 2021-12-25T11:53:25.447 回答