Développer une application en Kotlin

Développer une application en Kotlin

Voici les slides utilisés à Devoxx pour présenter la programmation Android en Kotlin. Ces slides ont été utilisés lors d'un hands lab de 3h

D3bcad37b1ec0fc8ecdeb199e54a61e4?s=128

Dev-Mind

April 17, 2019
Tweet

Transcript

  1. 17 avril 2019

  2. None
  3. None
  4. None
  5. None
  6. @guillaumeehret dev-mind.fr

  7. mixteen.org mixitconf.org solidarite-wassadou.fr

  8. None
  9. Quasi monopole

  10. Février 2019 Android sur plus de 70% des OS mobiles

  11. Les mobiles ont dépassé les desktop dans le monde Février

    2019
  12. Android est l’OS le plus utilisé tout device confondu (pas

    encore en Europe et Amérique du nord) Février 2019
  13. None
  14. Camera Podomètre Luminosité Thermomètre Microphone Capteur empreinte Accéléromètre Magnétomètre Capteur

    proximité Gyroscope Prise de pouls Reconnaissance gestuelle Baromètre ...
  15. Wear OS Montres... Android Things Pour l’IOT Android TV Pour

    le salon consoles, TV Android Auto Pour les voitures autonomes ou non Chrome OS Déployer sur ce nouvel OS Android JetPack Librairies et utilitaires pour simplifier le dev
  16. Enjeux et contraintes

  17. Linux Kernel Hardware Abtraction Layer (HAL) Native C/C++ librairies Android

    Runtime (ART) Java / Kotlin API Framework System apps User apps
  18. User apps

  19. None
  20. User apps .dex Ressources & Librairies APK compile assemble push

    push via ADB
  21. .dex Ressources & Librairies APK dex2oat .oat Android Runtime (ART)

    run
  22. .dex Ressources & Librairies APK dex2oat .oat Android Runtime (ART)

    run
  23. None
  24. None
  25. Application 1 ne peut pas ... Lire les données Utiliser

    la mémoire Utiliser les ressources CPU Utiliser les devices … de l’application 2
  26. vous devez spécifier votre intention via une intent (ouvrir un

    composant, envoyer un message…)
  27. Enjeux et contraintes

  28. Cupcake 1.5 / Api 3 2009 Donut 1.6 / Api

    4 2009 Eclair 2.0 - 2.1 / Api 5-7 2010 Froyo 2.2 / Api 8 2011 Gingerbread 2.3 / Api 9-10 2011 Honeycomb 3.0-3.2 / Api 11-13 2011 Ice Cream Sandwich 4.0 / Api 14-15 2011 Jelly Bean 4.1-4.3 / Api 16-18 2012 Kit Kat 4.4 / Api 19-20 2013 Lolipop 5.0-5.1 / Api 21 2014 Marshmallo w 6.0 / Api 22 2015 Nougat 7.0-7.1 / Api 23 2016 Oreo 8.0-8.1 / Api 24 2017 Pie 9.0 / Api 25 2018
  29. Nougat 7.0-7.1 / Api 23 2016 Pie 9.0 / Api

    28 2018 utilisation 0% Oreo 8.0-8.1 / Api 24 2017 Marshmallow 6.0 / Api 22 2015 Lolipop 5.0-5.1 / Api 21 2014 Kit Kat 4.4 / Api 19-20 2013 Source : Android dashboard Octobre 2018
  30. None
  31. Résolution = nombre de pixel horizontal x nombre de pixel

    vertical Taille = nombre de pouce en diagonale
  32. votre UI doit être flexible ou vous pouvez utiliser des

    layouts différents
  33. Densité = nombre de points par pouce (dot per inch

    => dpi)
  34. Ne jamais exprimer des tailles en pixels

  35. mdpi xxhdpi mdpi xxhdpi Si vous utilisez des px Si

    vous utilisez des dp
  36. dp= density-independent pixels pour les layouts et images sp =

    scalable pixels pour les fonts car s’adapte aux paramètres d'accessibilité (sp ne s’utilise pas pour les layouts)
  37. Une multitude de constructeur Des performances très différentes entre device

  38. pour gérer cette fragmentation

  39. Connaître ses utilisateurs Simplifier les besoins Adaptez les APK Préserver

    leurs ressources
  40. Simplicité & concision

  41. Rendre les développements plus rapides et plus simples en poussant

    l’expressivité Kotlin se base sur la JVM et est complètement interopérable avec Java
  42. Kotlin est le langage utilisé pour développer Android Studio

  43. None
  44. None
  45. Kotlin simplifie la syntaxe Immutabilité Adieu les null pointers Paramètres

    par défaut Data class Extensions de fonction Fonctions d’ordre supérieur Coroutines
  46. Du concret….

  47. 1.0 Mise en place du projet et ressources 2.0 Premier

    écran, page d’accueil ConstraintLayout 3.0 Ajouter un menu 4.0 Un écran liste avec un RecyclerView 5.0 Ecran création et de modification 6.0 Utilisation de Room pour la persistance dans SQLite 7.0 Jouer avec le cycle de vie 8.0 Utiliser les ViewModel et Livedata 9.0 Mettre en place des tests d’intégration
  48. None
  49. Activité Services Content providers Broadcast providers

  50. Décrire la vue dans un layout Un layout se définit

    en XML Créer une activité Classe Java qui va hériter de AppCompatActivity Lier l’activité à la vue Se fait dans le onCreate de l’activité Déclarer la vue comme point d’entrée Mise à jour du fichier AndroidManifest.xml Activité
  51. Définit la structure d’une interface utilisateur Revient à placer des

    widgets (View) dans des layouts (ViewGroup) ViewGroup principal ViewGroup View View View View
  52. Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android Devoxx

    Bienvenue à Devoxx Maroc, nous allons apprendre Android ConstraintLayout TextView ImageView TextView
  53. Created Started visible Paused Visible partiellement Stopped masqué Resumed visible

    onCreate() onStart() onRestart() onResume() onPause() onResume() onStop() onDestroy()
  54. None
  55. Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android Une

    vue utilise différentes ressources Color Menu Drawable String Font Layout Values Mipmap ... Style
  56. <?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#29333f</color> <color name="colorPrimaryDark">#18202b</color> </resources> app/src/main/res/values/colors.xml

    @color/colorPrimary Utilisation en XML (layout, autre ressource) resources.getColor(R.color.colorPrimary) Utilisation en Kotlin (activité ou autre)
  57. Android détecte les changements de configuration et charge les bonnes

    ressources au runtime <resources_name>-<config_qualifier> par exemple app/src/main/res/drawable/image.jpg app/src/main/res/drawable-xxhdpi/image.jpg app/src/main/res/values/colors.xml app/src/main/res/values-night/colors.xml
  58. None
  59. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout ... Layout n Android implémente une vue pour chaque ligne de votre liste
  60. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout ... Layout n Android implémente une vue pour chaque ligne de votre liste
  61. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout 5 Layout 6 Android implémente une vue pour chaque ligne visible de votre liste et les recycle quand vous scrollez
  62. None
  63. https://developer.android.com/jetpack/

  64. Comment faciliter l’interaction avec une base de données SQLite

  65. None
  66. Quand l’application se lance Android démarre un processus avec un

    seul thread d’exécution
  67. Quand l’application se lance Android démarre un processus avec un

    seul thread d’exécution Main Thread Error
  68. Quand l’application se lance Android démarre un processus avec un

    seul thread d’exécution AsyncTask Worker
  69. Une coroutine est une unité de traitement permettant d’exécuter du

    code non-bloquant et asynchrone (thread allégé) open class MainActivity : AppCompatActivity(), CoroutineScope { override val coroutineContext: CoroutineContext get() = Dispatchers.Default override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) launch { … } } }
  70. None
  71. instancie mémoire

  72. instancie mémoire référence

  73. instancie mémoire Out of Memory

  74. Inner classe non statique en Kotlin les classes nested sont

    par construction statiques Classes anonymes beaucoup utilisées pour la gestion des événements (penser à détruire les références) Privilegier le pattern Singleton pour vos objets communs Application context plutôt que activity context
  75. pour limiter les fuites mémoires et faciliter les tests

  76. https://developer.android.com/jetpack/

  77. Created Started visible Paused Visible partiellement Stopped masqué Resumed visible

    onCreate() onStart() onRestart() onResume() onPause() onResume() onStop() onDestroy()
  78. Activité A contient les fragments A et B Activité A

    contient le fragment A Activité B contient le fragment B La sélection d’un item à gauche met à jour le fragment B à droite La sélection d’un item à gauche ouvre l’activité B
  79. None
  80. Lifecycle owner Lifecycle Lifecycle observer Your code read receive events

    Fragment et AppCompacteActivity implémentent LifeCycleOwner
  81. Démarrage d’une activité INITIALIZED DESTROYED CREATED STARTED RESUMED Initial start

    dead state ON_CREATE ON_START ON_RESUME
  82. INITIALIZED DESTROYED CREATED STARTED RESUMED Initial start dead state ON_PAUSE

    ON_STOP ON_DESTROY Rotation activité démarrée ON_CREATE ON_START ON_RESUME
  83. None
  84. UI contrôleur Fragment ou activité ViewModelProvider Fournit le ViewModel ViewModel

    observe Gère interaction utilisateur Gère interaction données
  85. onCreate onStart onResume onPause onStop onDestroy onCreate onStart onResume onPause

    onStop onDestroy Lancement écran Rotation de l’écran Sortie écran onCleared ViewModel scope
  86. UI contrôleur Fragment ou activité ViewModelProvider Fournit le ViewModel ViewModel

    observe Gère interaction utilisateur Gère interaction données LiveData<Pojo> Datasource
  87. None
  88. None
  89. Entrées Sorties Mocks

  90. Unit tests Instrumented tests

  91. None
  92. None
  93. https://developer.android.com/kotlin/ La page officielle de Google https://www.youtube.com/watch?v=UhDtYFt64HM Vidéo sur Kotlin

    de JB Nizet
  94. https://developer.android.com/ Le site des devs android https://developers.google.com/training Des tutoriels en

    ligne https://androidleakspodcast.com/ Le podcast francophone
  95. Romain Guy @romainguy Chet Haase @chethaase Cyril Mottier @cyrilmottier Jack

    Wharton @JakeWharton Pierre Yves Ricau @Piwai
  96. None