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 ...
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
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
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
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
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…)
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
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
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)
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
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 ...
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
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
Les layouts Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android ConstraintLayout TextView ImageView TextView
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
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 } } }
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 { // ... }
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
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
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