Budowanie wtyczek Gradle nie jest nowe, a Kotlin nie jest nowy, a Android nie jest nowy. Z tego samego powodu, budowanie wtyczek Gradle w Kotlinie nie jest nowe, podobnie jak budowanie wtyczek Gradle dla aplikacji na Androida. Ale budowanie wtyczek Gradle, w Kotlinie, dla Androida? Cóż, tak naprawdę nie ma tam zbyt wielu informacji na ten temat.
Zanim zaczniemy, wspomnę tylko, że pisanie wtyczek Gradle dla Androida jest, pod wieloma względami, znacznie łatwiejsze, jeśli piszesz w Groovy. Ale gdyby to co chcieliśmy zrobić było proste, nie rozmawialibyśmy o tym. Więc po prostu trzymajmy się planu.
Więc istnieje wiele zasobów na temat budowania wtyczek w Kotlinie, a wiele z nich jest świetnych, więc jeśli dopiero zaczynasz od zera, może idź i wygoogluj to przed kontynuowaniem, ponieważ zamierzamy przeskoczyć prosto do dobrych rzeczy: Jak uzyskać dostęp do śmieci Androida wewnątrz swojej wtyczki Kotlin Gradle? Glad you asked.
Przede wszystkim, co mamy na myśli przez „Android junk?”. Cóż, kiedy twój skrypt budowania gradle uruchamia się, aby zbudować aplikację na Androida, wtyczka aplikacji androidowej doda garść zadań do twojej budowy, a ty będziesz konfigurować te zadania w zamknięciu androidowym, którego wtyczka używa do konfiguracji. Twoje zamknięcie androida w pliku build.gradle może wyglądać tak:
A jeśli tworzysz własną wtyczkę, możesz chcieć poznać niektóre z rzeczy w tym zamknięciu lub inne rzeczy, które robi AGP. Dla groovy, to wszystko jest dość łatwe i proste, ponieważ groovy nie wymaga od ciebie jawnego importowania czegokolwiek. Ale w Kotlinie, nie można się od tego uwolnić. Tak więc, pierwszą rzeczą jaką musisz zrobić, jest dodanie zależności w pliku build.gradle twojej wtyczki Gradle od Android Gradle Plugin. Tak więc, w skrypcie build.gradle twojej wtyczki, będziesz potrzebował:
dependencies {
implementation gradleApi()
implementation 'com.squareup:javapoet:1.10.0'
implementation 'com.squareup:kotlinpoet:1.0.0-RC1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compileOnly("com.android.tools.build:gradle:3.6.3")
}
Kluczem jest tutaj ostatnia linia. Używamy compileOnly, ponieważ w czasie uruchamiania ta zależność zostanie dostarczona przez build.script aplikacji na Androida, która stosuje twoją wtyczkę, w jej skrypcie budowania. Wszystko, czego potrzebujemy, to aby twoja wtyczka była świadoma AGP, więc możemy korzystać z API, które zapewnia.
The Kotlin Part
Teraz, gdy zależność jest uwzględniona, nasza wtyczka może w końcu uzyskać dostęp do tego słodkiego śmiecia Androida:
Jeśli chcesz uzyskać dostęp do zamknięcia androida w swojej wtyczce, najpierw musisz uzyskać instancję AppExtension kompilacji. Zrób to używając następującej linii:
val appExtension = project.extensions.findByType(AppExtension::class.java)
Gdy już masz instancję AppExtension, możesz robić różne rzeczy, takie jak sprawdzanie wariantów aplikacji, dodawanie zadań do cyklu życia kompilacji Androida za pomocą funkcji dependsOn(), a nawet, jak sugeruje powyższy przykład, generowanie nowych plików źródłowych i kompilowanie ich do twojego projektu.