如何使用gradle插件3.0.0-beta1覆盖ABI过滤器的versionCode?

时间:2017-08-11 13:36:08

标签: android-studio-3.0 android-gradle-3.0

我在build.gradle中定义了以下内容,用于根据versionCode覆盖ABI

import com.android.build.OutputFile

android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def defaultCode = android.defaultConfig.versionCode
        def filter = output.getFilter(OutputFile.FilterType.ABI)
        def abiMultiplier = project.ext.versionCodes.get(filter)
        if (abiMultiplier == null) {
            abiMultiplier = 1
        }
        output.versionCodeOverride = abiMultiplier * 100000000 + defaultCode
    }
}

这适用于2.3 gradle插件,但不适用于Android Studio 3.0 beta 1,使用带有gradle 4.1的3.0.0-beta1 gradle插件,给出了以下错误:

  

无法为参数[ABI]找到方法getFilter()   ApkVariantOutputImpl_Decorated {apkData = FullSplit {类型= FULL_SPLIT,   fullName = developmentArm64-v8aDebug,filters = [FilterDataImpl {type = ABI,   type = arm64-v8a}]}}类型   com.android.build.gradle.internal.api.ApkVariantOutputImpl。

migration documentation似乎表明这可能会有些破裂?我也尝试过尝试过:

  

def filter = output.getFilter(ApkVariantOutput.ABI)

并将output投射到ApkVariantOutput无效(相同的错误)。

1 个答案:

答案 0 :(得分:3)

解决方案是将GROUP BY更改为OutputFile.FilterType.ABI,它使用FilterType枚举的字符串表示形式。