Android OkHttp支持低于21的SDK版本
OkHttp已经,除了通过将在2021年12月底之前得到支持的(并且可能只收到关键更新或错误修复)之外 假设您希望继续支持Android 4,就像我一样,因为10%的Android用户群仍然占很大比例,而且不想陷入死胡同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
对于所有sdk版本,是否有任何方法可以使用
sdk<21
的3.12
分支和sdk>=21的3.13
分支,而不是停留在3.12.x
分支上,当然有点像,可以对sdk<21
使用HttpUrlConnection
,对sdk>=21
使用OkHttp3.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如果您将您的第一条评论作为答案,我可以接受!