Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Ecosystème Android

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Présent sur de nombreux devices

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

La plateforme Android

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

User apps Langages utilisés pour développer

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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…)

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Fragmentation Android

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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)

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Créer notre application

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Coder une application Liv in en

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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 { // ... }

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

Tester votre application

Slide 49

Slide 49 text

Mocks Entrées Sorties Tester

Slide 50

Slide 50 text

Tester votre application Unit tests Instrumented tests Junit

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Merci de votre attention

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

Développer en

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

Découvrir Kotlin Liv in en