我在为NativeScript创建的项目中创建了一个示例:
nativescript-http。
我希望
minSdk >= 21
使用OkHttp4,而
minSdk > 17 && minSdk < 21
使用LTS版本:OkHttp 3.12。我使用minSdk 17,因为这是NativeScript支持的最低版本。当然,你也可以选择低于OkHttp3支持的版本。
由于NativeScript通过插件处理依赖关系,所以创建不同minSdk版本的flavors并不像想象中那么简单。我花了半天时间才弄明白怎么做,所以在这里发布一下,希望能帮到有需要的人。
android {
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. 确保flavor minApi17使用版本3.12.+适用于minSdk 17
2. 确保每个flavor都有自己的build versionCode。它从清单中获取版本并为minApi17执行(10000000 + manifestVersionCode),为minApi21执行(20000000 + manifestVersionCode)。这将在构建发布时创建2个APK,一个用于Android 4 (app-minApi17-release.apk),一个用于Android 5 (app-minApi21-release.apk)。您还可以将其与ABI拆分结合使用。
当您将两个APK上传到Play商店时,谷歌会确保将适当的APK分发给不同的设备。
minSdkVersion 21
和 OkHttp 3.13+,另一个带有默认的minSdkVersion
和 OkHttp < 3.13。以下是如何为不同变体包含不同依赖项的示例:LeakCanary 自述文件请记住,您不能在公共代码(src/main
)中使用新的 API,只能在src/<newOkHttpFlavor>
中使用。 - Eugen Pechanecfree
,pro
,devfree
和devpro
,每个版本都有略微不同的设置。这是否使得采用你的方法变得不可能(或非常困难),因为我们需要将它们拆分成free-okhttp-old
,free-okhttp-new
等?如果新的3.13
分支是完全独立的库(也许叫做okhttp4
),那么我们就可以独立使用它,并根据android.os.Build.VERSION.SDK_INT
在代码中进行选择,这样不会更容易吗? - drmrbrewer