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

2h pour créer une application Android en Kotlin

Dev-Mind
November 29, 2018
240

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
  2. 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 ...
  3. 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
  4. 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
  5. 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
  6. User apps Packager une application .dex Ressources & Librairies APK

    compile assemble push PROD push DEV via ADB
  7. 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
  8. 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
  9. 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…)
  10. 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
  11. 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
  12. Fragmentation tailles des écrans votre UI doit être flexible ou

    vous pouvez utiliser des layouts différents
  13. Fragmentation taille des écrans Résolution = nb de pixel horizontal

    X nb de pixel vertical Source : Android dashboard Octobre 2018
  14. 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
  15. 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)
  16. 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
  17. 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 ...
  18. 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
  19. Cycle de vie activité Created Started visible Paused Visible partiellement

    Stopped masqué Resumed visible onCreate() onStart() onStart() onRestart() onResume() onPause() onResume() onStop() onDestroy()
  20. 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
  21. Les layouts Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre

    Android Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android ConstraintLayout TextView ImageView TextView
  22. 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
  23. 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<Speaker> @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 } } }
  24. 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 { // ... }
  25. Développer une app Android Studio en action Activités Layout Les

    ressources Intent Base de données Asynchronisme Tests
  26. 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
  27. 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
  28. 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