今回の記事はこの記事の続きです。
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
の値を表示するだけのプラグインとなっています。
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にて登録します。
...
gradlePlugin {
plugins {
register("androidApplicationCompose") {
id = "com.takagimeow.myapplication.android.application.compose"
implementationClass = "AndroidApplicationComposeConventionPlugin"
}
}
}
そして、ルートディレクトリに存在するsettings.gradle.ktsにてincludeBuild("build-logic")
を呼び出します。
pluginManagement {
includeBuild("build-logic")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
...
よし!ビルドを実行!。。。してみたのですが、Buildツールウィンドウにextension: extension 'android'
が表示されませんでした。
どうしたものかと悩んでいたのですが、ひとつ仮説を立てました。
これはプラグインなので、ビルド対象のモジュールのbuild.gradle.ktsのplugins {}
に呼び出したいプラグインを記述しないといけないのではないかと。
なので、id("com.takagimeow.myapplication.android.application.compose")
をappモジュールのbuild.gradle.ktsに追加してみました。ここで渡す値は、先ほどregister()
を呼び出したときに設定したid
の値です。
...
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'