Reputation: 560
Before AGP 7.0.0-alpha15 I could change version code of an app for example like that
android {
defaultConfig {
applicationVariants.all {
if (buildType.name == "debug") {
outputs.forEach { output ->
(output as? com.android.build.gradle.internal.api.ApkVariantOutputImpl)?.versionCodeOverride = 1
}
}
}
}
}
applicationVariants
seems missing after AGP 7.0.0-alpha15, how to change it?
PS: It seems ok in plain gradle, above is Kotlin
Edit
With answer from below I was able to override version code in build:
android {
androidComponents.onVariants { appVariant ->
if (appVariant.buildType == "release") {
appVariant.outputs.forEach {
it.versionCode.set(1)
}
}
}
}
Upvotes: 8
Views: 1914
Reputation: 454
android {
// ..
splits {
abi {
enable true
reset()
include 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
}
// ..
}
androidComponents {
onVariants(selector().all()) { appVariant ->
for (VariantOutput variantOutput : appVariant.getOutputs()) {
def versionCodes = ['[armeabi]' : 100000,
'[armeabi-v7a]' : 200000,
'[x86]' : 300000,
'[arm64-v8a]' : 400000,
'[x86_64]' : 500000]
String abi = variantOutput.getFilters().identifier;
Integer version = versionCodes.get(abi) + versionCode
if (appVariant.getName().contains("Debug")) {
version += 10000
}
variantOutput.getVersionCode().set(version);
}
}
}
dependencies {
// ...
}
Upvotes: 0
Reputation: 76779
In Java plugin code, one can set the version code & name alike this:
class SomePlugin implements Plugin<Project> {
@Override
@SuppressWarnings("UnstableApiUsage")
public void apply(@NotNull Project project) {
ApplicationAndroidComponentsExtension androidComponents = project.getExtensions()
.getByType(ApplicationAndroidComponentsExtension.class);
androidComponents.finalizeDsl(extension -> {
for (AndroidSourceSet sourceSet : extension.getSourceSets()) {
System.out.println(sourceSet.getName());
}
});
int versionCode = 1;
String versionName = "1.0.0";
VariantSelector selector = androidComponents.selector().all();
androidComponents.onVariants(selector, variant -> {
for (VariantOutput variantOutput : variant.getOutputs()) {
variantOutput.getVersionName().set( versionName );
variantOutput.getVersionCode().set( versionCode );
System.out.println(">>>> " +
variant.getName() + " " +
variantOutput.getVersionCode().get() + " / " +
variantOutput.getVersionName().get());
}
});
}
}
finalizeDsl
happens before onVariants
.
Upvotes: 1
Reputation: 333
The Variant API is going to change to a lazily-evaluated model in AGP 7.0.0, and it seems like Alpha 15 has removed the old APIs for this now. Going forward, you will need to use the androidComponents
DSL, which gives access to variants. I am not sure if you'll be able to rewrite the version code like this, however. Check out beforeVariants
and onVariants
for more info:
android {
androidComponents.beforeVariants { variantBuilder ->
// Callback before variants are built. Can be modified, but doesn't allow access to outputs
}
androidComponents.onVariants { variant ->
// Callback after variants are built. Apparently it's read-only access at this point, but outputs are available here
println(variant.outputs)
}
}
Upvotes: 6