OkHttp支持的SDK版本少于21

时间:2019-02-12 14:24:06

标签: android okhttp okhttp3

OkHttp具有recently dropped support for Android 4,但受separate 3.12.x branch支持的情况除外,该支持将一直支持到2020年12月(可能只收到重要更新或错误修正)。

假设您希望像我一样继续支持Android 4,因为10%的Android用户仍占很大比例,并且不想陷入死胡同的分支。

有没有办法为所有{sdk版本使用3.12.x分支,而是为3.12使用sdk < 21分支,为{{ 1}},这有点像当然可以对3.13使用sdk >= 21和对HttpUrlConnection使用OkHttp sdk < 21吗?

1 个答案:

答案 0 :(得分:1)

我实际上在为NativeScript创建的项目中创建了一个示例:nativescript-http

我希望minSdk >= 21使用OkHttp4,而minSdk > 17 && minSdk < 21使用LTS版本:OkHttp 3.12。我正在使用minSdk 17,因为它与NativeScript一样低。当然,您可以降低到OkHttp3支持的水平。

这不只是为不同的minSdk版本创建样式而简单,也许是由于NativeScript通过插件处理依赖项的方式。我花了半天的时间才知道要这样做,所以我将其发布在这里,它可能会对某人有所帮助:

android {
  // ... other config.
  flavorDimensions "api"

  productFlavors {
    minApi21 {
      dimension "api"
      minSdkVersion 21
      versionNameSuffix "-minApi21"
    }

    minApi17 {
      dimension "api"
      minSdkVersion 17
      versionNameSuffix "-minApi17"
    }
  }
}

android.applicationVariants.all { variant ->
  if (variant.name.contains("minApi17")) {
    variant.getCompileConfiguration().resolutionStrategy.force "com.squareup.okhttp3:okhttp:3.12.+"
    variant.getRuntimeConfiguration().resolutionStrategy.force "com.squareup.okhttp3:okhttp:3.12.+"
  }

  variant.outputs.each { output ->
    if (variant.name.contains("minApi17")) {
      output.versionCodeOverride = 10000000 + variant.versionCode
    } else {
      output.versionCodeOverride = 20000000 + variant.versionCode
    }
  }
}

android中的部分是创建两种产品口味,一种用于minSdk 17,一种用于minSdk 21。

android.applicationVariants中的部分由两部分组成:

  1. 确保风味minApi17对minSdk 17使用3.12。+版
  2. 确保每种口味都有其自己的版本versionCode。它从清单中获取版本,对minApi17执行(10000000 + manifestVersionCode),对minApi21执行(20000000 + manifestVersionCode)。 构建发行版时,这将创建2个APK,一个用于Android 4(app-minApi17-release.apk),一个用于Android 5(app-minApi21-release.apk)。您还可以将其与ABI拆分相结合。

当您将两个APK都上传到Playstore时,Google将确保将正确的APK分配给不同的设备。