浏览代码

set(gradle): set gradle plugin manager

zhaoyadi 2 年之前
父节点
当前提交
4bfdc88332

+ 14 - 0
.idea/gradle.xml

@@ -4,6 +4,18 @@
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
+        <compositeConfiguration>
+          <compositeBuild compositeDefinitionSource="SCRIPT">
+            <builds>
+              <build path="$PROJECT_DIR$/built" name="built">
+                <projects>
+                  <project path="$PROJECT_DIR$/built" />
+                  <project path="$PROJECT_DIR$/built/convention" />
+                </projects>
+              </build>
+            </builds>
+          </compositeBuild>
+        </compositeConfiguration>
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
@@ -12,6 +24,8 @@
           <set>
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/app" />
+            <option value="$PROJECT_DIR$/built" />
+            <option value="$PROJECT_DIR$/built/convention" />
             <option value="$PROJECT_DIR$/core" />
             <option value="$PROJECT_DIR$/core/http" />
             <option value="$PROJECT_DIR$/data" />

+ 4 - 33
app/build.gradle.kts

@@ -1,25 +1,19 @@
 import org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs
 
 plugins {
-    id("com.android.application")
-    id("org.jetbrains.kotlin.android")
-    id("org.jetbrains.kotlin.kapt")
+    id("d.convention.application")
+    id("d.convention.compose")
+    id("d.convention.hilt")
     id("androidx.navigation.safeargs.kotlin")
-    id("com.google.dagger.hilt.android")
 }
 
 android {
     namespace = "com.zaojiao.app"
-    compileSdk = 33
 
     defaultConfig {
         applicationId = "com.zaojiao.app"
-        minSdk = 27
-        targetSdk = 33
         versionCode = 1
         versionName = "1.0"
-
-        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
     }
 
     buildTypes {
@@ -32,18 +26,8 @@ android {
         }
     }
 
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    composeOptions {
-        kotlinCompilerExtensionVersion = "1.4.7"
-    }
-
     buildFeatures {
         aidl = true
-        compose = true
         viewBinding = true
     }
 }
@@ -53,7 +37,6 @@ dependencies {
 
     implementation(project(":feat:home"))
 
-    implementation("androidx.core:core-ktx:1.10.1")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation("androidx.navigation:navigation-fragment-ktx:2.5.3")
     implementation("androidx.navigation:navigation-ui-ktx:2.5.3")
@@ -62,24 +45,12 @@ dependencies {
     implementation("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
 
     implementation("com.google.android.material:material:1.9.0")
-    
+
     implementation(libs.coil.kt)
     implementation(libs.coil.kt.svg)
 
-    implementation(platform("androidx.compose:compose-bom:2023.05.01"))
-    implementation("androidx.compose.ui:ui")
-    implementation("androidx.compose.foundation:foundation")
-    implementation("androidx.compose.material3:material3")
-    implementation("androidx.compose.ui:ui-tooling-preview")
-
     api("com.google.accompanist:accompanist-systemuicontroller:0.30.1")
 
-    implementation("com.google.dagger:dagger:2.44.2")
-    kapt("com.google.dagger:dagger-compiler:2.44.2")
-
-    implementation("com.google.dagger:hilt-android:2.44.2")
-    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
-
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.5")
     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

+ 2 - 1
build.gradle.kts

@@ -6,7 +6,7 @@ rootProject.buildDir = File("build")
 
 buildscript {
     dependencies {
-        classpath("com.android.tools.build:gradle:8.0.1")
+        classpath(libs.android.gradle)
         classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21")
         classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.6.0")
     }
@@ -18,6 +18,7 @@ plugins {
     id("org.jetbrains.kotlin.android").version("1.8.21").apply(false)
     id("org.jetbrains.kotlin.kapt").version("1.8.21").apply(false)
     id("com.google.dagger.hilt.android").version("2.44.2").apply(false)
+    id("org.jetbrains.kotlin.jvm") version "1.8.20" apply false
 }
 
 subprojects {

+ 48 - 0
built/convention/build.gradle.kts

@@ -0,0 +1,48 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+    `kotlin-dsl`
+}
+
+group = "com.zaojiao.app.built"
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_11
+    targetCompatibility = JavaVersion.VERSION_11
+}
+
+tasks.withType<KotlinCompile>().configureEach {
+    kotlinOptions {
+        jvmTarget = JavaVersion.VERSION_11.toString()
+    }
+}
+
+dependencies {
+    compileOnly(libs.android.gradle)
+    compileOnly(libs.kotlin.gradle)
+    compileOnly(libs.ksp.gradle)
+}
+
+gradlePlugin {
+    plugins {
+        register("application") {
+            id = "d.convention.application"
+            implementationClass = "ApplicationConventionPlugin"
+        }
+
+        register("library") {
+            id = "d.convention.library"
+            implementationClass = "LibraryConventionPlugin"
+        }
+
+        register("compose") {
+            id = "d.convention.compose"
+            implementationClass = "ComposeConventionPlugin"
+        }
+
+        register("hilt") {
+            id = "d.convention.hilt"
+            implementationClass = "HiltConventionPlugin"
+        }
+    }
+}

+ 23 - 0
built/convention/src/main/kotlin/ApplicationConventionPlugin.kt

@@ -0,0 +1,23 @@
+import com.android.build.api.dsl.ApplicationExtension
+import com.android.build.api.variant.ApplicationAndroidComponentsExtension
+import com.zaojiao.app.built.convention.configureKotlinAndroid
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.configure
+
+class ApplicationConventionPlugin : Plugin<Project> {
+    override fun apply(target: Project) {
+        with(target) {
+            with(pluginManager) {
+                apply("com.android.application")
+                apply("org.jetbrains.kotlin.android")
+            }
+
+            extensions.configure<ApplicationExtension> {
+                configureKotlinAndroid(this)
+                defaultConfig.targetSdk = 33
+            }
+        }
+    }
+
+}

+ 87 - 0
built/convention/src/main/kotlin/ComposeConventionPlugin.kt

@@ -0,0 +1,87 @@
+import com.android.build.api.dsl.ApplicationExtension
+import com.android.build.api.dsl.LibraryExtension
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.findByType
+import org.gradle.kotlin.dsl.withType
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+import java.io.File
+
+class ComposeConventionPlugin : Plugin<Project> {
+    override fun apply(target: Project) {
+        with(target) {
+            extensions.findByType<ApplicationExtension>()?.run {
+                buildFeatures {
+                    compose = true
+                }
+
+                composeOptions {
+                    kotlinCompilerExtensionVersion = "1.4.7"
+                }
+
+                dependencies {
+                    val platformBom = "androidx.compose:compose-bom:2023.05.01"
+                    add("implementation", platform(platformBom))
+                    add("implementation", "androidx.compose.ui:ui")
+                    add("implementation", "androidx.compose.runtime:runtime")
+                    add("implementation", "androidx.compose.foundation:foundation")
+                    add("implementation", "androidx.compose.material3:material3")
+                    add("implementation", "androidx.compose.ui:ui-tooling-preview")
+                }
+            }
+
+            extensions.findByType<LibraryExtension>()?.run {
+                buildFeatures {
+                    compose = true
+                }
+
+                composeOptions {
+                    kotlinCompilerExtensionVersion = "1.4.7"
+                }
+
+                dependencies {
+                    val platformBom = "androidx.compose:compose-bom:2023.05.01"
+                    add("implementation", platform(platformBom))
+                    add("implementation", "androidx.compose.ui:ui")
+                    add("implementation", "androidx.compose.runtime:runtime")
+                    add("implementation", "androidx.compose.foundation:foundation")
+                    add("implementation", "androidx.compose.material3:material3")
+                    add("implementation", "androidx.compose.ui:ui-tooling-preview")
+                }
+            }
+
+            with(tasks) {
+                withType<KotlinCompile>().configureEach {
+                    kotlinOptions {
+                        freeCompilerArgs = freeCompilerArgs + buildComposeMetricsParameters()
+                    }
+                }
+            }
+        }
+    }
+}
+
+private fun Project.buildComposeMetricsParameters(): List<String> {
+    val metricParameters = mutableListOf<String>()
+    val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics")
+    val enableMetrics = (enableMetricsProvider.orNull == "true")
+    if (enableMetrics) {
+        val metricsFolder = File(project.buildDir, "compose-metrics")
+        metricParameters.add("-P")
+        metricParameters.add(
+            "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath
+        )
+    }
+
+    val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports")
+    val enableReports = (enableReportsProvider.orNull == "true")
+    if (enableReports) {
+        val reportsFolder = File(project.buildDir, "compose-reports")
+        metricParameters.add("-P")
+        metricParameters.add(
+            "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath
+        )
+    }
+    return metricParameters.toList()
+}

+ 2 - 0
built/convention/src/main/kotlin/FeatConventionPlugin.kt

@@ -0,0 +1,2 @@
+class FeatConventionPlugin {
+}

+ 24 - 0
built/convention/src/main/kotlin/HiltConventionPlugin.kt

@@ -0,0 +1,24 @@
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.dependencies
+
+class HiltConventionPlugin : Plugin<Project> {
+    override fun apply(target: Project) {
+        with(target) {
+            with(pluginManager) {
+                apply("dagger.hilt.android.plugin")
+                apply("org.jetbrains.kotlin.kapt")
+                apply("com.google.dagger.hilt.android")
+            }
+
+            dependencies {
+                add("implementation", "com.google.dagger:dagger:2.44.2")
+                add("kapt", "com.google.dagger:dagger-compiler:2.44.2")
+
+                add("implementation", "com.google.dagger:hilt-android:2.44.2")
+                add("kapt", "com.google.dagger:hilt-android-compiler:2.44.2")
+            }
+        }
+    }
+
+}

+ 21 - 0
built/convention/src/main/kotlin/LibraryConventionPlugin.kt

@@ -0,0 +1,21 @@
+import com.android.build.api.dsl.ApplicationExtension
+import com.android.build.api.dsl.LibraryExtension
+import com.zaojiao.app.built.convention.configureKotlinAndroid
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.configure
+
+class LibraryConventionPlugin : Plugin<Project> {
+    override fun apply(target: Project) {
+        with(target) {
+            with(pluginManager) {
+                apply("com.android.library")
+                apply("org.jetbrains.kotlin.android")
+            }
+
+            extensions.configure<LibraryExtension> {
+                configureKotlinAndroid(this)
+            }
+        }
+    }
+}

+ 50 - 0
built/convention/src/main/kotlin/com/zaojiao/app/built/convention/AndroidKotlin.kt

@@ -0,0 +1,50 @@
+package com.zaojiao.app.built.convention
+
+import com.android.build.api.dsl.CommonExtension
+import org.gradle.api.JavaVersion
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.provideDelegate
+import org.gradle.kotlin.dsl.withType
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+internal fun Project.configureKotlinAndroid(
+    commonExtension: CommonExtension<*, *, *, *>,
+) {
+    commonExtension.apply {
+        compileSdk = 33
+
+        defaultConfig {
+            minSdk = 27
+        }
+
+        compileOptions {
+            sourceCompatibility = JavaVersion.VERSION_11
+            targetCompatibility = JavaVersion.VERSION_11
+        }
+    }
+
+    dependencies {
+        add("implementation", "androidx.core:core-ktx:1.10.1")
+    }
+
+    configureKotlin()
+}
+
+/**
+ * Configure base Kotlin options
+ */
+private fun Project.configureKotlin() {
+    tasks.withType<KotlinCompile>().configureEach {
+        kotlinOptions {
+            jvmTarget = JavaVersion.VERSION_11.toString()
+            val warningsAsErrors: String? by project
+            allWarningsAsErrors = warningsAsErrors.toBoolean()
+            freeCompilerArgs = freeCompilerArgs + listOf(
+                "-opt-in=kotlin.RequiresOptIn",
+                "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
+                "-opt-in=kotlinx.coroutines.FlowPreview",
+            )
+        }
+    }
+}

+ 25 - 0
built/convention/src/main/kotlin/com/zaojiao/app/built/convention/ProjectExtensions.kt

@@ -0,0 +1,25 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ */
+
+package com.zaojiao.app.built.convention
+
+import org.gradle.api.Project
+import org.gradle.api.artifacts.VersionCatalog
+import org.gradle.api.artifacts.VersionCatalogsExtension
+import org.gradle.kotlin.dsl.getByType
+
+val Project.libs
+    get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")

+ 15 - 0
built/settings.gradle.kts

@@ -0,0 +1,15 @@
+dependencyResolutionManagement {
+    repositories {
+        google()
+        mavenCentral()
+    }
+    versionCatalogs {
+        create("libs") {
+            from(files("../gradle/libs.versions.toml"))
+        }
+    }
+}
+
+rootProject.name = "built"
+
+include(":convention")

+ 2 - 26
core/http/build.gradle.kts

@@ -1,40 +1,16 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
-    id("org.jetbrains.kotlin.kapt")
-    id("com.google.dagger.hilt.android")
+    id("d.convention.library")
+    id("d.convention.hilt")
 }
 
 android {
     namespace = "com.zaojiao.http"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
 }
 
 dependencies {
-    implementation("androidx.core:core-ktx:1.10.1")
-
     implementation(libs.coil.kt)
     implementation(libs.coil.kt.svg)
 
-    implementation("com.google.dagger:dagger:2.44.2")
-    kapt( "com.google.dagger:dagger-compiler:2.44.2")
-
-    implementation("com.google.dagger:hilt-android:2.44.2")
-    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
-
     api("com.squareup.okhttp3:okhttp:4.10.0")
     api("com.squareup.okhttp3:logging-interceptor:4.10.0")
 

+ 2 - 0
core/http/src/main/java/com/zaojiao/http/di/ApiModule.kt

@@ -6,11 +6,13 @@ import dagger.Provides
 import dagger.hilt.InstallIn
 import dagger.hilt.components.SingletonComponent
 import retrofit2.Retrofit
+import javax.inject.Singleton
 
 @Module
 @InstallIn(SingletonComponent::class)
 class ApiModule {
 
+    @Singleton
     @Provides
     fun provideUserApi(
         retrofit: Retrofit

+ 1 - 20
data/local/build.gradle.kts

@@ -1,26 +1,7 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
+    id("d.convention.library")
 }
 
 android {
     namespace = "com.zaojiao.app.data.local"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
-}
-
-dependencies {
-    implementation("androidx.core:core-ktx:1.8.0")
 }

+ 3 - 0
data/remote/build.gradle.kts

@@ -29,4 +29,7 @@ dependencies {
 
     implementation("com.google.dagger:dagger:2.44.2")
     kapt("com.google.dagger:dagger-compiler:2.44.2")
+
+    implementation("com.google.dagger:hilt-android:2.44.2")
+    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
 }

+ 12 - 0
data/remote/src/main/kotlin/com/zaojiao/app/data/remote/RemoteUserData.kt

@@ -0,0 +1,12 @@
+package com.zaojiao.app.data.remote
+
+import com.zaojiao.http.api.UserApi
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class RemoteUserData @Inject constructor(
+    private val userApi: UserApi,
+) {
+    suspend fun getUser(): String = userApi.getUser()
+}

+ 7 - 0
data/repo/build.gradle.kts

@@ -23,8 +23,15 @@ android {
 }
 
 dependencies {
+    implementation(project(":data:remote"))
+    implementation(project(":data:local"))
+    implementation(project(":data:model"))
+
     implementation("androidx.core:core-ktx:1.10.1")
 
     implementation("com.google.dagger:dagger:2.44.2")
     kapt("com.google.dagger:dagger-compiler:2.44.2")
+
+    implementation("com.google.dagger:hilt-android:2.44.2")
+    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
 }

+ 4 - 4
data/repo/src/main/kotlin/com/zaojiao/app/data/repo/UserRepository.kt

@@ -1,11 +1,11 @@
 package com.zaojiao.app.data.repo
 
 interface UserRepository {
-    fun getUser()
+    suspend fun getUser(): String
 
-    fun getBaby()
+    suspend fun getBaby()
 
-    fun getPhone()
+    suspend fun getPhone()
 
-    fun getWechat()
+    suspend fun getWechat()
 }

+ 9 - 6
data/repo/src/main/kotlin/com/zaojiao/app/data/repo/UserRepositoryImpl.kt

@@ -1,22 +1,25 @@
 package com.zaojiao.app.data.repo
 
+import com.zaojiao.app.data.remote.RemoteUserData
+import javax.inject.Inject
 
-class UserRepositoryImpl(
 
+class UserRepositoryImpl @Inject constructor(
+    private val remoteUserData: RemoteUserData,
 ) : UserRepository {
-    override fun getUser() {
-        TODO("Not yet implemented")
+    override suspend fun getUser(): String {
+        return remoteUserData.getUser()
     }
 
-    override fun getBaby() {
+    override suspend fun getBaby() {
         TODO("Not yet implemented")
     }
 
-    override fun getPhone() {
+    override suspend fun getPhone() {
         TODO("Not yet implemented")
     }
 
-    override fun getWechat() {
+    override suspend fun getWechat() {
         TODO("Not yet implemented")
     }
 }

+ 2 - 31
feat/common/build.gradle.kts

@@ -1,43 +1,14 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
+    id("d.convention.library")
+    id("d.convention.compose")
 }
 
 android {
     namespace = "com.zaojiao.component.common"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    composeOptions {
-        kotlinCompilerExtensionVersion = "1.4.7"
-    }
-
-    buildFeatures.compose = true
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
 }
 
 dependencies {
-    implementation("androidx.core:core-ktx:1.10.1")
-
     implementation("androidx.constraintlayout:constraintlayout-compose:1.0.1")
 
     api(libs.coil.kt.compose)
-
-    implementation(platform("androidx.compose:compose-bom:2023.05.01"))
-    implementation("androidx.compose.ui:ui")
-    implementation("androidx.compose.runtime:runtime")
-    implementation("androidx.compose.foundation:foundation")
-    implementation("androidx.compose.material3:material3")
-    implementation("androidx.compose.ui:ui-tooling-preview")
 }

+ 3 - 30
feat/home/build.gradle.kts

@@ -1,31 +1,11 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
-    id("org.jetbrains.kotlin.kapt")
+    id("d.convention.library")
+    id("d.convention.compose")
+    id("d.convention.hilt")
 }
 
 android {
     namespace = "com.zaojiao.app.feat.home"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    composeOptions {
-        kotlinCompilerExtensionVersion = "1.4.7"
-    }
-
-    buildFeatures.compose = true
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
 }
 
 dependencies {
@@ -37,11 +17,4 @@ dependencies {
     kapt("com.google.dagger:dagger-compiler:2.44.2")
 
     implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
-
-    implementation(platform("androidx.compose:compose-bom:2023.05.01"))
-    implementation("androidx.compose.ui:ui")
-    implementation("androidx.compose.runtime:runtime")
-    implementation("androidx.compose.foundation:foundation")
-    implementation("androidx.compose.material3:material3")
-    implementation("androidx.compose.ui:ui-tooling-preview")
 }

+ 13 - 1
gradle/libs.versions.toml

@@ -1,7 +1,19 @@
 [versions]
 coil = "2.2.2"
+agp = "8.0.1"
+kotlin = "1.8.20"
+kotlinx = "1.8.0"
+ksp = "1.8.20-1.0.11"
 
 [libraries]
 coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" }
 coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
-coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
+coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
+
+kotlin-gradle = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
+android-gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" }
+ksp-gradle = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" }
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+android-library = { id = "com.android.library", version.ref = "agp" }

+ 2 - 0
settings.gradle.kts

@@ -1,6 +1,8 @@
 rootProject.name = "逻辑狗一起成长"
 
 pluginManagement {
+    includeBuild("built")
+
     repositories {
         google()
         mavenCentral()