Slide 1

Slide 1 text

17 avril 2019

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

@guillaumeehret dev-mind.fr

Slide 7

Slide 7 text

mixteen.org mixitconf.org solidarite-wassadou.fr

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Quasi monopole

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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 15

Slide 15 text

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 16

Slide 16 text

Enjeux et contraintes

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

User apps

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Application 1 ne peut pas ... Lire les données Utiliser la mémoire Utiliser les ressources CPU Utiliser les devices … de l’application 2

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Enjeux et contraintes

Slide 28

Slide 28 text

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

Slide 29

Slide 29 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 Source : Android dashboard Octobre 2018

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Ne jamais exprimer des tailles en pixels

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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)

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

pour gérer cette fragmentation

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Simplicité & concision

Slide 41

Slide 41 text

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 42

Slide 42 text

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

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

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 46

Slide 46 text

Du concret….

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

Activité Services Content providers Broadcast providers

Slide 50

Slide 50 text

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é

Slide 51

Slide 51 text

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 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

instancie mémoire

Slide 72

Slide 72 text

instancie mémoire référence

Slide 73

Slide 73 text

instancie mémoire Out of Memory

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

pour limiter les fuites mémoires et faciliter les tests

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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 79

Slide 79 text

No content

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

No content

Slide 89

Slide 89 text

Entrées Sorties Mocks

Slide 90

Slide 90 text

Unit tests Instrumented tests

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

https://developer.android.com/kotlin/ La page officielle de Google https://www.youtube.com/watch?v=UhDtYFt64HM Vidéo sur Kotlin de JB Nizet

Slide 94

Slide 94 text

https://developer.android.com/ Le site des devs android https://developers.google.com/training Des tutoriels en ligne https://androidleakspodcast.com/ Le podcast francophone

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

No content