From 7c2528f4a766d88d1f08578344db588fb849cb47 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 20 Dec 2020 17:11:37 +0530 Subject: [PATCH] build: refactor for configuration cache compatibility Signed-off-by: Harsh Shandilya --- app/build.gradle.kts | 28 ----------------- buildSrc/src/main/java/BaseProjectConfig.kt | 12 ++++++++ buildSrc/src/main/java/LobstersPlugin.kt | 1 + buildSrc/src/main/java/SigningConfig.kt | 34 +++++++++++++++++++++ 4 files changed, 47 insertions(+), 28 deletions(-) create mode 100644 buildSrc/src/main/java/SigningConfig.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 604140e7..fa52466c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,5 +1,3 @@ -import java.util.Properties - plugins { id("com.android.application") kotlin("android") @@ -10,10 +8,7 @@ plugins { `core-library-desugaring` } -val keystorePropertiesFile = rootProject.file("keystore.properties") - android { - adbOptions.installOptions("--user 0") defaultConfig { applicationId = "dev.msfjarvis.lobsters" versionCode = 1 @@ -24,35 +19,12 @@ android { } } - buildTypes { - named("release") { - isMinifyEnabled = true - setProguardFiles(listOf("proguard-android-optimize.txt", "proguard-rules.pro")) - } - } - buildFeatures.compose = true composeOptions { kotlinCompilerVersion = "1.4.21" kotlinCompilerExtensionVersion = Dependencies.COMPOSE_VERSION } - - if (keystorePropertiesFile.exists()) { - val keystoreProperties = Properties() - keystoreProperties.load(keystorePropertiesFile.inputStream()) - signingConfigs { - register("release") { - keyAlias = keystoreProperties["keyAlias"] as String - keyPassword = keystoreProperties["keyPassword"] as String - storeFile = rootProject.file(keystoreProperties["storeFile"] as String) - storePassword = keystoreProperties["storePassword"] as String - } - } - listOf("release", "debug").map { - buildTypes.getByName(it).signingConfig = signingConfigs.getByName(it) - } - } } dependencies { diff --git a/buildSrc/src/main/java/BaseProjectConfig.kt b/buildSrc/src/main/java/BaseProjectConfig.kt index 3f92e215..2d0db2e3 100644 --- a/buildSrc/src/main/java/BaseProjectConfig.kt +++ b/buildSrc/src/main/java/BaseProjectConfig.kt @@ -59,6 +59,7 @@ internal fun Project.configureForAllProjects() { */ @Suppress("UnstableApiUsage") internal fun BaseAppModuleExtension.configureAndroidApplicationOptions(project: Project) { + val minifySwitch = project.providers.environmentVariable("DISABLE_MINIFY").forUseAtConfigurationTime() project.tasks.withType { kotlinOptions { freeCompilerArgs = freeCompilerArgs + listOf( @@ -68,6 +69,17 @@ internal fun BaseAppModuleExtension.configureAndroidApplicationOptions(project: ) } } + adbOptions.installOptions("--user 0") + buildTypes { + named("release") { + isMinifyEnabled = !minifySwitch.isPresent + setProguardFiles(listOf("proguard-android-optimize.txt", "proguard-rules.pro")) + } + named("debug") { + versionNameSuffix = "-debug" + isMinifyEnabled = false + } + } } /** diff --git a/buildSrc/src/main/java/LobstersPlugin.kt b/buildSrc/src/main/java/LobstersPlugin.kt index a5bd8494..33a62180 100644 --- a/buildSrc/src/main/java/LobstersPlugin.kt +++ b/buildSrc/src/main/java/LobstersPlugin.kt @@ -39,6 +39,7 @@ class LobstersPlugin : Plugin { } is AppPlugin -> { project.extensions.getByType().configureCommonAndroidOptions() + project.extensions.getByType().configureBuildSigning(project) project.extensions.getByType().configureAndroidApplicationOptions(project) } is Kapt3GradleSubplugin -> { diff --git a/buildSrc/src/main/java/SigningConfig.kt b/buildSrc/src/main/java/SigningConfig.kt new file mode 100644 index 00000000..7fb7b8b8 --- /dev/null +++ b/buildSrc/src/main/java/SigningConfig.kt @@ -0,0 +1,34 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension +import java.util.Properties +import org.gradle.api.Project + +private const val KEYSTORE_CONFIG_PATH = "keystore.properties" + +/** + * Configure signing for all build types. + */ +@Suppress("UnstableApiUsage") +internal fun BaseAppModuleExtension.configureBuildSigning(project: Project) { + with(project) { + val keystoreConfigFile = rootProject.layout.projectDirectory.file(KEYSTORE_CONFIG_PATH) + if (!keystoreConfigFile.asFile.exists()) return + val contents = providers.fileContents(keystoreConfigFile).asText.forUseAtConfigurationTime() + val keystoreProperties = Properties() + keystoreProperties.load(contents.get().byteInputStream()) + signingConfigs { + register("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = rootProject.file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } + val signingConfig = signingConfigs.getByName("release") + buildTypes.all { setSigningConfig(signingConfig) } + } +}