Tvorba Gradle pluginů není nic nového, Kotlin není nic nového a Android není nic nového. Ze stejného důvodu není vytváření zásuvných modulů Gradle v jazyce Kotlin nové, a stejně tak není nové vytváření zásuvných modulů Gradle pro aplikace pro Android. Ale vytváření zásuvných modulů Gradle v jazyce Kotlin pro Android? No, o tom opravdu není tolik informací.
Než začneme, zmíním se jen o tom, že psaní Gradle pluginů pro Android je v mnoha ohledech mnohem jednodušší, pokud píšete v Groovy. Ale to, co jsme chtěli udělat, bylo snadné, to bychom o tom nemluvili. Takže se prostě držme plánu.
Takže existuje spousta zdrojů o vytváření pluginů v Kotlinu a mnohé z nich jsou skvělé, takže pokud právě začínáte od nuly, možná si to jděte vygooglit, než budete pokračovat, protože my přeskočíme přímo k těm dobrým věcem: Jak získáte přístup k Android junk in uvnitř vašeho Kotlin Gradle pluginu? Jsem rád, že se ptáte.
Nejprve, co máme na mysli pod pojmem „Android junk“? No, když se spustí skript sestavení gradle pro sestavení vaší aplikace pro Android, zásuvný modul aplikace pro Android přidá do sestavení několik úloh a vy tyto úlohy nakonfigurujete v uzávěrce Android, kterou zásuvný modul používá pro konfiguraci. Váš uzávěr android v souboru build.gradle může vypadat nějak takto:
A pokud vytváříte vlastní zásuvný modul, možná budete chtít znát některé věci v tomto uzávěru nebo jiné věci, které dělá AGP. Pro groovy je to všechno docela snadné a přímočaré, protože groovy nevyžaduje, abyste něco explicitně importovali. Ale v Kotlinu vám to neprojde. Takže první věc, kterou musíte udělat, je přidat závislost v souboru build.gradle vašeho pluginu Gradle na Android Gradle Plugin. Takže ve skriptu build.gradle vašeho pluginu budete potřebovat:
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")
}
Klíčový je zde poslední řádek. Používáme compileOnly, protože za běhu bude tuto závislost poskytovat build.script aplikace Android, která aplikuje váš zásuvný modul, ve svém skriptu sestavení. Jediné, co potřebujeme, je, aby váš zásuvný modul věděl o AGP, abychom mohli používat API, které poskytuje.
Část Kotlin
Teď, když je závislost zahrnuta, může náš zásuvný modul konečně získat přístup k tomu sladkému harampádí Androidu:
Chcete-li ve svém zásuvném modulu získat přístup k uzávěru Android, musíte nejprve získat instanci sestavení AppExtension. Udělejte to pomocí řádku:
val appExtension = project.extensions.findByType(AppExtension::class.java)
Jakmile máte instanci AppExtension, můžete dělat různé věci, například se dotazovat na varianty aplikací, přidávat úlohy do životního cyklu sestavení systému Android pomocí funkce dependsOn(), a dokonce, jak naznačuje příklad výše, generovat nové zdrojové soubory a kompilovat je do svého projektu.
.