开发即时应用时,使用配置APK(https://developer.android.com/topic/instant-apps/guides/config-splits.html)可以提供减少APK尺寸的有用选项。但是看起来它们仅在使用21或更高版本的mindSdk时才受支持。例如,如果您尝试将此功能用于较低的sdk版本,则会出现以下错误。
MinSdkVersion 17 is too low (<21) to support pure splits, reverting to full APKs
有没有办法让基础模块使用纯分割功能,同时还安装了app target棒棒糖设备?
答案 0 :(得分:2)
由于minSdkVersion标志将切换相当多的检查,因此不会自动完成此更改。
我建议使用不同的minSdkVersions为已安装和即时模块引入产品风味,如下所示:
// :feature/base/build.gradle
flavorDimensions 'delivery'
productFlavors {
instant {
dimension 'delivery'
minSdkVersion rootProject.minSdkInstant
}
installed {
dimension 'delivery'
}
}
这必须在依赖于具有API级别&lt;的特征模块的其他模块中类似地完成。 21。
答案 1 :(得分:1)
即时应用仅在API 21+设备(link)中受支持,较旧的设备仅支持完整的apk。
更好的方法是根据您的模块定义不同的minSdk,例如:
您可以在GitHub
上查看Google的分析示例项目的gradle
ext {
buildTools = '26.0.2'
compileSdk = 26
minSdk = 15
minSdkInstant = 21
versionCode = 1
versionName = '1.0'
supportLib = '26.1.0'
firebaseVer = '10.2.4'
instantAppsVer = '1.0.0'
}
基础gradle
android {
compileSdkVersion rootProject.compileSdk
buildToolsVersion rootProject.buildTools
baseFeature true
defaultConfig {
minSdkVersion rootProject.minSdk
targetSdkVersion rootProject.compileSdk
versionCode rootProject.versionCode
versionName rootProject.versionName
}
buildTypes {
release {}
}
}
已安装的gradle
defaultConfig {
applicationId "com.example.android.instant.analytics"
minSdkVersion rootProject.minSdk
targetSdkVersion rootProject.compileSdk
versionCode rootProject.versionCode
versionName rootProject.versionName
}
即时gradle
android {
defaultConfig {
minSdkVersion rootProject.minSdkInstant
}
}
答案 2 :(得分:1)
如果您使用tools:overrideLibrary
,可以为应用程序模块指定不同的较低minSdkVersion。请参阅How do I use tools:overrideLibrary in a build.gradle file?
我就这样做了:
应用程序/的build.gradle
android {
defaultConfig {
minSdkVersion 17
}
}
app的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.app" xmlns:tools="http://schemas.android.com/tools" >
<uses-sdk tools:overrideLibrary="com.package,com.package.feature"/>
</manifest>
您需要添加要覆盖其minSdkVersion
的所有包名称。通过查看错误,您将知道要添加哪些内容:
清单合并失败...... AndroidManifest.xml作为库可能正在使用不可用的API 17建议:使用最多minSdk的兼容库 17, 或者将该项目的minSdk版本增加到至少21, 或使用工具:overrideLibrary =&#34; com.package.feature&#34;强制使用(可能导致运行时失败)
base and feature / build.gradle
android {
defaultConfig {
minSdkVersion 21
}
}
通过构建已安装/即时APK来测试它,然后分析minSdkVersion
值。安装位置应为17,您的基本/功能APK仍然是21。