Skip to content
This repository was archived by the owner on Oct 30, 2025. It is now read-only.

Commit 0564ab6

Browse files
authored
"com.android.library" Gradle Module Support (#15)
* ready to review * remove unused import * update README.md with new use case
1 parent 342afa4 commit 0564ab6

File tree

4 files changed

+54
-32
lines changed

4 files changed

+54
-32
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ plugins {
3232
}
3333
```
3434

35+
This plugin also supports library module type (`com.android.library`). Just install the plugin in your library-level `build.gradle` file and keys will be visible inside that module as well.
36+
3537
## Example Usage
3638

3739
Example contents of `local.properties` under your root project:

plugin/src/main/java/com/google/secrets_gradle_plugin/Extensions.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515
package com.google.secrets_gradle_plugin
1616

1717
import com.android.build.gradle.AppExtension
18-
import com.android.build.gradle.api.ApplicationVariant
18+
import com.android.build.gradle.LibraryExtension
19+
import com.android.build.gradle.internal.core.InternalBaseVariant
1920
import org.gradle.api.Project
2021
import java.io.FileNotFoundException
2122
import java.util.Properties
2223

2324
fun Project.androidProject() : AppExtension? =
2425
extensions.findByType(AppExtension::class.java)
2526

27+
fun Project.libraryProject() : LibraryExtension? =
28+
extensions.findByType(LibraryExtension::class.java)
29+
2630
fun Project.loadPropertiesFile(fileName: String) : Properties {
2731
// Load file
2832
val propertiesFile = file(fileName)
@@ -40,7 +44,7 @@ fun Project.loadPropertiesFile(fileName: String) : Properties {
4044

4145
private val javaVarRegexp = Regex(pattern = "((?![a-zA-Z_\$0-9]).)")
4246

43-
fun ApplicationVariant.inject(properties: Properties, ignore: List<String>) {
47+
fun InternalBaseVariant.inject(properties: Properties, ignore: List<String>) {
4448
val ignoreRegexs = ignore.map { Regex(pattern = it) }
4549
properties.keys.map { key ->
4650
key as String

plugin/src/main/java/com/google/secrets_gradle_plugin/SecretsPlugin.kt

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package com.google.secrets_gradle_plugin
1616

17+
import com.android.build.gradle.internal.core.InternalBaseVariant
1718
import org.gradle.api.Plugin
1819
import org.gradle.api.Project
1920
import java.io.FileNotFoundException
@@ -49,38 +50,54 @@ class SecretsPlugin : Plugin<Project> {
4950
defaultProperties ?: throw e
5051
}
5152

53+
// Target: "com.android.application" module variants
5254
project.androidProject()?.applicationVariants?.all { variant ->
53-
// Inject defaults first
54-
defaultProperties?.let {
55-
variant.inject(it, extension.ignoreList)
56-
}
55+
generateConfigKey(project, extension, defaultProperties, properties, variant)
56+
}
5757

58-
properties?.let {
59-
variant.inject(properties, extension.ignoreList)
60-
}
58+
// Target: "com.android.library" module variants
59+
project.libraryProject()?.libraryVariants?.all { variant ->
60+
generateConfigKey(project, extension, defaultProperties, properties, variant)
61+
}
62+
}
63+
}
6164

62-
// Inject build-type specific properties
63-
val buildTypeFileName = "${variant.buildType.name}.properties"
64-
val buildTypeProperties = try {
65-
project.rootProject.loadPropertiesFile(buildTypeFileName)
66-
} catch (e: FileNotFoundException) {
67-
null
68-
}
69-
buildTypeProperties?.let {
70-
variant.inject(it, extension.ignoreList)
71-
}
65+
private fun generateConfigKey(
66+
project: Project,
67+
extension: SecretsPluginExtension,
68+
defaultProperties: Properties?,
69+
properties: Properties?,
70+
variant: InternalBaseVariant
71+
) {
72+
// Inject defaults first
73+
defaultProperties?.let {
74+
variant.inject(it, extension.ignoreList)
75+
}
7276

73-
// Inject flavor-specific properties
74-
val flavorFileName = "${variant.flavorName}.properties"
75-
val flavorProperties = try {
76-
project.rootProject.loadPropertiesFile(flavorFileName)
77-
} catch (e: FileNotFoundException) {
78-
null
79-
}
80-
flavorProperties?.let {
81-
variant.inject(it, extension.ignoreList)
82-
}
83-
}
77+
properties?.let {
78+
variant.inject(properties, extension.ignoreList)
79+
}
80+
81+
// Inject build-type specific properties
82+
val buildTypeFileName = "${variant.buildType.name}.properties"
83+
val buildTypeProperties = try {
84+
project.rootProject.loadPropertiesFile(buildTypeFileName)
85+
} catch (e: FileNotFoundException) {
86+
null
87+
}
88+
buildTypeProperties?.let {
89+
variant.inject(it, extension.ignoreList)
90+
}
91+
92+
// Inject flavor-specific properties
93+
val flavorFileName = "${variant.flavorName}.properties"
94+
val flavorProperties = try {
95+
project.rootProject.loadPropertiesFile(flavorFileName)
96+
} catch (e: FileNotFoundException) {
97+
null
98+
}
99+
flavorProperties?.let {
100+
variant.inject(it, extension.ignoreList)
84101
}
85102
}
86103
}

plugin/src/test/kotlin/com/google/secrets_gradle_plugin/SecretsPluginTest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package com.google.secrets_gradle_plugin
1616

17-
import com.android.build.gradle.api.ApplicationVariant
1817
import com.android.build.gradle.internal.core.InternalBaseVariant
1918
import com.nhaarman.mockitokotlin2.doReturn
2019
import com.nhaarman.mockitokotlin2.mock
@@ -38,7 +37,7 @@ class SecretsPluginTest {
3837
lateinit var placeholders: MutableMap<String, Any>
3938
lateinit var root: Project
4039
lateinit var project: Project
41-
lateinit var variant: ApplicationVariant
40+
lateinit var variant: InternalBaseVariant
4241

4342
@Before
4443
fun setUp() {

0 commit comments

Comments
 (0)