11package com.hoc.comicapp.plugin
22
33import appConfig
4+ import com.android.build.api.variant.AndroidComponentsExtension
45import com.android.build.gradle.AppExtension
56import com.android.build.gradle.AppPlugin
67import com.android.build.gradle.LibraryExtension
78import com.android.build.gradle.LibraryPlugin
9+ import java.lang.System.getenv
10+ import java.util.Properties
811import org.gradle.api.JavaVersion.VERSION_1_8
912import org.gradle.api.Plugin
1013import org.gradle.api.Project
@@ -17,8 +20,6 @@ import org.gradle.kotlin.dsl.withType
1720import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
1821import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1922import versions
20- import java.lang.System.getenv
21- import java.util.Properties
2223
2324private inline val Project .libraryExtension get() = extensions.getByType<LibraryExtension >()
2425private inline val Project .appExtension get() = extensions.getByType<AppExtension >()
@@ -27,6 +28,9 @@ private inline val Project.javaPluginExtension get() = extensions.getByType<Java
2728open class ComicAppExtension {
2829 var viewBinding: Boolean = false
2930 var parcelize: Boolean = false
31+ var namespace: String? = null
32+
33+ override fun toString (): String = " ComicAppExtension(viewBinding=$viewBinding , parcelize=$parcelize , namespace=$namespace )"
3034}
3135
3236class ComicAppPlugin : Plugin <Project > {
@@ -63,18 +67,42 @@ class ComicAppPlugin : Plugin<Project> {
6367 val comicAppExtension = project.extensions.create(" comicApp" , ComicAppExtension ::class )
6468
6569 project.afterEvaluate {
70+ println (" After evaluate $project -> config $comicAppExtension " )
71+
72+ val namespace by lazy {
73+ checkNotNull(comicAppExtension.namespace) {
74+ """
75+ |Require ComicAppExtension.namespace.
76+ |Add comicApp { namespace = "..." } to ${project.name} /build.gradle.kts""" .trimMargin()
77+ }
78+ }
79+
80+ val extension by lazy {
81+ project.extensions.getByName(
82+ " androidComponents"
83+ ) as AndroidComponentsExtension <* , * , * >
84+ }
85+
6686 project.plugins.all {
6787 when (this ) {
6888 is LibraryPlugin -> {
69- libraryExtension.buildFeatures {
70- viewBinding = comicAppExtension.viewBinding
71- dataBinding = false
89+ extension.finalizeDsl { it.namespace = namespace }
90+
91+ libraryExtension.run {
92+ buildFeatures {
93+ viewBinding = comicAppExtension.viewBinding
94+ dataBinding = false
95+ }
7296 }
7397 enableParcelize(comicAppExtension.parcelize)
7498 }
7599 is AppPlugin -> {
76- appExtension.buildFeatures.run {
77- viewBinding = comicAppExtension.viewBinding
100+ extension.finalizeDsl { it.namespace = namespace }
101+
102+ appExtension.run {
103+ buildFeatures.run {
104+ viewBinding = comicAppExtension.viewBinding
105+ }
78106 }
79107 enableParcelize(comicAppExtension.parcelize)
80108 }
0 commit comments