Android OkHttp支持低于21的SDK版本

Android OkHttp支持低于21的SDK版本,android,okhttp,Android,Okhttp,OkHttp已经,除了通过将在2021年12月底之前得到支持的(并且可能只收到关键更新或错误修复)之外 假设您希望继续支持Android 4,就像我一样,因为10%的Android用户群仍然占很大比例,而且不想陷入死胡同 对于所有sdk版本,是否有任何方法可以使用sdk=21的3.13分支,而不是停留在3.12.x分支上,当然有点像,可以对sdk=21使用OkHttp3.13?我实际上在为NativeScript创建的项目中创建了一个示例: 我希望minSdk>=21使用OkHttp4,minS

OkHttp已经,除了通过将在2021年12月底之前得到支持的(并且可能只收到关键更新或错误修复)之外

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


对于所有sdk版本,是否有任何方法可以使用
sdk<21
3.12
分支和
sdk>=21的
3.13
分支,而不是停留在
3.12.x
分支上,当然有点像,可以对
sdk<21
使用
HttpUrlConnection
,对
sdk>=21
使用OkHttp
3.13

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

我希望
minSdk>=21
使用OkHttp4,
minSdk>17&&minSdk<21
使用LTS版本:okhttp3.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中的部分由两部分组成:

  • 确保香精米纳皮17在minSdk 17中使用3.12.+版
  • 确保每种风格都有自己的构建版本代码。它从清单中获取版本,并对minApi17执行(10000000+manifestVersionCode),对minApi21执行(20000000+manifestVersionCode)。 当您构建一个版本时,这将创建两个APK,一个用于Android 4(app-minApi17-release.APK),一个用于Android 5(app-minApi21-release.APK)。您还可以将其与ABI拆分相结合

  • 当您将两个APK上传到Playstore时,Google将确保将正确的APK get分发到不同的设备。

    是的,这是可能的。制作两个,一个使用
    minSdkVersion 21
    和OkHttp 3.13+,另一个使用默认的
    minSdkVersion
    和OkHttp<3.13。下面是一个如何包含不同风格的不同依赖项的示例:请记住,您不能在
    src/main
    中的公共代码中使用新API。仅在
    src/
    中。有趣。但我的项目也有不同的风格:
    free
    pro
    devfree
    devpro
    ,每个都有稍微不同的设置。那么,由于我们需要将每种方法分开,所以采用您的方法是否不可能(或非常困难)<代码>免费okhttp旧版
    免费okhttp新版
    ,等等?如果新的
    3.13
    分支是一个完全独立的库(可能是
    okhttp4
    ),这样我们就可以独立使用它,并在基于
    android.os.Build.VERSION.SDK_INT
    的代码中选择它们,不是会容易得多吗?搜索“风味维度”。看起来你应该有3个维度,“环境”带有“生产”和“开发”,“货币化”带有“免费”和“付费”,而“sdk”带有“遗留”和“棒棒糖”。不要将其限制为okhttp。所有的事情都需要API 21。不要在运行时决定这一点。未使用的代码不应该出现在apk中。谢谢,这很有帮助。听起来我需要稍微调整一下我的项目。非常感谢您的帮助。@EugenPechanec如果您将您的第一条评论作为答案,我可以接受!