LoginSignup
0
1

More than 1 year has passed since last update.

Kotlinで書いたGradleプラグインをビルド時に呼び出せるようにする

Posted at

今回の記事はこの記事の続きです。

AndroidApplicationComposeConventionPluginというクラスをbuild-logic/convention/src/main/kotlin/com/takagimeow/myapplication/AndroidApplicationComposeConventionPlugin.ktに作成しました。

- build-logic
    - convention
        - src
            - main
                - kotlin
                    - com/takagimeow/myapplication
                        - AndroidApplicationComposeConventionPlugin.kt

packageの記述はありません。

内容としては特に何もないです。単純にextensionの値を表示するだけのプラグインとなっています。

AndroidApplicationComposeConventionPlugin.kt
import com.android.build.api.dsl.ApplicationExtension
import org.gradle.api.Project
import org.gradle.api.Plugin
import org.gradle.kotlin.dsl.getByType

class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            pluginManager.apply("com.android.application")
            val extension = extensions
                .getByType<ApplicationExtension>()
            println("extension: $extension")
        }
    }
}

これを本家のアプリをビルドしたときに呼び出したいので、まずはbuild.gradle.ktsにて登録します。

build.gradle.kts
...
gradlePlugin {
    plugins {
        register("androidApplicationCompose") {
            id = "com.takagimeow.myapplication.android.application.compose"
            implementationClass = "AndroidApplicationComposeConventionPlugin"
        }
    }
}

そして、ルートディレクトリに存在するsettings.gradle.ktsにてincludeBuild("build-logic")を呼び出します。

settings.gradle.kts
pluginManagement {
    includeBuild("build-logic")
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
...

よし!ビルドを実行!。。。してみたのですが、Buildツールウィンドウにextension: extension 'android'が表示されませんでした。

どうしたものかと悩んでいたのですが、ひとつ仮説を立てました。
これはプラグインなので、ビルド対象のモジュールのbuild.gradle.ktsplugins {}に呼び出したいプラグインを記述しないといけないのではないかと。

なので、id("com.takagimeow.myapplication.android.application.compose")appモジュールのbuild.gradle.ktsに追加してみました。ここで渡す値は、先ほどregister()を呼び出したときに設定したidの値です。

build.gradle.kts
...
plugins {
    ...
    id("com.takagimeow.myapplication.android.application.compose")
}
...

再度ビルドしてみた結果、みごと表示されました!

> Task :build-logic:convention:compileKotlin UP-TO-DATE
> Task :build-logic:convention:compileJava NO-SOURCE
> Task :build-logic:convention:pluginDescriptors UP-TO-DATE
> Task :build-logic:convention:processResources UP-TO-DATE
> Task :build-logic:convention:classes UP-TO-DATE
> Task :build-logic:convention:inspectClassesForKotlinIC UP-TO-DATE
> Task :build-logic:convention:jar UP-TO-DATE
...
> Configure project :app
extension: extension 'android'
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1