Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Exit les scripts, on se créé un plugin Android ...

Exit les scripts, on se créé un plugin Android Studio ?

Android Studio est un outil que nous utilisons tous les jours. Déjà très fourni en fonctionnalités, il propose en plus la possibilité de les étendre avec un système de plugins qui répondent à certains besoins : parenthèses colorés, génération de code Kotlin à partir d’un fichier JSON, support du langage Dart, etc…

Il y en a beaucoup, mais on a parfois CE besoin spécifique que l’on voudrait automatiser pour un projet, une équipe, voire une entreprise.

Beaucoup par manque de temps ou de connaissances, préfèrent le faire manuellement: le gain de temps ne serait pas si énorme. D’autres plus courageux font cette automatisation via un script : Bash, Python, Java, Kotlin… Moi-même auteur de scripts, j’ai trouvé frustrant de devoir sortir de mon IDE, utiliser un autre outil auquel je dois fournir quelques informations contextuelles. Exemple : mon terminal ne sait pas sur quel fichier je veux exécuter tel ou tel script, je dois lui renseigner manuellement.

Je me suis alors posé plein de questions : Comment intégrer mes scripts dans mon IDE ? Est-ce facile ? Est-ce que ça en vaut le coût ? Dans quel contexte l’automatisation devient intéressante ? Réponses dans ce talk ;)

Thierry LEE

April 25, 2022
Tweet

More Decks by Thierry LEE

Other Decks in Programming

Transcript

  1. 1 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Exit les scripts, on se créé un plugin Android Studio ? Android Makers 2022 25 avril 2022
  2. 2 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved ๏ Dev Android @OctoTechnology ๏ Auteur de scripts ๏ Android Studio plugin maker Thierry LEE
  3. There is a better way 3 03 02 01 05

    04 OCTO Part of Accenture © 2022 - All rights reserved Sommaire Pourquoi créer des plugins ? Mise en place Coder son plugin Déployer son plugin Conclusions
  4. There is a better way 4 OCTO Part of Accenture

    © 2022 - All rights reserved Pourquoi créer des plugins ? 01
  5. 5 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Kotlin synthetic deprecated … Passage en View Binding
  6. 6 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  7. 7 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  8. 8 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  9. 9 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Répétitif… Et si j’en faisais un script ?
  10. 10 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Et si on codait ça ?
  11. 11 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  12. 12 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved toCamelCase() + “Binding” En dur
  13. There is a better way 13 OCTO Part of Accenture

    © 2022 - All rights reserved Spec en 3 étapes A C Trouver le nom du layout B Construire la property ViewBinding Insérer la property
  14. 14 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved #! /bin/bash fileName=$1 while(line) do # Pour retrouver le nom du layout # grep, regex, awk, cut… done < $fileName # Où et comment l’insérer dans mon fichier ? migrateToViewBinding.sh
  15. 15 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Copie le nom du fichier à modifier Tape le nom du script + coller le nom du fichier Change d’outil
  16. 16 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  17. 17 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Comment faire mieux, et en plus facile ?
  18. 18 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  19. There is a better way 19 OCTO Part of Accenture

    © 2022 - All rights reserved Mise en place 02
  20. There is a better way 20 OCTO Part of Accenture

    © 2022 - All rights reserved Avant de commencer… Télécharger
  21. 21 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Créer un nouveau projet
  22. There is a better way 22 OCTO Part of Accenture

    © 2022 - All rights reserved
  23. There is a better way 23 OCTO Part of Accenture

    © 2022 - All rights reserved Plugin compatible version >= BumbleBee https://plugins.jetbrains.com/docs/intellij/ android-studio-releases-list.html
  24. There is a better way 24 OCTO Part of Accenture

    © 2022 - All rights reserved Outils pour manipuler Java, Kotlin et Android
  25. There is a better way 25 OCTO Part of Accenture

    © 2022 - All rights reserved Tester son plugin sur Android Studio pendant le dev
  26. 26 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Créer une action
  27. There is a better way 27 OCTO Part of Accenture

    © 2022 - All rights reserved L’équivalent Activity des plugins Les Actions
  28. There is a better way 28 OCTO Part of Accenture

    © 2022 - All rights reserved
  29. 29 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Enregistrer son action
  30. There is a better way 30 OCTO Part of Accenture

    © 2022 - All rights reserved
  31. There is a better way 31 OCTO Part of Accenture

    © 2022 - All rights reserved AndroidManifest.xml pour plugins plugin.xml
  32. 32 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Lancer son action
  33. There is a better way 33 OCTO Part of Accenture

    © 2022 - All rights reserved ๏ Lancer ๏ Créer une Run/Debug configuration ./gradlew runIde
  34. There is a better way 34 OCTO Part of Accenture

    © 2022 - All rights reserved
  35. 35 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  36. 36 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  37. 37 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  38. There is a better way 38 OCTO Part of Accenture

    © 2022 - All rights reserved Coder son plugin 03
  39. 39 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  40. There is a better way 40 OCTO Part of Accenture

    © 2022 - All rights reserved A C Trouver le nom du layout B Construire la property ViewBinding Insérer la property
  41. 41 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  42. 42 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  43. 43 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  44. 44 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Comment s’assurer qu’on prend le setContentView de la méthode onCreate ? … compliqué
  45. 45 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved Les PSI : Program Structure Interface
  46. 46 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved PSI permet de lire un fichier de façon structurée
  47. There is a better way 47 OCTO Part of Accenture

    © 2022 - All rights reserved Structure d’un fichier Kotlin File Class Method
  48. There is a better way 48 OCTO Part of Accenture

    © 2022 - All rights reserved Plugin PsiViewer
  49. There is a better way 49 OCTO Part of Accenture

    © 2022 - All rights reserved
  50. There is a better way 50 OCTO Part of Accenture

    © 2022 - All rights reserved ktFile importDirectives classes fields name type methods name returnType typeParameters name type PsiElement
  51. There is a better way 51 OCTO Part of Accenture

    © 2022 - All rights reserved ktFile importDirectives classes fields name type methods name returnType typeParameters name type Chercher la méthode dont name == “onCreate”
  52. There is a better way 52 OCTO Part of Accenture

    © 2022 - All rights reserved ktClass onCreateMethod
  53. There is a better way 53 OCTO Part of Accenture

    © 2022 - All rights reserved ktClass onCreateMethod
  54. There is a better way 54 OCTO Part of Accenture

    © 2022 - All rights reserved onCreateMethod.text
  55. There is a better way 55 OCTO Part of Accenture

    © 2022 - All rights reserved C Trouver le nom du layout B Construire la property ViewBinding Insérer la property B A
  56. There is a better way 56 OCTO Part of Accenture

    © 2022 - All rights reserved
  57. There is a better way 57 OCTO Part of Accenture

    © 2022 - All rights reserved
  58. There is a better way 58 OCTO Part of Accenture

    © 2022 - All rights reserved C Trouver le nom du layout Insérer la property A C B Construire la property ViewBinding
  59. There is a better way 59 OCTO Part of Accenture

    © 2022 - All rights reserved
  60. There is a better way 60 OCTO Part of Accenture

    © 2022 - All rights reserved onCreateMethod .startOffset
  61. 61 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved ⚠ WriteCommandAction pour écrire dans un fichier
  62. There is a better way 62 OCTO Part of Accenture

    © 2022 - All rights reserved Ecriture avec offset
  63. There is a better way 63 OCTO Part of Accenture

    © 2022 - All rights reserved Ecriture avec offset
  64. There is a better way 64 OCTO Part of Accenture

    © 2022 - All rights reserved Ecriture avec PSI
  65. There is a better way 65 OCTO Part of Accenture

    © 2022 - All rights reserved Ecriture avec PSI
  66. 66 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved
  67. There is a better way 67 OCTO Part of Accenture

    © 2022 - All rights reserved PSI avec d’autres langages JAVA PsiFile PsiJavaFile PsiFactory XML PsiFile XmlFile PsiFactory JavaPsiFacade .getInstance(e.project!!) .elementFactory .create… XmlElementFactoryImpl(e.project) .create…
  68. There is a better way 68 OCTO Part of Accenture

    © 2022 - All rights reserved Possibilités d’un plugin PSI Cookbook https://plugins.jetbrains.com/docs/intellij/psi-cookbook.html Trouver fichier par son nom Trouver où un PsiElement est utilisé Renommer un PsiElement Trouver une classe par son nom Lire la structure d’un fichier Ecrire dans un fichier Et plein d’autres !… Manipuler d’autres fichiers Afficher des dialogs, prompts…
  69. There is a better way 69 OCTO Part of Accenture

    © 2022 - All rights reserved Types de plugins Thèmes Support de langage Outils Add-ons interface Intégration framework Les types de plugins ADB
  70. There is a better way 70 OCTO Part of Accenture

    © 2022 - All rights reserved Types de plugins Thèmes Support de langage Outils Add-ons interface Intégration framework Les types de plugins ADB
  71. There is a better way 71 OCTO Part of Accenture

    © 2022 - All rights reserved Déployer son plugin 04
  72. There is a better way 72 OCTO Part of Accenture

    © 2022 - All rights reserved A C Préparer une signConfig B Compiler + Signer son plugin Upload sur le JetBrains plugin marketplace
  73. There is a better way 73 OCTO Part of Accenture

    © 2022 - All rights reserved A C Préparer une signConfig B Upload sur le JetBrains plugin marketplace Compiler + Signer son plugin
  74. There is a better way 74 OCTO Part of Accenture

    © 2022 - All rights reserved - private.pem - chain.crt Documentation https://plugins.jetbrains.com/docs/intellij/plugin-signing.html#generate-private-key Générer une paire de clé openssl genpkey\ -aes-256-cbc\ -algorithm RSA\ -out private.pem\ -pkeyopt rsa_keygen_bits:4096 openssl req\ -key private.pem\ -new\ -x509\ -days 365\ -out chain.crt
  75. There is a better way 75 OCTO Part of Accenture

    © 2022 - All rights reserved Configurer le projet
  76. There is a better way 76 OCTO Part of Accenture

    © 2022 - All rights reserved C Préparer une signConfig B Compiler + Signer son plugin Upload sur le JetBrains plugin marketplace B A
  77. There is a better way 77 OCTO Part of Accenture

    © 2022 - All rights reserved ๏ Lancer ๏ Créer une Run/Debug configuration Compiler & signer ./gradlew signPlugin
  78. There is a better way 78 OCTO Part of Accenture

    © 2022 - All rights reserved
  79. There is a better way 79 OCTO Part of Accenture

    © 2022 - All rights reserved C Préparer une signConfig Upload sur le JetBrains plugin marketplace A C B Compiler + Signer son plugin
  80. There is a better way 80 OCTO Part of Accenture

    © 2022 - All rights reserved ๏ Récupérer binaire dans <rootProject>/build/distributions/<pluginName>-<version>-signed.zip ๏ S’authentifier sur le site JetBrains Marketplace https://plugins.jetbrains.com/ ๏ Uploader le binaire ๏ Remplir la fiche de présentation du plugin ๏ Attendre la validation (1~2 jours la première fois) Upload sur le JetBrains plugin marketplace
  81. There is a better way 81 OCTO Part of Accenture

    © 2022 - All rights reserved Conclusions 05
  82. There is a better way 82 OCTO Part of Accenture

    © 2022 - All rights reserved Avantage des plugins vs scripts ? Rester sur son IDE Plus besoin de transfert d’infos Intégration + des plugins Eviter grep / awk / cut / regex… Lecture via les PSI Pas de changement de langage Dev facilité Distribution En utilisant plugin marketplace Facile à trouver Versioning facile
  83. There is a better way 83 OCTO Part of Accenture

    © 2022 - All rights reserved ๏ Distribution classique de binaire sans utiliser le plugin marketplace ๏ Peut prendre du temps à faire Réfléchir au gain de temps que ça apportera ๏ Usages ponctuels Ex: migration partielle, progressive ๏ Pour migrations totales, d’autres solutions existent Pratique, mais pas automatique
  84. 84 There is a better way OCTO Part of Accenture

    © 2022 - All rights reserved ?