Mark Dappollone
Mark Dappollone

Follow

12 maggio, 2020 – 3 min read

Costruire plugin Gradle non è nuovo, e Kotlin non è nuovo, e Android non è nuovo. Per lo stesso motivo, costruire plugin Gradle in Kotlin non è nuovo, e nemmeno costruire plugin Gradle per applicazioni Android. Ma costruire plugin Gradle, in Kotlin, per Android? Beh, non ci sono davvero molte informazioni su questo.

Prima di iniziare, dirò solo che scrivere plugin Gradle per Android è, in molti modi, molto più facile se si scrive in Groovy. Ma se quello che vogliamo fare fosse facile, non ne parleremmo. Quindi atteniamoci al piano.

Ignoratelo.

Ci sono un sacco di risorse là fuori sulla costruzione di plugin in Kotlin, e molte sono ottime, quindi se state iniziando da zero, magari andate a cercarle su Google prima di continuare, perché stiamo per saltare direttamente alla roba buona: Come ottenere l’accesso alla spazzatura Android all’interno del tuo plugin Kotlin Gradle? Felice che tu l’abbia chiesto.

Benvenuti…

Prima di tutto, cosa intendiamo per “spazzatura Android”? Bene, quando il tuo script di build gradle viene eseguito per costruire la tua applicazione Android, il plugin dell’applicazione android aggiungerà un mucchio di compiti alla tua build, e tu configurerai questi compiti nella chiusura android che il plugin usa per la configurazione. La tua chiusura android nel tuo file build.gradle potrebbe essere simile a questa:

E se stai creando il tuo plugin, potresti voler conoscere alcune delle cose in quella chiusura, o altre cose che sta facendo AGP. Per groovy, tutto questo è abbastanza facile e diretto, perché groovy non richiede di importare esplicitamente nulla. Ma con Kotlin, non puoi cavartela con questo. Quindi, la prima cosa che devi fare, è aggiungere una dipendenza nel file build.gradle del tuo plugin Gradle sul plugin Android Gradle. Quindi, nello script build.gradle del tuo plugin, avrai bisogno di:

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")
}

La chiave qui è l’ultima riga. Stiamo usando compileOnly, poiché, in fase di esecuzione, questa dipendenza sarà fornita dal build.script dell’applicazione Android che applica il tuo plugin, nel suo script di compilazione. Tutto ciò di cui abbiamo bisogno è che il tuo plugin sia consapevole dell’AGP, in modo da poter utilizzare le API che fornisce.

La parte Kotlin

Ora che la dipendenza è inclusa, il nostro plugin può finalmente ottenere l’accesso a quella dolce spazzatura Android:

Se vuoi ottenere l’accesso alla chiusura android nel tuo plugin, prima dovrai ottenere un’istanza di AppExtension della build. Fatelo usando la linea:

val appExtension = project.extensions.findByType(AppExtension::class.java)

Una volta che avete l’istanza di AppExtension, potete fare ogni genere di cose, come interrogare le varianti di app, aggiungere compiti nel ciclo di vita della build di Android usando la funzione dependsOn(), e persino, come suggerito dall’esempio precedente, generare nuovi file sorgente e compilarli nel vostro progetto.

Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.