Gradle-liitännäisten rakentaminen ei ole uutta, eikä Kotlin ole uutta, eikä Android ole uutta. Samoin Gradle-liitännäisten rakentaminen Kotlinilla ei ole uutta, eikä Gradle-liitännäisten rakentaminen Android-sovelluksille. Mutta Gradle-lisäosien rakentaminen Kotlinilla Androidia varten? No, siitä ei todellakaan ole kovin paljon tietoa.
Ennen kuin aloitamme, mainitsen vain, että Android Gradle -liitännäisten kirjoittaminen on monin tavoin paljon helpompaa, jos kirjoitat Groovy-kielellä. Mutta se mitä halusimme tehdä oli helppoa, emme puhuisi siitä. Joten pitäydytään vain suunnitelmassa.
Kotlin-liitännäisten rakentamisesta Kotlin-kielellä on paljon resursseja, ja monet niistä ovat loistavia, joten jos aloitat tyhjästä, käy ehkä googlailemassa, ennen kuin jatkat, sillä me hyppäämme suoraan hyviin asioihin: Miten pääset käsiksi Android-romuun Kotlin Gradle -lisäosan sisällä? Hyvä, että kysyit.
Aluksi, mitä tarkoitamme ”Android-romulla”? No, kun gradle build-skriptisi ajetaan rakentaaksesi Android-sovelluksesi, android-sovellusliitännäinen lisää kasan tehtäviä rakennukseesi, ja sinä konfiguroit nämä tehtävät android-sulkemisessa, jota liitännäinen käyttää konfigurointiin. Build.gradle-tiedostossasi oleva android-suljin saattaa näyttää jotakuinkin tältä:
Ja jos olet luomassa omaa lisäosaa, saatat haluta tietää joitakin tuossa suljimessa olevia asioita tai muita AGP:n tekemiä asioita. Groovyn osalta tämä kaikki on melko helppoa ja suoraviivaista, koska groovy ei vaadi sinua tuomaan eksplisiittisesti mitään. Mutta Kotlinin kanssa et pääse siitä eroon. Ensimmäiseksi sinun on siis lisättävä Gradle-lisäosan build.gradle-tiedostoon riippuvuus Android Gradle Pluginista. Pluginisi build.gradle-skriptissä tarvitaan siis:
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")
}
Tärkeintä tässä on viimeinen rivi. Käytämme compileOnly-periaatetta, koska ajon aikana tämä riippuvuus annetaan pluginisi käyttävän Android-sovelluksen build.scriptissä, sen build-skriptissä. Tarvitsemme vain, että lisäosasi on tietoinen AGP:stä, jotta voimme käyttää sen tarjoamia API:ita.
Kotlin-osio
Nyt kun riippuvuus on sisällytetty, lisäosamme voi vihdoin päästä käsiksi tuohon suloiseen Android-romuun:
Jos haluat päästä käsiksi liitännäisohjelmassasi olevaan android-sulkuun, sinun on ensin saatava instanssi buildin sovelluksen AppExtensionista. Tee tämä käyttämällä riviä:
val appExtension = project.extensions.findByType(AppExtension::class.java)
Kun sinulla on AppExtension-instanssi, voit tehdä kaikenlaista, kuten kysellä sovelluksen variantteja, lisätä tehtäviä Android-rakennuksen elinkaareen dependsOn()-funktiolla ja jopa, kuten yllä olevassa esimerkissä ehdotetaan, luoda uusia lähdetiedostoja ja kääntää ne projektiin.