在仍然以棒棒糖前设备为目标时使用配置APK

时间:2017-10-27 12:38:38

标签: android android-instant-apps

开发即时应用时,使用配置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棒棒糖设备?

3 个答案:

答案 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。