chore: Upgrade to AGP 9.0.0 and Gradle 9.3.1

This commit is contained in:
darken
2026-02-08 17:31:19 +01:00
committed by Matthias Urhahn
parent ebfffb1536
commit 6223524a1e
6 changed files with 66 additions and 22 deletions
+37 -13
View File
@@ -94,21 +94,9 @@ android {
} }
} }
buildOutputs.all {
val variantOutputImpl = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
val variantName: String = variantOutputImpl.name
if (listOf("release", "beta").any { variantName.lowercase().contains(it) }) {
val outputFileName = projectConfig.packageName +
"-v${defaultConfig.versionName}-${defaultConfig.versionCode}" +
"-${variantName.uppercase()}.apk"
variantOutputImpl.outputFileName = outputFileName
}
}
buildFeatures { buildFeatures {
viewBinding = true viewBinding = true
buildConfig = true
} }
compileOptions { compileOptions {
@@ -141,6 +129,42 @@ android {
} }
} }
androidComponents {
onVariants { variant ->
val buildType = variant.buildType ?: return@onVariants
if (buildType != "release" && buildType != "beta") return@onVariants
val formattedVariantName = variant.name
.replace(Regex("([a-z])([A-Z])"), "$1-$2")
.uppercase()
val apkFolder = variant.artifacts.get(com.android.build.api.artifact.SingleArtifact.APK)
val loader = variant.artifacts.getBuiltArtifactsLoader()
val packageName = projectConfig.packageName
val renameTask = tasks.register("rename${variant.name.replaceFirstChar { it.uppercase() }}Apk") {
inputs.files(apkFolder)
outputs.upToDateWhen { false }
doLast {
val builtArtifacts = loader.load(apkFolder.get()) ?: return@doLast
builtArtifacts.elements.forEach { element ->
val apkFile = File(element.outputFile)
val outputFileName = "$packageName-v${element.versionName}-${element.versionCode}-$formattedVariantName.apk"
if (apkFile.exists() && apkFile.name != outputFileName) {
apkFile.copyTo(File(apkFile.parentFile, outputFileName), overwrite = true)
}
}
}
}
tasks.matching { it.name == "assemble${variant.name.replaceFirstChar { it.uppercase() }}" }.configureEach {
finalizedBy(renameTask)
}
}
}
dependencies { dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
+2 -2
View File
@@ -1,5 +1,5 @@
plugins { plugins {
id("com.google.devtools.ksp") version "2.2.10-2.0.2" apply false id("com.google.devtools.ksp") version "2.3.2" apply false
} }
buildscript { buildscript {
@@ -8,7 +8,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath("com.android.tools.build:gradle:8.13.0") classpath("com.android.tools.build:gradle:9.0.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.Kotlin.core}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.Kotlin.core}")
classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.Dagger.core}") classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.Dagger.core}")
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.AndroidX.Navigation.core}") classpath("androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.AndroidX.Navigation.core}")
+1 -1
View File
@@ -18,7 +18,7 @@ repositories {
} }
dependencies { dependencies {
implementation("com.android.tools.build:gradle:8.13.0") implementation("com.android.tools.build:gradle:9.0.0")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10")
implementation("com.squareup:javapoet:1.13.0") implementation("com.squareup:javapoet:1.13.0")
} }
+14 -3
View File
@@ -7,7 +7,6 @@ import org.gradle.api.tasks.testing.TestResult
import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.api.tasks.testing.logging.TestLogEvent
import java.io.File import java.io.File
import java.io.FileInputStream
import java.util.Properties import java.util.Properties
val Project.projectConfig: ProjectConfig val Project.projectConfig: ProjectConfig
@@ -21,23 +20,35 @@ fun SigningConfig.setupCredentials(
if (keyStoreFromEnv?.exists() == true) { if (keyStoreFromEnv?.exists() == true) {
println("Using signing data from environment variables.") println("Using signing data from environment variables.")
val missingVars = listOf("STORE_PASSWORD", "KEY_ALIAS", "KEY_PASSWORD")
.filter { System.getenv(it).isNullOrBlank() }
if (missingVars.isNotEmpty()) {
println("WARNING: STORE_PATH is set but missing env vars: ${missingVars.joinToString()}")
}
storeFile = keyStoreFromEnv storeFile = keyStoreFromEnv
storePassword = System.getenv("STORE_PASSWORD") storePassword = System.getenv("STORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS") keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD") keyPassword = System.getenv("KEY_PASSWORD")
} else { } else {
println("Using signing data from properties file.") println("Trying signing data from properties file: $signingPropsPath")
val props = Properties().apply { val props = Properties().apply {
signingPropsPath?.takeIf { it.canRead() }?.let { load(FileInputStream(it)) } signingPropsPath?.takeIf { it.canRead() }?.let { file ->
file.inputStream().use { stream -> load(stream) }
}
} }
val keyStorePath = props.getProperty("release.storePath")?.let { File(it) } val keyStorePath = props.getProperty("release.storePath")?.let { File(it) }
if (keyStorePath?.exists() == true) { if (keyStorePath?.exists() == true) {
println("Using signing data from properties file: $signingPropsPath")
storeFile = keyStorePath storeFile = keyStorePath
storePassword = props.getProperty("release.storePassword") storePassword = props.getProperty("release.storePassword")
keyAlias = props.getProperty("release.keyAlias") keyAlias = props.getProperty("release.keyAlias")
keyPassword = props.getProperty("release.keyPassword") keyPassword = props.getProperty("release.keyPassword")
} else {
println("WARNING: No valid signing configuration found (no env vars or properties file)")
} }
} }
} }
+11 -2
View File
@@ -17,7 +17,16 @@ org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8
android.useAndroidX=true android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
android.nonFinalResIds=true android.nonFinalResIds=true
org.gradle.unsafe.configuration-cache=false org.gradle.unsafe.configuration-cache=false
android.defaults.buildfeatures.resvalues=true
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.enableAppCompileTimeRClass=false
android.usesSdkInManifest.disallowed=false
android.uniquePackageNames=false
android.dependency.useConstraints=true
android.r8.strictFullModeForKeepRules=false
android.r8.optimizedResourceShrinking=false
android.builtInKotlin=false
android.newDsl=false
+1 -1
View File
@@ -1,6 +1,6 @@
#Tue May 16 07:17:06 CEST 2023 #Tue May 16 07:17:06 CEST 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists