feat: add manifest placeholders support in AndroidGenerateConfig

This commit is contained in:
2025-11-16 00:10:36 +08:00
parent 8d16f24098
commit c4e78707d6
5 changed files with 44 additions and 5 deletions

View File

@@ -126,6 +126,8 @@ internal object DefaultConfig {
override val isIsolationEnabled get() = true override val isIsolationEnabled get() = true
override val manifestPlaceholders get() = false
override val isEnabled override val isEnabled
get() = selfCommon?.isEnabled get() = selfCommon?.isEnabled
?: globalCommon?.isEnabled ?: globalCommon?.isEnabled

View File

@@ -186,6 +186,11 @@ private fun GropifyConfigureExtension.AndroidGenerateConfigureScope.create(
?: global?.isIsolationEnabled ?: global?.isIsolationEnabled
?: DefaultConfig.createAndroidGenerateConfig(name, selfCommon, globalCommon).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 override val existsPropertyFiles
get() = this@create.existsPropertyFiles get() = this@create.existsPropertyFiles
?: global?.existsPropertyFiles ?: global?.existsPropertyFiles

View File

@@ -85,7 +85,11 @@ internal interface GropifyConfig {
/** /**
* Android project generate configuration interface. * 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. * Jvm project generate configuration interface.

View File

@@ -91,7 +91,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
val properties = generateMap(config, ProjectDescriptor.create(project = this)) val properties = generateMap(config, ProjectDescriptor.create(project = this))
if (!configModified && properties == cachedProjectProperties[getFullName()] && !outputDir.isEmpty()) { if (!configModified && properties == cachedProjectProperties[getFullName()] && !outputDir.isEmpty()) {
if (config.isEnabled) configureSourceSets(project = this) if (config.isEnabled) configureSourceSets(project = this, properties)
return return
} }
@@ -110,7 +110,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
sourceCodeGenerator.build(projectType, config, generateConfig, properties).let { generator -> sourceCodeGenerator.build(projectType, config, generateConfig, properties).let { generator ->
generator.first { it.type == sourceCodeType } generator.first { it.type == sourceCodeType }
}.writeTo(outputDir) }.writeTo(outputDir)
configureSourceSets(project = this) configureSourceSets(project = this, properties)
} }
rootProject.generate() 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 projectType = project.resolveType()
val config = config.from(project).let { 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." "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.") } 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) { private fun decideSourceCodeType(config: GropifyConfig.CommonCodeGenerateConfig, type: ProjectType) = when (type) {

View File

@@ -173,7 +173,17 @@ open class GropifyConfigureExtension internal constructor() {
@JvmName("extensionName") set @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() { open inner class JvmGenerateConfigureScope internal constructor() : CommonCodeGenerateConfigureScope() {