Skip to content

Commit

Permalink
Added documentation on how to mimic Android flavors
Browse files Browse the repository at this point in the history
  • Loading branch information
gmazzo committed Aug 1, 2023
1 parent 6cbe59a commit 45ccfed
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 10 deletions.
33 changes: 24 additions & 9 deletions demo-project/kts-android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import com.android.build.gradle.internal.lint.AndroidLintAnalysisTask
import com.github.gmazzo.gradle.plugins.BuildConfigTask

plugins {
Expand All @@ -18,23 +19,37 @@ android {
targetCompatibility(java.targetCompatibility)
sourceCompatibility(java.sourceCompatibility)
}

flavorDimensions += "brand"
productFlavors {
create("bar") { dimension = "brand" }
create("foo") { dimension = "brand" }
}

// mimics the variant-aware buildConfigField behavior from Android, by declaring fields on the final variant sourceSet
applicationVariants.all variant@{
buildConfig.sourceSets.named(this@variant.name) {
className.set("BuildConfig")

buildConfigField("String", "APP_NAME", "\"${project.name}\"")
buildConfigField("String", "APP_SECRET", "\"Z3JhZGxlLWphdmEtYnVpbGRjb25maWctcGx1Z2lu\"")
buildConfigField("long", "BUILD_TIME", "${System.currentTimeMillis()}L")
buildConfigField("boolean", "FEATURE_ENABLED", "${true}")
buildConfigField("kotlin.IntArray", "MAGIC_NUMBERS", "intArrayOf(1, 2, 3, 4)")

buildConfigField("boolean", "IS_DEBUG", "${this@variant.buildType.isDebuggable}")
buildConfigField("String", "BRAND", "\"${this@variant.productFlavors.single().name}\"")
}
}
}

dependencies {
testImplementation(libs.kotlin.test)
}

buildConfig {
buildConfigField("String", "APP_NAME", "\"${project.name}\"")
buildConfigField("String", "APP_SECRET", "\"Z3JhZGxlLWphdmEtYnVpbGRjb25maWctcGx1Z2lu\"")
buildConfigField("long", "BUILD_TIME", "${System.currentTimeMillis()}L")
buildConfigField("boolean", "FEATURE_ENABLED", "${true}")
buildConfigField("kotlin.IntArray", "MAGIC_NUMBERS", "intArrayOf(1, 2, 3, 4)")
}

// workaround of AGP issue failing to pick test sources correctly
afterEvaluate {
tasks.named("lintAnalyzeDebug") {
tasks.withType<AndroidLintAnalysisTask>().configureEach {
mustRunAfter(tasks.withType<BuildConfigTask>())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,10 @@ class BuildConfigTest {
assertEquals(listOf(1, 2, 3, 4), BuildConfig.MAGIC_NUMBERS.toList())
}

}
@Test
fun testFlavoredBuildConfigProperties() {
assertEquals(AndroidBuildConfig.DEBUG, BuildConfig.IS_DEBUG)
assertEquals(AndroidBuildConfig.FLAVOR, BuildConfig.BRAND)
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.github.gmazzo.gradle.plugins

import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer

interface BuildConfigExtension : BuildConfigSourceSet {

val sourceSets: NamedDomainObjectContainer<out BuildConfigSourceSet>

fun sourceSets(configure: Action<NamedDomainObjectContainer<out BuildConfigSourceSet>>) = configure.execute(sourceSets)

}

0 comments on commit 45ccfed

Please sign in to comment.