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 full-size slide

  2. @guillaumeehret dev-mind.fr

    View full-size slide

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

    View full-size slide

  4. Quasi monopole

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 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 full-size slide

  9. 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 full-size slide

  10. Enjeux et contraintes

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. 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 full-size slide

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

    View full-size slide

  17. Enjeux et contraintes

    View full-size slide

  18. 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 full-size slide

  19. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. Ne jamais exprimer
    des tailles en pixels

    View full-size slide

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

    View full-size slide

  25. 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 full-size slide

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

    View full-size slide

  27. pour gérer cette fragmentation

    View full-size slide

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

    View full-size slide

  29. Simplicité & concision

    View full-size slide

  30. 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 full-size slide

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

    View full-size slide

  32. 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 full-size slide

  33. Du concret….

    View full-size slide

  34. 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 full-size slide

  35. Activité Services Content
    providers
    Broadcast
    providers

    View full-size slide

  36. 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 full-size slide

  37. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide



  41. #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 full-size slide

  42. 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 full-size slide

  43. 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 full-size slide

  44. 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 full-size slide

  45. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  51. 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 full-size slide

  52. instancie mémoire

    View full-size slide

  53. instancie mémoire
    référence

    View full-size slide

  54. instancie mémoire
    Out of Memory

    View full-size slide

  55. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  59. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  62. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  66. Entrées Sorties
    Mocks

    View full-size slide

  67. Unit tests Instrumented
    tests

    View full-size slide

  68. 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 full-size slide

  69. 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 full-size slide

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

    View full-size slide