$30 off During Our Annual Pro Sale. View Details »

2h pour créer une application Android en Kotlin

Dev-Mind
November 29, 2018
200

2h pour créer une application Android en Kotlin

Slides de ma présentation à Devoxx Maroc le 27 novembre 2018

Dev-Mind

November 29, 2018
Tweet

Transcript

  1. 2 heures pour créer une
    app Android en Kotlin
    Guillaume EHRET
    @guillaumeehret
    https://dev-mind.fr

    View Slide

  2. Ecosystème
    Android

    View Slide

  3. Android sur 80% des OS mobiles
    Données Sep. 2018

    View Slide

  4. Android est l’OS le plus utilisé
    Données Sep. 2018

    View Slide

  5. Présent sur de nombreux devices

    View Slide

  6. Des capteurs de plus en plus nombreux
    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

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

  8. View Slide

  9. Guillaume EHRET
    @guillaumeehret
    https:// dev-mind.fr

    View Slide

  10. Guillaume EHRET
    mixteen.org
    https://
    https:// mixitconf.org
    https:// solidarite-wassadou.fr

    View Slide

  11. View Slide

  12. View Slide

  13. La plateforme
    Android

    View Slide

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

    View Slide

  15. User apps
    Langages utilisés pour développer

    View Slide

  16. Le but de Kotlin est de 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

  17. User apps
    Packager une application
    .dex
    Ressources
    & Librairies
    APK
    compile assemble
    push
    PROD
    push DEV
    via ADB

    View Slide

  18. User apps
    Installation application
    Android Runtime (ART)
    run
    dex2oat
    APK
    .dex
    Ressources
    & Librairies
    .oat

    View Slide

  19. User apps
    Installation application
    Android Runtime (ART)
    run
    dex2oat
    APK
    .dex
    Ressources
    & Librairies
    .oat
    APP
    Linux Kernel
    Hardware Abtraction Layer (HAL)
    Native C/C++ librairies Android Runtime (ART)
    Java / Kotlin API Framework
    System apps User apps

    View Slide

  20. User apps
    Sécurité s’appuie sur Linux
    Ressources
    & Librairies
    .oat
    APP
    Ressources
    & Librairies
    .oat
    APP

    View Slide

  21. User apps
    Isolation des applications
    Ressources
    & Librairies
    .oat
    APP
    Ressources
    & Librairies
    .oat
    APP
    Application A ne peut pas ...
    Lire les données
    Utiliser la mémoire
    Utiliser les ressources CPU
    Utiliser les devices
    … de l’application B

    View Slide

  22. User apps
    Communication via messages
    Ressources
    & Librairies
    .oat
    APP
    Ressources
    & Librairies
    .oat
    APP
    Application A interagit avec l’application B
    vous devez spécifier
    votre intention via une intent
    (ouvrir un composant,
    envoyer un message…)

    View Slide

  23. View Slide

  24. Fragmentation
    Android

    View Slide

  25. Une version par an
    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
    Marshmallow
    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

  26. 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
    Fragmentation versions
    Source : Android dashboard
    Septembre 2018

    View Slide

  27. Fragmentation tailles des écrans
    votre UI doit
    être flexible
    ou vous pouvez
    utiliser des layouts
    différents

    View Slide

  28. Fragmentation taille des écrans
    Résolution = nb de pixel horizontal X nb de pixel vertical
    Source : Android dashboard
    Octobre 2018

    View Slide

  29. Fragmentation densité
    Les écrans ont des densités de pixel différentes. Elle se mesure en regardant le
    nombre de points par pouce (dot per inch ⇒ dpi)
    4.3% 25.7% 42.2% 25.9% Source : Android dashboard
    Octobre 2018

    View Slide

  30. Fragmentation densité
    Les écrans ont des densités de pixel différentes
    Une règle = pas de taille en pixel
    on utilise
    dp: density-independent pixels pour les layouts et images
    sp: scalable pixels pour les fonts car s’adapte aux paramètres
    d’accesibilité (sp ne s’utilise pas pour les layouts)

    View Slide

  31. Fragmentation densité
    Si vous utilisez des px
    mdpi xxhdpi
    mdpi xxhdpi
    Si vous utilisez des dp

    View Slide

  32. Connaître ses utilisateurs
    Développer une app peut devenir coûteux si vous cibler 100% des possibilités. Il
    faut faire des choix
    Version de l’API utilisée
    Taille des écrans ciblées
    Résolutions ciblées

    View Slide

  33. Connaître ses utilisateurs
    Développer une app peut devenir coûteux si vous cibler 100% des possibilités. Il
    faut faire des choix
    Version de l’API utilisée
    Taille des écrans ciblées
    Résolutions ciblées
    mais aussi...
    Langue de l’utilisateur
    Usage (mobile, tv, montre…)
    Orientation
    Mode jour/nuit
    ...

    View Slide

  34. View Slide

  35. Créer notre
    application

    View Slide

  36. Les points d’entrée
    Activité Services Content
    providers
    Broadcast
    providers

    View Slide

  37. Créer une activité
    Activité
    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

    View Slide

  38. Cycle de vie activité
    Created
    Started
    visible
    Paused
    Visible partiellement
    Stopped
    masqué
    Resumed
    visible
    onCreate()
    onStart()
    onStart()
    onRestart()
    onResume()
    onPause()
    onResume()
    onStop()
    onDestroy()

    View Slide

  39. Les layouts
    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

  40. Les layouts
    Devoxx
    Bienvenue à Devoxx Maroc,
    nous allons apprendre
    Android
    Devoxx
    Bienvenue à Devoxx Maroc,
    nous allons apprendre
    Android
    ConstraintLayout
    TextView ImageView TextView

    View Slide

  41. Les ressources
    Toutes les ressources statiques ou dépendant du device (taille,
    réseau, pays, langue, orientation…) doivent être isolées dans des
    fichiers
    Android chargera les bonnes ressources en
    fonction des contraintes du device
    Color
    Drawable
    Font
    Layout
    Menu
    Mipmap
    String
    Values

    View Slide

  42. https://github.com/Dev-Mind/androidAtDevoxxMa

    View Slide

  43. Coder une application
    Liv
    in
    en

    View Slide

  44. Android JetPack
    Room
    comment accéder à la
    base SQLite présente
    sur vos devices

    View Slide

  45. Android Room
    Room
    comment accéder à la
    base SQLite présente
    sur vos devices grâce à
    des annotations
    2 Ecrire des DAO pour
    exécuter des requêtes
    3 Déclarer la base de
    données et les DAO
    @Entity(tableName = "speaker")
    data class Speaker(
    @PrimaryKey val uiid: String,
    @ColumnInfo var firstName: String,
    @ColumnInfo var lastName: String,
    @ColumnInfo var country: String = "MAROC"
    )
    1 Mapper son modèle objet
    et la base de données
    @Dao
    interface SpeakerDao{
    @Query("SELECT * from speaker")
    fun all(): List
    @Insert
    fun insert(speaker: Speaker)
    @Delete
    fun delete(speaker: Speaker)
    }
    private lateinit var INSTANCE: AppDatabase
    @Database(entities = arrayOf(Speaker::class),
    version = 1)
    abstract class AppDatabase : RoomDatabase() {
    abstract fun speakerDao(): SpeakerDao
    companion object {
    fun instance(context: Context): AppDatabase {
    synchronized(AppDatabase::class) {
    if (!::INSTANCE.isInitialized) {
    INSTANCE = Room.databaseBuilder(
    context.applicationContext,
    AppDatabase::class.java,
    "AppDatabase").build()
    }
    }
    return INSTANCE
    }
    }
    }

    View Slide

  46. Android lance votre application dans un nouveau processus. Le thread principal
    dispacthe les événements utilisateurs, met jour la vue
    Il ne faut jamais bloquer ce thread principal
    Android vous empêche de bloquer ce thread. Si vous ne respectez pas cette recommandation, une exception
    est levée et votre application est stoppée
    Android asynchrone
    Solution = Coroutines
    GlobalScope.launch {
    // ...
    }

    View Slide

  47. View Slide

  48. Tester votre application

    View Slide

  49. Mocks
    Entrées Sorties
    Tester

    View Slide

  50. Tester votre application
    Unit tests Instrumented tests
    Junit

    View Slide

  51. Développer une app
    Android Studio en action
    Activités
    Layout
    Les ressources
    Intent
    Base de données
    Asynchronisme
    Tests

    View Slide

  52. Ressources
    https://github.com/Dev-Mind/kotlinInAction
    https://github.com/Dev-Mind/androidAtDevoxxMa
    https://developer.android.com/
    https://developers.google.com/training
    https://github.com/google/material-design-icons

    View Slide

  53. Merci de votre
    attention

    View Slide

  54. View Slide

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

  56. Développer en

    View Slide

  57. Le but de Kotlin est de 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

  58. Les avantages de Kotlin
    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

  59. Découvrir Kotlin
    Liv
    in
    en

    View Slide