mirror of
https://github.com/HighCapable/Gropify.git
synced 2025-12-11 15:53:54 +08:00
feat: add manifest placeholders support in AndroidGenerateConfig
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user