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

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

Dev-Mind

April 17, 2019
Tweet

More Decks by Dev-Mind

Other Decks in Programming

Transcript

  1. 17 avril 2019

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. @guillaumeehret dev-mind.fr

    View Slide

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

    View Slide

  8. View Slide

  9. Quasi monopole

    View Slide

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

    View Slide

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

    View Slide

  12. Android est l’OS le plus utilisé tout device confondu
    (pas encore en Europe et Amérique du nord)
    Février 2019

    View Slide

  13. View Slide

  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
    ...

    View Slide

  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

    View Slide

  16. Enjeux et contraintes

    View Slide

  17. Linux Kernel
    Hardware Abtraction Layer (HAL)
    Native C/C++
    librairies
    Android Runtime
    (ART)
    Java / Kotlin API Framework
    System apps User apps

    View Slide

  18. User apps

    View Slide

  19. View Slide

  20. User apps
    .dex
    Ressources
    & Librairies
    APK
    compile assemble
    push
    push
    via ADB

    View Slide

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

    View Slide

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

    View Slide

  23. View Slide

  24. View Slide

  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

    View Slide

  26. vous devez spécifier
    votre intention via une
    intent
    (ouvrir un composant,
    envoyer un message…)

    View Slide

  27. Enjeux et contraintes

    View Slide

  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

    View Slide

  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

    View Slide

  30. View Slide

  31. Résolution = nombre de pixel horizontal
    x nombre de pixel vertical
    Taille = nombre de pouce en diagonale

    View Slide

  32. votre UI doit
    être flexible
    ou vous pouvez
    utiliser des layouts
    différents

    View Slide

  33. Densité = nombre de points
    par pouce (dot per inch => dpi)

    View Slide

  34. Ne jamais exprimer
    des tailles en pixels

    View Slide

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

    View Slide

  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)

    View Slide

  37. Une multitude de constructeur
    Des performances très différentes entre device

    View Slide

  38. pour gérer cette fragmentation

    View Slide

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

    View Slide

  40. Simplicité & concision

    View Slide

  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

    View Slide

  42. Kotlin est le langage utilisé pour développer Android Studio

    View Slide

  43. View Slide

  44. View Slide

  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

    View Slide

  46. Du concret….

    View Slide

  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

    View Slide

  48. View Slide

  49. Activité Services Content
    providers
    Broadcast
    providers

    View Slide

  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é

    View Slide

  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

    View Slide

  52. Devoxx
    Bienvenue à Devoxx
    Maroc, nous allons
    apprendre Android
    Devoxx
    Bienvenue à Devoxx
    Maroc, nous allons
    apprendre Android
    ConstraintLayout
    TextView ImageView TextView

    View Slide

  53. Created
    Started
    visible
    Paused
    Visible partiellement
    Stopped
    masqué
    Resumed
    visible
    onCreate()
    onStart()
    onRestart()
    onResume()
    onPause()
    onResume()
    onStop()
    onDestroy()

    View Slide

  54. View Slide

  55. Devoxx
    Bienvenue à Devoxx
    Maroc, nous allons
    apprendre Android
    Une vue utilise différentes ressources
    Color
    Menu
    Drawable
    String
    Font
    Layout
    Values
    Mipmap
    ...
    Style

    View Slide



  56. #29333f
    #18202b

    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)

    View Slide

  57. Android détecte les changements de configuration et
    charge les bonnes ressources au runtime
    -
    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

    View Slide

  58. View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  62. View Slide

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

    View Slide

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

    View Slide

  65. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 {

    }
    }
    }

    View Slide

  70. View Slide

  71. instancie mémoire

    View Slide

  72. instancie mémoire
    référence

    View Slide

  73. instancie mémoire
    Out of Memory

    View Slide

  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

    View Slide

  75. pour limiter les fuites mémoires et faciliter les tests

    View Slide

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

    View Slide

  77. Created
    Started
    visible
    Paused
    Visible partiellement
    Stopped
    masqué
    Resumed
    visible
    onCreate()
    onStart()
    onRestart()
    onResume()
    onPause()
    onResume()
    onStop()
    onDestroy()

    View Slide

  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

    View Slide

  79. View Slide

  80. Lifecycle owner
    Lifecycle
    Lifecycle observer Your code
    read
    receive
    events
    Fragment et AppCompacteActivity implémentent
    LifeCycleOwner

    View Slide

  81. Démarrage d’une activité
    INITIALIZED DESTROYED CREATED STARTED RESUMED
    Initial start dead state
    ON_CREATE
    ON_START
    ON_RESUME

    View Slide

  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

    View Slide

  83. View Slide

  84. UI contrôleur
    Fragment ou activité
    ViewModelProvider
    Fournit le ViewModel
    ViewModel
    observe
    Gère interaction
    utilisateur
    Gère interaction
    données

    View Slide

  85. onCreate
    onStart
    onResume
    onPause
    onStop
    onDestroy
    onCreate
    onStart
    onResume
    onPause
    onStop
    onDestroy
    Lancement écran
    Rotation de l’écran
    Sortie écran
    onCleared
    ViewModel
    scope

    View Slide

  86. UI contrôleur
    Fragment ou activité
    ViewModelProvider
    Fournit le ViewModel
    ViewModel
    observe
    Gère interaction
    utilisateur
    Gère interaction
    données
    LiveData
    Datasource

    View Slide

  87. View Slide

  88. View Slide

  89. Entrées Sorties
    Mocks

    View Slide

  90. Unit tests Instrumented
    tests

    View Slide

  91. View Slide

  92. View Slide

  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

    View Slide

  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

    View Slide

  95. Romain Guy
    @romainguy
    Chet Haase
    @chethaase
    Cyril Mottier
    @cyrilmottier
    Jack Wharton
    @JakeWharton
    Pierre Yves Ricau
    @Piwai

    View Slide

  96. View Slide