diff --git a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/DefaultConfig.kt b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/DefaultConfig.kt index 48ae272..1de9a4c 100644 --- a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/DefaultConfig.kt +++ b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/DefaultConfig.kt @@ -126,6 +126,8 @@ internal object DefaultConfig { override val isIsolationEnabled get() = true + override val manifestPlaceholders get() = false + override val isEnabled get() = selfCommon?.isEnabled ?: globalCommon?.isEnabled diff --git a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/extension/GropifyConfigure.kt b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/extension/GropifyConfigure.kt index 4cbd771..a1defd4 100644 --- a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/extension/GropifyConfigure.kt +++ b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/extension/GropifyConfigure.kt @@ -186,6 +186,11 @@ private fun GropifyConfigureExtension.AndroidGenerateConfigureScope.create( ?: global?.isIsolationEnabled ?: DefaultConfig.createAndroidGenerateConfig(name, selfCommon, globalCommon).isIsolationEnabled + override val manifestPlaceholders + get() = this@create.manifestPlaceholders + ?: global?.manifestPlaceholders + ?: DefaultConfig.createAndroidGenerateConfig(name, selfCommon, globalCommon).manifestPlaceholders + override val existsPropertyFiles get() = this@create.existsPropertyFiles ?: global?.existsPropertyFiles diff --git a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/proxy/GropifyConfig.kt b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/proxy/GropifyConfig.kt index d3739b7..816877f 100644 --- a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/proxy/GropifyConfig.kt +++ b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/config/proxy/GropifyConfig.kt @@ -85,7 +85,11 @@ internal interface GropifyConfig { /** * Android project generate configuration interface. */ - interface AndroidGenerateConfig : JvmGenerateConfig + interface AndroidGenerateConfig : JvmGenerateConfig { + + /** Whether to use manifest placeholders' generation. */ + val manifestPlaceholders: Boolean + } /** * Jvm project generate configuration interface. diff --git a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/deployer/SourceCodeDeployer.kt b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/deployer/SourceCodeDeployer.kt index 67c235d..a46612c 100644 --- a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/deployer/SourceCodeDeployer.kt +++ b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/deployer/SourceCodeDeployer.kt @@ -91,7 +91,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De val properties = generateMap(config, ProjectDescriptor.create(project = this)) if (!configModified && properties == cachedProjectProperties[getFullName()] && !outputDir.isEmpty()) { - if (config.isEnabled) configureSourceSets(project = this) + if (config.isEnabled) configureSourceSets(project = this, properties) return } @@ -110,7 +110,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De sourceCodeGenerator.build(projectType, config, generateConfig, properties).let { generator -> generator.first { it.type == sourceCodeType } }.writeTo(outputDir) - configureSourceSets(project = this) + configureSourceSets(project = this, properties) } rootProject.generate() @@ -121,7 +121,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De } } - private fun configureSourceSets(project: Project) { + private fun configureSourceSets(project: Project, properties: PropertyMap) { val projectType = project.resolveType() val config = config.from(project).let { @@ -189,6 +189,24 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De "Project '${project.getFullName()}' source sets deployed failed, method \"srcDir\" maybe failed during the processing." ) } else Logger.debug("Source directory \"$generateDirPath\" already added to source set \"${config.sourceSetName}\", skipping.") + + if (projectType == ProjectType.Android && + config is GropifyConfig.AndroidGenerateConfig && + config.manifestPlaceholders + ) { + Logger.debug("Deploying to manifestPlaceholders.") + + val defaultConfig = extension.asResolver().optional(!debugMode).firstMethodOrNull { + name = "getDefaultConfig" + emptyParameters() + }?.invokeQuietly() + + defaultConfig?.asResolver()?.optional(!debugMode)?.firstMethodOrNull { + name = "addManifestPlaceholders" + parameters(Map::class) + superclass() + }?.invokeQuietly(properties.map { (key, value) -> key to value.raw }.toMap()) + } } private fun decideSourceCodeType(config: GropifyConfig.CommonCodeGenerateConfig, type: ProjectType) = when (type) { diff --git a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/extension/dsl/configure/GropifyConfigureExtension.kt b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/extension/dsl/configure/GropifyConfigureExtension.kt index 06e11f2..a563d3e 100644 --- a/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/extension/dsl/configure/GropifyConfigureExtension.kt +++ b/gropify-gradle-plugin/src/main/kotlin/com/highcapable/gropify/plugin/extension/dsl/configure/GropifyConfigureExtension.kt @@ -173,7 +173,17 @@ open class GropifyConfigureExtension internal constructor() { @JvmName("extensionName") set } - open inner class AndroidGenerateConfigureScope internal constructor() : JvmGenerateConfigureScope() + open inner class AndroidGenerateConfigureScope internal constructor() : JvmGenerateConfigureScope() { + + /** + * Whether to use manifest placeholders' generation. + * + * Disabled by default, when enabled will synchronize the properties' key-values + * to the `manifestPlaceholders` in the `android` configuration method block. + */ + var manifestPlaceholders: Boolean? = null + @JvmName("manifestPlaceholders") set + } open inner class JvmGenerateConfigureScope internal constructor() : CommonCodeGenerateConfigureScope() {