SlideShare une entreprise Scribd logo
Proprietary + Confidential
Android et minimalisme
Adaptez votre application aux smartphones d’entrée de
gamme à connectivité limitée
2
Proprietary + Confidential
Plan
● Réduisez votre application
● Limitez de consommation de données
● Contrôlez l’impact sur la batterie
3
Proprietary + Confidential
Réduisez votre
application
Proprietary + Confidential
4
Proprietary + Confidential
Proprietary + Confidential
Migration vers Android App
Bundle
5
Proprietary + Confidential
Proprietary + Confidential
Avec APK Classique
Le smartphone télécharge tous les
fichier de /res
6
Proprietary + Confidential
Proprietary + Confidential
Avec App Bundle
Le smartphone télécharge uniquement
les fichier dont il a besoin
8
Proprietary + Confidential
Proprietary + Confidential
Réduction de la taille des téléchargement
30% de réduction pour Twitter sur Android
Avant
Après
Base
Traductions
Images
Elements
d’interface
9
Proprietary + Confidential
Proprietary + Confidential
Migration vers Android App Bundle
À retrouver sur Youtube goo.gle/mad-app-blundles 10
Proprietary + Confidential
Proprietary + Confidential
Plus d’info sur d.android.com/guide/app-bundle
Migration vers Android App Bundle
11
Proprietary + Confidential
Proprietary + Confidential
Reduction des
ressources
graphiques
12
Proprietary + Confidential
Proprietary + Confidential
Android Size Analyzer
Le plugin Android Size Analyzer fournit des recommandations pour
optimiser l’usage de vos photos et illustrations:
● Éviter d’inclure des images de grande taille,
● Utiliser des formats permettant la compression des images,
● etc…
13
Proprietary + Confidential
Proprietary + Confidential
Imagerie vectorielle
VectorDrawables est le système d’imagerie vectorielle d’Android:
● Fichier plus légers
● Agrandissement sans perte de qualité
Le format VectorDrawables est comparable au SVG (idéal pour les illustrations).
15
Proprietary + Confidential
Proprietary + Confidential
La fonctionnalité Vector Asset
Studio d’Android Studio vous
permet de convertir vos fichier
SVG en VectorDrawables.
Vector Asset Studio
17
Proprietary + Confidential
Proprietary + Confidential
Images au format WebP
WebP est une alternative aux formats de compression d’image JPEG ou PNG.
JPEG 263 kb
WebP 93 kb
18
Proprietary + Confidential
Proprietary + Confidential
Images au format WebP
● WebP est supporté à partir d’Android 3.2 (API level 13)
● Image converter dans Android Studio permet la conversion
19
Proprietary + Confidential
Proprietary + Confidential
Reduction du
code source
20
Proprietary + Confidential
Proprietary + Confidential
Reduction du code source
R8 effectue une réduction du code source pour ne garder uniquement l’essentiel à
l’exécution de l’application.
android {
...
buildTypes {
getByName("release") {
isMinifyEnabled = true
...
}
}
}
isMinifyEnabled=true effectue aussi nombre d’optimisations pour Kotlin.
22
Proprietary + Confidential
Proprietary + Confidential
android {
...
buildTypes {
getByName("release") {
isShrinkResources = true
...
}
}
}
Reduction des ressources graphiques
isShrinkResources = true
supprime les ressources
déréferencées dans votre code
source.
23
Proprietary + Confidential
Limitez de
consommation
de données
Proprietary + Confidential
24
Proprietary + Confidential
Proprietary + Confidential
Analyse des appels HTTP
25
Proprietary + Confidential
Proprietary + Confidential
Network Profiler dans
Android Studio permet
l’affichage et l’analyse des
appels HTTP en temps réel.
Accessible via View > Tool
Windows > Profiler ou le
bouton Profile dans la
barre d’outils et sélectionnez
“RÉSEAU”.
Proprietary + Confidential
Analyse des appels HTTP
26
Proprietary + Confidential
Proprietary + Confidential
Mise en cache des
appels HTTP
27
Proprietary + Confidential
Proprietary + Confidential
HttpsURLConnection
Pas de dépendances
Approche ancienne et
daté
Cache HTTP
Ajouter un cache HTTP
Volley
Fonctionnalités
avancées
Cache par défaut
Compliqué à
appréhender
Dépendances externes
OkHttp
Facile à appréhender
Populaire et bien
documenté
Dépendances externes
Cronet
Fonctionnalités
avancées
Utilisé par Youtube,
Google Photo, Maps
Dépendances externes
30
Proprietary + Confidential
Proprietary + Confidential
Cache d’image
Ajouter un cache d’image
Picasso
Facile à appréhender
Populaire et bien
documenté
Dépendances
externes
Glide
Optimisé pour la
rapidité et fluidité.
Dépendances
externes
Fresco
JPEG en téléchargement
progressif
Transformation d’images
Dépendances
modulaires
Compliqué à
appréhender
Coil
Optimisé pour Kotlin et
coroutines
Facile à appréhender
Bonne compatibilité
avec R8
Seulement pour Kotlin
31
Proprietary + Confidential
Contrôlez
l’impact sur la
batterie
Proprietary + Confidential
32
Proprietary + Confidential
Proprietary + Confidential
Analyse de la
consommation énergétique
33
Proprietary + Confidential
Consommation Énergétique
Sources de consommation:
Tâches CPU intensives (traitement d’image ou de son, compression de
fichier, ML, etc…)
Utilisation de l’écran sur de longues périodes
Utilisation du GPS
Activité réseau
34
Proprietary + Confidential
Proprietary + Confidential
Energy Profiler d’Android
Studio permet d’identifier les
sources de consommation
dans votre application.
Accessible via View > Tool
Windows > Profiler ou le
bouton Profile dans la barre
d’outils et sélectionnez
“ENERGIE”.
Proprietary + Confidential
Analyse énergétique
35
Proprietary + Confidential
Proprietary + Confidential
Optimizations
contextuelles
36
Proprietary + Confidential
Proprietary + Confidential
Optimizations contextuelles
“Gros” téléchargements
(rafraichissement du
cache)
Tâches locales
intensives
Appels régulier au GPS
Téléchargements
sporadiques (utiliser
cache si possible)
Tâches locales modérées
Appels limités au GPS
Pas d’appels HTTP
(utiliser le cache)
Tâches locales limitées
Pas d’appels au GPS
37
Proprietary + Confidential
Proprietary + Confidential
Informations baterie
Accéder au niveau de la baterie
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let {
ifilter -> context.registerReceiver(null, ifilter)
}
val batteryPercent: Float? = batteryStatus?.let { intent ->
val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
level * 100 / scale.toFloat()
}
38
Proprietary + Confidential
Proprietary + Confidential
Informations baterie
Accéder au statut de recharge
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let {
ifilter -> context.registerReceiver(null, ifilter)
}
val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL
val chargePlug: Int =
batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1
val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB
val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC
39
Proprietary + Confidential
Proprietary + Confidential
WorkManager
Utiliser WorkManager lié au contexte
val constraints = Constraints.Builder().setRequiresBatteryNotLow(true)
.setRequiresCharging(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresDeviceIdle(true)
.build()
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.setInputData(imageData)
.setConstraints(constraints)
.build()
WorkManager.getInstance().enqueue(uploadWorkRequest)
40
Proprietary + Confidential
Proprietary + Confidential
Informations réseau
Accéder au statut réseau
val connectivityManager = getSystemService(ConnectivityManager::class.java)
val currentNetwork = connectivityManager.getActiveNetwork()
connectivityManager.registerDefaultNetworkCallback(object :
ConnectivityManager.NetworkCallback() {
override fun onAvailable(network : Network) {
Log.e(TAG, "The default network is now: " + network)
}
[...]
})
41
Proprietary + Confidential
Merci !
42

Contenu connexe

Similaire à Android et Minimalisme - Thomas Ezan

Redmine présentation sug 2012
Redmine présentation sug 2012Redmine présentation sug 2012
Redmine présentation sug 2012
Yannick Quenec'hdu
 
Killer app par la design et le code
Killer app par la design et le codeKiller app par la design et le code
Killer app par la design et le code
Benjamin Launay
 
Niji rapport de prévention 2021 - android 12
Niji   rapport de prévention 2021 - android 12Niji   rapport de prévention 2021 - android 12
Niji rapport de prévention 2021 - android 12
Gabriel DUPONT
 
Développement mobile cross-plateform
Développement mobile cross-plateformDéveloppement mobile cross-plateform
Développement mobile cross-plateform
Stefan Cosquer
 
L'univers Android
L'univers AndroidL'univers Android
L'univers Android
Chiheb Ouaghlani
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
YaminaGh1
 
Bonitasoft - Vue générale de l’architecture de la plateforme Bonita
Bonitasoft  - Vue générale de l’architecture de la plateforme BonitaBonitasoft  - Vue générale de l’architecture de la plateforme Bonita
Bonitasoft - Vue générale de l’architecture de la plateforme Bonita
Bonitasoft
 
Rex ionic
Rex ionicRex ionic
Rex ionic
Rémi Flipo
 
Slidrs - google cloud anchors
Slidrs - google cloud anchorsSlidrs - google cloud anchors
Slidrs - google cloud anchors
Chris Saez
 
Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)
Edouard Marquez
 
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
Bonitasoft
 
Dossier de conception_v1.00
Dossier de conception_v1.00Dossier de conception_v1.00
Dossier de conception_v1.00
Arnold Stellio
 
Cours android 2016
Cours android 2016Cours android 2016
Cours android 2016
Saber LAJILI
 
Cours android 2016_partie1
Cours android 2016_partie1Cours android 2016_partie1
Cours android 2016_partie1
Sabeur LAJILI
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@Noumea
Julien Chable
 
Connected Car Platform (CC-p)
Connected Car Platform (CC-p) Connected Car Platform (CC-p)
Connected Car Platform (CC-p)
Bellaj Badr
 
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM France Lab
 
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
OCTO Technology
 
Apple - WWDC 2018
Apple - WWDC 2018Apple - WWDC 2018
Apple - WWDC 2018
Maxime Eglem
 

Similaire à Android et Minimalisme - Thomas Ezan (20)

Redmine présentation sug 2012
Redmine présentation sug 2012Redmine présentation sug 2012
Redmine présentation sug 2012
 
Killer app par la design et le code
Killer app par la design et le codeKiller app par la design et le code
Killer app par la design et le code
 
Niji rapport de prévention 2021 - android 12
Niji   rapport de prévention 2021 - android 12Niji   rapport de prévention 2021 - android 12
Niji rapport de prévention 2021 - android 12
 
Développement mobile cross-plateform
Développement mobile cross-plateformDéveloppement mobile cross-plateform
Développement mobile cross-plateform
 
L'univers Android
L'univers AndroidL'univers Android
L'univers Android
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
 
Bonitasoft - Vue générale de l’architecture de la plateforme Bonita
Bonitasoft  - Vue générale de l’architecture de la plateforme BonitaBonitasoft  - Vue générale de l’architecture de la plateforme Bonita
Bonitasoft - Vue générale de l’architecture de la plateforme Bonita
 
Rex ionic
Rex ionicRex ionic
Rex ionic
 
Slidrs - google cloud anchors
Slidrs - google cloud anchorsSlidrs - google cloud anchors
Slidrs - google cloud anchors
 
Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)
 
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
 
Dossier de conception_v1.00
Dossier de conception_v1.00Dossier de conception_v1.00
Dossier de conception_v1.00
 
Cours android 2016
Cours android 2016Cours android 2016
Cours android 2016
 
Cours android 2016_partie1
Cours android 2016_partie1Cours android 2016_partie1
Cours android 2016_partie1
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@Noumea
 
Connected Car Platform (CC-p)
Connected Car Platform (CC-p) Connected Car Platform (CC-p)
Connected Car Platform (CC-p)
 
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
 
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
 
Apple - WWDC 2018
Apple - WWDC 2018Apple - WWDC 2018
Apple - WWDC 2018
 
Chap android
Chap androidChap android
Chap android
 

Plus de GDG Bujumbura

Web au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdfWeb au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdf
GDG Bujumbura
 
Unleashing the power of Unit Testing - Franck Ninsabira.pdf
Unleashing the power of Unit Testing - Franck Ninsabira.pdfUnleashing the power of Unit Testing - Franck Ninsabira.pdf
Unleashing the power of Unit Testing - Franck Ninsabira.pdf
GDG Bujumbura
 
Transaction SQL - Jean Thierry.pptx
Transaction SQL - Jean Thierry.pptxTransaction SQL - Jean Thierry.pptx
Transaction SQL - Jean Thierry.pptx
GDG Bujumbura
 
Science-Fiction - The forgotten art of designing better technologies - Josue....
Science-Fiction - The forgotten art of designing better technologies - Josue....Science-Fiction - The forgotten art of designing better technologies - Josue....
Science-Fiction - The forgotten art of designing better technologies - Josue....
GDG Bujumbura
 
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
GDG Bujumbura
 
LLMs for the “GPU-Poor” - Franck Nijimbere.pdf
LLMs for the “GPU-Poor” - Franck Nijimbere.pdfLLMs for the “GPU-Poor” - Franck Nijimbere.pdf
LLMs for the “GPU-Poor” - Franck Nijimbere.pdf
GDG Bujumbura
 
Les outils et compétences nécessaires pour le développement en remote - Ce...
Les outils et compétences nécessaires pour le développement en remote - Ce...Les outils et compétences nécessaires pour le développement en remote - Ce...
Les outils et compétences nécessaires pour le développement en remote - Ce...
GDG Bujumbura
 
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
GDG Bujumbura
 
Google Authentication in Python - Destin.pdf
Google Authentication in Python - Destin.pdfGoogle Authentication in Python - Destin.pdf
Google Authentication in Python - Destin.pdf
GDG Bujumbura
 
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdfComment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
GDG Bujumbura
 
Web au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdfWeb au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdf
GDG Bujumbura
 
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdfSenior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
GDG Bujumbura
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
GDG Bujumbura
 
How to be a self-taught programmer best practices - Edgar Eldy
How to be a self-taught programmer  best practices - Edgar EldyHow to be a self-taught programmer  best practices - Edgar Eldy
How to be a self-taught programmer best practices - Edgar Eldy
GDG Bujumbura
 
Women in Tech : The Community - Seilla Nkurunziza
Women in Tech : The Community - Seilla NkurunzizaWomen in Tech : The Community - Seilla Nkurunziza
Women in Tech : The Community - Seilla Nkurunziza
GDG Bujumbura
 

Plus de GDG Bujumbura (15)

Web au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdfWeb au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdf
 
Unleashing the power of Unit Testing - Franck Ninsabira.pdf
Unleashing the power of Unit Testing - Franck Ninsabira.pdfUnleashing the power of Unit Testing - Franck Ninsabira.pdf
Unleashing the power of Unit Testing - Franck Ninsabira.pdf
 
Transaction SQL - Jean Thierry.pptx
Transaction SQL - Jean Thierry.pptxTransaction SQL - Jean Thierry.pptx
Transaction SQL - Jean Thierry.pptx
 
Science-Fiction - The forgotten art of designing better technologies - Josue....
Science-Fiction - The forgotten art of designing better technologies - Josue....Science-Fiction - The forgotten art of designing better technologies - Josue....
Science-Fiction - The forgotten art of designing better technologies - Josue....
 
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
Remote Sensing for Land Cover Mapping in Google Earth Engine - HAMENYIMANA Is...
 
LLMs for the “GPU-Poor” - Franck Nijimbere.pdf
LLMs for the “GPU-Poor” - Franck Nijimbere.pdfLLMs for the “GPU-Poor” - Franck Nijimbere.pdf
LLMs for the “GPU-Poor” - Franck Nijimbere.pdf
 
Les outils et compétences nécessaires pour le développement en remote - Ce...
Les outils et compétences nécessaires pour le développement en remote - Ce...Les outils et compétences nécessaires pour le développement en remote - Ce...
Les outils et compétences nécessaires pour le développement en remote - Ce...
 
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
La diversité et la véracité de l'IA dans la vie de tous les jours avec un ...
 
Google Authentication in Python - Destin.pdf
Google Authentication in Python - Destin.pdfGoogle Authentication in Python - Destin.pdf
Google Authentication in Python - Destin.pdf
 
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdfComment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
Comment creer de Applicartions Desktop avec Javascript - Bejamin Kinyamba.pdf
 
Web au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdfWeb au logiciel desktop avec Tauri - Don Nermed.pdf
Web au logiciel desktop avec Tauri - Don Nermed.pdf
 
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdfSenior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
Senior Sebarundi @flutterfoward 2023 - Flutter Favorites.pdf
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
 
How to be a self-taught programmer best practices - Edgar Eldy
How to be a self-taught programmer  best practices - Edgar EldyHow to be a self-taught programmer  best practices - Edgar Eldy
How to be a self-taught programmer best practices - Edgar Eldy
 
Women in Tech : The Community - Seilla Nkurunziza
Women in Tech : The Community - Seilla NkurunzizaWomen in Tech : The Community - Seilla Nkurunziza
Women in Tech : The Community - Seilla Nkurunziza
 

Android et Minimalisme - Thomas Ezan

  • 1. Proprietary + Confidential Android et minimalisme Adaptez votre application aux smartphones d’entrée de gamme à connectivité limitée 2
  • 2. Proprietary + Confidential Plan ● Réduisez votre application ● Limitez de consommation de données ● Contrôlez l’impact sur la batterie 3
  • 3. Proprietary + Confidential Réduisez votre application Proprietary + Confidential 4
  • 4. Proprietary + Confidential Proprietary + Confidential Migration vers Android App Bundle 5
  • 5. Proprietary + Confidential Proprietary + Confidential Avec APK Classique Le smartphone télécharge tous les fichier de /res 6
  • 6. Proprietary + Confidential Proprietary + Confidential Avec App Bundle Le smartphone télécharge uniquement les fichier dont il a besoin 8
  • 7. Proprietary + Confidential Proprietary + Confidential Réduction de la taille des téléchargement 30% de réduction pour Twitter sur Android Avant Après Base Traductions Images Elements d’interface 9
  • 8. Proprietary + Confidential Proprietary + Confidential Migration vers Android App Bundle À retrouver sur Youtube goo.gle/mad-app-blundles 10
  • 9. Proprietary + Confidential Proprietary + Confidential Plus d’info sur d.android.com/guide/app-bundle Migration vers Android App Bundle 11
  • 10. Proprietary + Confidential Proprietary + Confidential Reduction des ressources graphiques 12
  • 11. Proprietary + Confidential Proprietary + Confidential Android Size Analyzer Le plugin Android Size Analyzer fournit des recommandations pour optimiser l’usage de vos photos et illustrations: ● Éviter d’inclure des images de grande taille, ● Utiliser des formats permettant la compression des images, ● etc… 13
  • 12. Proprietary + Confidential Proprietary + Confidential Imagerie vectorielle VectorDrawables est le système d’imagerie vectorielle d’Android: ● Fichier plus légers ● Agrandissement sans perte de qualité Le format VectorDrawables est comparable au SVG (idéal pour les illustrations). 15
  • 13. Proprietary + Confidential Proprietary + Confidential La fonctionnalité Vector Asset Studio d’Android Studio vous permet de convertir vos fichier SVG en VectorDrawables. Vector Asset Studio 17
  • 14. Proprietary + Confidential Proprietary + Confidential Images au format WebP WebP est une alternative aux formats de compression d’image JPEG ou PNG. JPEG 263 kb WebP 93 kb 18
  • 15. Proprietary + Confidential Proprietary + Confidential Images au format WebP ● WebP est supporté à partir d’Android 3.2 (API level 13) ● Image converter dans Android Studio permet la conversion 19
  • 16. Proprietary + Confidential Proprietary + Confidential Reduction du code source 20
  • 17. Proprietary + Confidential Proprietary + Confidential Reduction du code source R8 effectue une réduction du code source pour ne garder uniquement l’essentiel à l’exécution de l’application. android { ... buildTypes { getByName("release") { isMinifyEnabled = true ... } } } isMinifyEnabled=true effectue aussi nombre d’optimisations pour Kotlin. 22
  • 18. Proprietary + Confidential Proprietary + Confidential android { ... buildTypes { getByName("release") { isShrinkResources = true ... } } } Reduction des ressources graphiques isShrinkResources = true supprime les ressources déréferencées dans votre code source. 23
  • 19. Proprietary + Confidential Limitez de consommation de données Proprietary + Confidential 24
  • 20. Proprietary + Confidential Proprietary + Confidential Analyse des appels HTTP 25
  • 21. Proprietary + Confidential Proprietary + Confidential Network Profiler dans Android Studio permet l’affichage et l’analyse des appels HTTP en temps réel. Accessible via View > Tool Windows > Profiler ou le bouton Profile dans la barre d’outils et sélectionnez “RÉSEAU”. Proprietary + Confidential Analyse des appels HTTP 26
  • 22. Proprietary + Confidential Proprietary + Confidential Mise en cache des appels HTTP 27
  • 23. Proprietary + Confidential Proprietary + Confidential HttpsURLConnection Pas de dépendances Approche ancienne et daté Cache HTTP Ajouter un cache HTTP Volley Fonctionnalités avancées Cache par défaut Compliqué à appréhender Dépendances externes OkHttp Facile à appréhender Populaire et bien documenté Dépendances externes Cronet Fonctionnalités avancées Utilisé par Youtube, Google Photo, Maps Dépendances externes 30
  • 24. Proprietary + Confidential Proprietary + Confidential Cache d’image Ajouter un cache d’image Picasso Facile à appréhender Populaire et bien documenté Dépendances externes Glide Optimisé pour la rapidité et fluidité. Dépendances externes Fresco JPEG en téléchargement progressif Transformation d’images Dépendances modulaires Compliqué à appréhender Coil Optimisé pour Kotlin et coroutines Facile à appréhender Bonne compatibilité avec R8 Seulement pour Kotlin 31
  • 25. Proprietary + Confidential Contrôlez l’impact sur la batterie Proprietary + Confidential 32
  • 26. Proprietary + Confidential Proprietary + Confidential Analyse de la consommation énergétique 33
  • 27. Proprietary + Confidential Consommation Énergétique Sources de consommation: Tâches CPU intensives (traitement d’image ou de son, compression de fichier, ML, etc…) Utilisation de l’écran sur de longues périodes Utilisation du GPS Activité réseau 34
  • 28. Proprietary + Confidential Proprietary + Confidential Energy Profiler d’Android Studio permet d’identifier les sources de consommation dans votre application. Accessible via View > Tool Windows > Profiler ou le bouton Profile dans la barre d’outils et sélectionnez “ENERGIE”. Proprietary + Confidential Analyse énergétique 35
  • 29. Proprietary + Confidential Proprietary + Confidential Optimizations contextuelles 36
  • 30. Proprietary + Confidential Proprietary + Confidential Optimizations contextuelles “Gros” téléchargements (rafraichissement du cache) Tâches locales intensives Appels régulier au GPS Téléchargements sporadiques (utiliser cache si possible) Tâches locales modérées Appels limités au GPS Pas d’appels HTTP (utiliser le cache) Tâches locales limitées Pas d’appels au GPS 37
  • 31. Proprietary + Confidential Proprietary + Confidential Informations baterie Accéder au niveau de la baterie val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) } val batteryPercent: Float? = batteryStatus?.let { intent -> val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) level * 100 / scale.toFloat() } 38
  • 32. Proprietary + Confidential Proprietary + Confidential Informations baterie Accéder au statut de recharge val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) } val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1 val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC 39
  • 33. Proprietary + Confidential Proprietary + Confidential WorkManager Utiliser WorkManager lié au contexte val constraints = Constraints.Builder().setRequiresBatteryNotLow(true) .setRequiresCharging(true) .setRequiredNetworkType(NetworkType.CONNECTED) .setRequiresDeviceIdle(true) .build() val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .setInputData(imageData) .setConstraints(constraints) .build() WorkManager.getInstance().enqueue(uploadWorkRequest) 40
  • 34. Proprietary + Confidential Proprietary + Confidential Informations réseau Accéder au statut réseau val connectivityManager = getSystemService(ConnectivityManager::class.java) val currentNetwork = connectivityManager.getActiveNetwork() connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network : Network) { Log.e(TAG, "The default network is now: " + network) } [...] }) 41