Untitled
unknown
plain_text
a month ago
4.5 kB
4
Indexable
package com.martitech.convention.plugin import com.android.build.api.dsl.ApplicationBuildType import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.martitech.config.AppConfig import com.martitech.config.BuildType import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import java.util.Properties class AndroidApplicationConventionPlugin : Plugin<Project> { override fun apply(target: Project) { with(target) { with(pluginManager) { apply("com.android.application") apply("org.jetbrains.kotlin.android") } extensions.configure<BaseAppModuleExtension> { compileSdk = AppConfig.COMPILE_SDK defaultConfig.apply { applicationId = AppConfig.APPLICATION_ID minSdk = AppConfig.MIN_SDK targetSdk = AppConfig.TARGET_SDK versionCode = AppConfig.VERSION_CODE versionName = AppConfig.VERSION_NAME multiDexEnabled = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } compileOptions { sourceCompatibility = AppConfig.JAVA_VERSION targetCompatibility = AppConfig.JAVA_VERSION } buildFeatures { viewBinding = true buildConfig = true } buildTypes { configureBuildTypes(this, project) } } extensions.configure<KotlinAndroidProjectExtension> { jvmToolchain(AppConfig.JAVA_VERSION.toString().substringAfter("VERSION_").toInt()) } } } private fun configureBuildTypes( buildTypes: NamedDomainObjectContainer<ApplicationBuildType>, project: Project ) { BuildType.values().forEach { buildType -> val buildTypeName = buildType.name.lowercase() buildTypes.maybeCreate(buildTypeName).apply { configureBuildType(buildType, project) } } } private fun ApplicationBuildType.configureBuildType( buildType: BuildType, project: Project ) { isDebuggable = buildType.isDebuggable isMinifyEnabled = buildType.isMinifyEnabled isShrinkResources = buildType.isShrinkResources proguardFiles( project.layout.buildDirectory.file("proguard-android-optimize.txt").get().asFile, "proguard-rules.pro" ) manifestPlaceholders["appName"] = buildType.appName versionNameSuffix = buildType.versionNameIdSuffix applicationIdSuffix = buildType.applicationIdSuffix val amplitudeApiKey = project.getPropertyOrDefault("AMPLITUDE_API_KEY_${buildType.name.uppercase()}", "") val newrelicApiKey = project.getPropertyOrDefault("NEWRELIC_API_KEY_${buildType.name.uppercase()}", "") val baseUrl = project.getPropertyOrDefault("BASE_URL_${buildType.name.uppercase()}", "") val metaCdn = project.getPropertyOrDefault("META_CDN_${buildType.name.uppercase()}", "") val apiVersion = project.getPropertyOrDefault("API_VERSION_${buildType.name.uppercase()}", "v1") buildConfigField("String", "AMPLITUDE_API_KEY", "\"$amplitudeApiKey\"") buildConfigField("String", "NEWRELIC_API_KEY", "\"$newrelicApiKey\"") buildConfigField("String", "BASE_URL", "\"$baseUrl\"") buildConfigField("String", "META_CDN", "\"$metaCdn\"") buildConfigField("String", "API_VERSION", "\"$apiVersion\"") } private fun Project.getPropertyOrDefault(propertyName: String, defaultValue: String): String { val propFile = rootProject.file("local.properties") if (propFile.exists()) { val props = Properties() propFile.inputStream().use { props.load(it) } val value = props.getProperty(propertyName) if (!value.isNullOrEmpty()) return value } val envValue = System.getenv(propertyName) if (!envValue.isNullOrEmpty()) return envValue val gradleValue = project.findProperty(propertyName) as? String if (!gradleValue.isNullOrEmpty()) return gradleValue return defaultValue } }
Editor is loading...
Leave a Comment