Mark Dappollone
Mark Dappollone

Follow

12 mai, 2020 – 3 min de lecture

Construire des plugins Gradle n’est pas nouveau, et Kotlin n’est pas nouveau, et Android n’est pas nouveau. De même, la construction de plugins Gradle en Kotlin n’est pas nouvelle, et la construction de plugins Gradle pour les applications Android non plus. Mais construire des plugins Gradle, en Kotlin, pour Android ? Eh bien, il y a vraiment juste pas que beaucoup d’informations là-bas sur ce.

Avant de commencer, je vais juste mentionner que l’écriture de plugins Gradle Android est, à bien des égards, beaucoup plus facile si vous écrivez en Groovy. Mais ce que nous voulions faire était facile, nous ne serions pas en train d’en parler. Donc, nous allons simplement nous en tenir au plan.

Ignorez-le.

Donc, il y a beaucoup de ressources là-bas sur la construction de plugins en Kotlin, et beaucoup sont grands, donc si vous êtes juste à partir de zéro, peut-être aller et Google que avant de continuer, parce que nous allons sauter directement à la bonne chose : Comment accéder à la camelote Android à l’intérieur de votre plugin Kotlin Gradle ? Heureux que vous ayez demandé.

Bienvenue…

Tout d’abord, qu’entendons-nous par « déchets Android » ? Eh bien, lorsque votre script de construction gradle s’exécute pour construire votre application Android, le plugin d’application android va ajouter un tas de tâches à votre construction, et vous allez configurer ces tâches dans la fermeture android que le plugin utilise pour la configuration. Votre fermeture android dans votre fichier build.gradle pourrait ressembler à quelque chose comme ceci:

Et si vous créez votre propre plugin, vous pourriez vouloir connaître certaines des choses dans cette fermeture, ou d’autres choses que l’AGP fait. Pour groovy, tout cela est assez facile et direct, parce que groovy ne vous demande pas d’importer explicitement quoi que ce soit. Mais avec Kotlin, vous ne pouvez pas vous en passer. Ainsi, la première chose que vous devez faire est d’ajouter une dépendance dans le fichier build.gradle de votre plugin Gradle sur le plugin Android Gradle. Ainsi, dans le script build.gradle de votre plugin, vous aurez besoin 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")
}

La clé ici est la dernière ligne. Nous utilisons compileOnly, car, au moment de l’exécution, cette dépendance sera fournie par le script build.script de l’application Android qui applique votre plugin, dans son script de construction. Tout ce dont nous avons besoin, c’est que votre plugin soit conscient de l’AGP, afin que nous puissions utiliser les API qu’il fournit.

La partie Kotlin

Maintenant que la dépendance est incluse, notre plugin peut enfin avoir accès à cette douce camelote Android:

Si vous voulez avoir accès à la fermeture android dans votre plugin, vous devrez d’abord obtenir une instance de l’AppExtension du build. Faites-le en utilisant la ligne:

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

Une fois que vous avez l’instance de l’AppExtension, vous pouvez faire toutes sortes de choses, comme interroger les variantes de l’application, ajouter des tâches dans le cycle de vie du build Android en utilisant la fonction dependsOn(), et même, comme suggéré par l’exemple ci-dessus, générer de nouveaux fichiers sources et les compiler dans votre projet.

Articles

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.