build-logic: rewrite everything to use full Gradle plugins

This commit is contained in:
Harsh Shandilya 2022-06-10 13:18:52 +05:30
parent 49863d4138
commit 29d63a879e
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
29 changed files with 415 additions and 301 deletions

View file

@ -17,7 +17,27 @@ afterEvaluate {
}
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions { jvmTarget = JavaVersion.VERSION_11.toString() }
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
freeCompilerArgs = freeCompilerArgs + "-Xsam-conversions=class"
}
}
}
gradlePlugin {
plugins {
register("android-application") {
id = "dev.msfjarvis.claw.android-application"
implementationClass = "dev.msfjarvis.aps.gradle.ApplicationPlugin"
}
register("android-library") {
id = "dev.msfjarvis.claw.android-library"
implementationClass = "dev.msfjarvis.aps.gradle.LibraryPlugin"
}
register("rename-artifacts") {
id = "dev.msfjarvis.claw.rename-artifacts"
implementationClass = "dev.msfjarvis.aps.gradle.RenameArtifactsPlugin"
}
}
}

View file

@ -1,33 +0,0 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
@file:Suppress("UnstableApiUsage")
import signing.configureBuildSigning
plugins {
id("com.android.application")
id("dev.msfjarvis.claw.android-common")
}
android {
adbOptions.installOptions("--user 0")
dependenciesInfo {
includeInBundle = false
includeInApk = false
}
buildFeatures { buildConfig = true }
buildTypes {
named("release") { isMinifyEnabled = false }
named("debug") {
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
isMinifyEnabled = false
}
}
project.configureBuildSigning()
}

View file

@ -1,57 +0,0 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
@file:Suppress("UnstableApiUsage")
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.TestedExtension
import org.gradle.kotlin.dsl.findByType
extensions.configure<TestedExtension> {
setCompileSdkVersion(31)
defaultConfig {
minSdk = 26
targetSdk = 31
}
extensions.findByType<LibraryAndroidComponentsExtension>()?.run {
beforeVariants(selector().withBuildType("release")) {
it.enableUnitTest = false
it.enableAndroidTest = false
}
}
extensions.findByType<ApplicationAndroidComponentsExtension>()?.run {
beforeVariants(selector().withBuildType("release")) {
it.enableUnitTest = false
it.enableAndroidTest = false
}
}
sourceSets {
named("main") { java.srcDirs("src/main/kotlin") }
named("test") { java.srcDirs("src/test/kotlin") }
named("androidTest") { java.srcDirs("src/androidTest/kotlin") }
}
packagingOptions {
resources.excludes.add("**/*.version")
resources.excludes.add("**/*.txt")
resources.excludes.add("**/*.kotlin_module")
resources.excludes.add("**/plugin.properties")
resources.excludes.add("**/META-INF/AL2.0")
resources.excludes.add("**/META-INF/LGPL2.1")
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
testOptions {
animationsDisabled = true
unitTests.isReturnDefaultValues = true
}
}

View file

@ -1,11 +0,0 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
plugins {
id("com.android.library")
id("dev.msfjarvis.claw.android-common")
}
android { defaultConfig { consumerProguardFiles("consumer-rules.pro") } }

View file

@ -1,22 +0,0 @@
import artifacts.CollectApksTask
import artifacts.CollectBundleTask
import com.android.build.api.artifact.SingleArtifact
plugins { id("com.android.application") }
androidComponents {
onVariants { variant ->
project.tasks.register<CollectApksTask>("collect${variant.name.capitalize()}Apks") {
variantName.set(variant.name)
apkFolder.set(variant.artifacts.get(SingleArtifact.APK))
builtArtifactsLoader.set(variant.artifacts.getBuiltArtifactsLoader())
outputDirectory.set(project.layout.projectDirectory.dir("outputs"))
}
project.tasks.register<CollectBundleTask>("collect${variant.name.capitalize()}Bundle") {
variantName.set(variant.name)
versionName.set(android.defaultConfig.versionName)
bundleFile.set(variant.artifacts.get(SingleArtifact.BUNDLE))
outputDirectory.set(project.layout.projectDirectory.dir("outputs"))
}
}
}

View file

@ -0,0 +1,44 @@
package dev.msfjarvis.aps.gradle
import com.android.build.gradle.TestedExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
@Suppress("UnstableApiUsage")
object AndroidCommon {
fun configure(project: Project) {
project.extensions.configure<TestedExtension> {
setCompileSdkVersion(31)
defaultConfig {
minSdk = 26
targetSdk = 31
}
sourceSets {
named("main") { java.srcDirs("src/main/kotlin") }
named("test") { java.srcDirs("src/test/kotlin") }
named("androidTest") { java.srcDirs("src/androidTest/kotlin") }
}
packagingOptions {
resources.excludes.add("**/*.version")
resources.excludes.add("**/*.txt")
resources.excludes.add("**/*.kotlin_module")
resources.excludes.add("**/plugin.properties")
resources.excludes.add("**/META-INF/AL2.0")
resources.excludes.add("**/META-INF/LGPL2.1")
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
testOptions {
animationsDisabled = true
unitTests.isReturnDefaultValues = true
}
}
}
}

View file

@ -0,0 +1,61 @@
@file:Suppress("UnstableApiUsage")
package dev.msfjarvis.aps.gradle
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import dev.msfjarvis.aps.gradle.signing.configureBuildSigning
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.getByType
@Suppress("Unused")
class ApplicationPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.apply(AppPlugin::class)
AndroidCommon.configure(project)
project.extensions.getByType<BaseAppModuleExtension>().run {
adbOptions.installOptions("--user 0")
dependenciesInfo {
includeInBundle = false
includeInApk = false
}
buildFeatures {
viewBinding = true
buildConfig = true
}
buildTypes {
named("release") {
isMinifyEnabled = false
setProguardFiles(
listOf(
"proguard-android-optimize.txt",
"proguard-rules.pro",
"proguard-rules-missing-classes.pro",
)
)
}
named("debug") {
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
isMinifyEnabled = false
}
}
project.configureBuildSigning()
}
}
private fun Project.isSnapshot(): Boolean {
with(project.providers) {
val workflow = environmentVariable("GITHUB_WORKFLOW")
val snapshot = environmentVariable("SNAPSHOT")
return workflow.isPresent || snapshot.isPresent
}
}
}

View file

@ -0,0 +1,15 @@
package dev.msfjarvis.aps.gradle
import com.android.build.gradle.LibraryPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
@Suppress("Unused")
class LibraryPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.apply(LibraryPlugin::class)
AndroidCommon.configure(project)
}
}

View file

@ -0,0 +1,37 @@
package dev.msfjarvis.aps.gradle
import com.android.build.api.artifact.SingleArtifact
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import dev.msfjarvis.aps.gradle.artifacts.CollectApksTask
import dev.msfjarvis.aps.gradle.artifacts.CollectBundleTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.register
@Suppress("Unused")
class RenameArtifactsPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.withPlugin("com.android.application") {
val android = project.extensions.getByType<BaseAppModuleExtension>()
project.extensions.getByType<ApplicationAndroidComponentsExtension>().run {
onVariants { variant ->
project.tasks.register<CollectApksTask>("collect${variant.name.capitalize()}Apks") {
variantName.set(variant.name)
apkFolder.set(variant.artifacts.get(SingleArtifact.APK))
builtArtifactsLoader.set(variant.artifacts.getBuiltArtifactsLoader())
outputDirectory.set(project.layout.projectDirectory.dir("outputs"))
}
project.tasks.register<CollectBundleTask>("collect${variant.name.capitalize()}Bundle") {
variantName.set(variant.name)
versionName.set(android.defaultConfig.versionName)
bundleFile.set(variant.artifacts.get(SingleArtifact.BUNDLE))
outputDirectory.set(project.layout.projectDirectory.dir("outputs"))
}
}
}
}
}
}

View file

@ -1,4 +1,4 @@
package artifacts
package dev.msfjarvis.aps.gradle.artifacts
import com.android.build.api.variant.BuiltArtifactsLoader
import java.nio.file.Files

View file

@ -1,4 +1,4 @@
package artifacts
package dev.msfjarvis.aps.gradle.artifacts
import java.nio.file.Files
import java.nio.file.StandardCopyOption

View file

@ -3,13 +3,12 @@
* SPDX-License-Identifier: GPL-3.0-only
*/
package signing
package dev.msfjarvis.aps.gradle.signing
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import java.util.Properties
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.provideDelegate
private const val KEYSTORE_CONFIG_PATH = "keystore.properties"