如何使用 gradle 插件 3.0.0-beta1 覆盖 ABI 过滤器的版本代码?
How to override versionCode for ABI filters with gradle plugin 3.0.0-beta1?
我在 build.gradle 中定义了以下内容,用于基于 ABI
.
覆盖 versionCode
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,使用 3.0.0-beta1 gradle 插件和 gradle 4.1,给我以下错误:
Could not find method getFilter() for arguments [ABI] on
ApkVariantOutputImpl_Decorated{apkData=FullSplit{type=FULL_SPLIT,
fullName=developmentArm64-v8aDebug, filters=[FilterDataImpl{type=ABI,
value=arm64-v8a}]}} of type
com.android.build.gradle.internal.api.ApkVariantOutputImpl.
migration documentation好像是说这个可能有点破?我试过也试过:
def filter = output.getFilter(ApkVariantOutput.ABI)
并将 output
转换为 ApkVariantOutput
无济于事(同样的错误)。
解决方案是将 OutputFile.FilterType.ABI
更改为 OutputFile.ABI
,它使用 FilterType 枚举的字符串表示形式。
我在 build.gradle 中定义了以下内容,用于基于 ABI
.
versionCode
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,使用 3.0.0-beta1 gradle 插件和 gradle 4.1,给我以下错误:
Could not find method getFilter() for arguments [ABI] on ApkVariantOutputImpl_Decorated{apkData=FullSplit{type=FULL_SPLIT, fullName=developmentArm64-v8aDebug, filters=[FilterDataImpl{type=ABI, value=arm64-v8a}]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
migration documentation好像是说这个可能有点破?我试过也试过:
def filter = output.getFilter(ApkVariantOutput.ABI)
并将 output
转换为 ApkVariantOutput
无济于事(同样的错误)。
解决方案是将 OutputFile.FilterType.ABI
更改为 OutputFile.ABI
,它使用 FilterType 枚举的字符串表示形式。