Construirea de plugin-uri Gradle nu este ceva nou, nici Kotlin nu este nou, nici Android nu este nou. În aceeași măsură, construirea de pluginuri Gradle în Kotlin nu este nouă, și nici construirea de pluginuri Gradle pentru aplicații Android nu este nouă. Dar construirea de pluginuri Gradle, în Kotlin, pentru Android? Ei bine, nu există chiar atât de multe informații în acest sens.
Înainte de a începe, voi menționa doar că scrierea de pluginuri Gradle pentru Android este, în multe privințe, mult mai ușoară dacă scrieți în Groovy. Dar dacă ceea ce am vrut să facem ar fi fost ușor, nu am fi vorbit despre asta. Așa că haideți să ne ținem de plan.
Există o mulțime de resurse despre construirea de pluginuri în Kotlin, iar multe dintre ele sunt foarte bune, așa că, dacă tocmai începeți de la zero, poate mergeți și căutați pe Google înainte de a continua, pentru că vom trece direct la lucrurile bune: Cum obțineți acces la junk-ul Android în interiorul plugin-ului Kotlin Gradle? Mă bucur că ați întrebat.
În primul rând, ce înțelegem prin „Android junk”? Ei bine, atunci când scriptul gradle build se execută pentru a construi aplicația Android, pluginul pentru aplicații Android va adăuga o grămadă de sarcini la construcția dvs., iar dvs. veți configura aceste sarcini în închiderea android pe care pluginul o folosește pentru configurare. Închiderea android din fișierul build.gradle ar putea arăta cam așa:
Și dacă vă creați propriul plugin, s-ar putea să doriți să cunoașteți unele dintre lucrurile din acea închidere, sau alte lucruri pe care le face AGP. Pentru groovy, toate acestea sunt destul de ușoare și directe, deoarece groovy nu vă cere să importați nimic în mod explicit. Dar cu Kotlin, nu puteți scăpa de acest lucru. Așadar, primul lucru pe care trebuie să îl faceți este să adăugați o dependență în fișierul build.gradle al pluginului Gradle pentru Android Gradle Plugin. Așadar, în scriptul build.gradle al plugin-ului dvs., veți avea nevoie de:
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")
}
Cheia aici este ultima linie. Folosim compileOnly, deoarece, la momentul execuției, această dependență va fi furnizată de scriptul build.script al aplicației Android care aplică pluginul dvs., în scriptul său de construire. Tot ce avem nevoie este ca plugin-ul dvs. să fie conștient de AGP, astfel încât să putem folosi API-urile pe care le oferă.
Partea Kotlin
Acum că dependența este inclusă, plugin-ul nostru poate în sfârșit să aibă acces la acel junk Android dulce:
Dacă doriți să obțineți acces la închiderea android în plugin-ul dvs., mai întâi va trebui să obțineți o instanță a AppExtension din build. Faceți acest lucru folosind linia:
val appExtension = project.extensions.findByType(AppExtension::class.java)
După ce aveți instanța AppExtension, puteți face tot felul de lucruri, cum ar fi să interogați variantele de aplicații, să adăugați sarcini în ciclul de viață al construcției Android folosind funcția dependsOn() și chiar, așa cum sugerează exemplul de mai sus, să generați noi fișiere sursă și să le compilați în proiectul dvs.
.