Notre intervention est un retour d’expérience sur la création d’un assistant vocal (OK Google like) nécessitant la création d’un service tournant en continu sur un smartphone Android.
Pour commencer nous expliquerons les enjeux du projet et les différentes difficultés rencontrées au cours de son avancement sous forme de story telling, (ou les 1001 façons de voir son service mourir!).
Dans un second temps, nous ferons un retour historique sur la politique de Google vis-à-vis des services android. En effet, depuis plusieurs années, cette politique n’a cessé de se durcir. Enfin nous présenterons la solution technique retenue pour le projet, basée sur un « foreground service », et nous la comparerons avec l’ancienne solution possible sous Android 8 pour montrer comment les deux approches sont radicalement différentes. Ce sera également l’occasion de montrer comment sans le vouloir, il est facile d’aboutir à la création d’un malware plutôt qu’à une application utile à l’utilisateur.
2. Est-ce que mon service Android va mourir ?2
01. Intro
02. Contexte projet
03. Google et les services
04. Réaliser son propre service infini
Sommaire
4. Nicolas BOUTIN
Ingénieur senior Mobile
nicolas.boutin@soprasteria.com
@NicolasBoutin83
Est-ce que mon service Android va mourir ?4
Rodolphe ASSÉRÉ
Ingénieur senior xReality & Mobile
rodolphe.assere@soprasteria.com
@assere_r
Qui sommes-nous ?
Intro
7. Est-ce que mon service Android va mourir ?7
Optimisation
du temps
en usine d’assemblage
8. Est-ce que mon service Android va mourir ?8
Plusieurs applications très spécialisées
Contexte projet
9. Est-ce que mon service Android va mourir ?9
En moyenne pour trouver
l’information voulue
3 touchs
10. Est-ce que mon service Android va mourir ?10
Contexte projet
Objectif
1 interaction
pour obtenir l’information désirée
11. Est-ce que mon service Android va mourir ?11
Contexte projet
Démo
12. Est-ce que mon service Android va mourir ?12
pour l’utilisateur
Invisible
tout le temps
Disponible
par mot-réveil
Accessible
Contraintes du client
Contexte projet
via des applications
externes
Requêtes
parce qu’il en faut
un peu dans la vie
Humour
intégré au SI
du client
On premise
13. Est-ce que mon service Android va mourir ?13
Ce qu’en dit notre ami Google
Contexte projet
Accessible « C’est mon
micro »
14. Est-ce que mon service Android va mourir ?14
Ce qu’en dit notre ami Google
Contexte projet
Invisible « Reste en
foreground ! »
15. Est-ce que mon service Android va mourir ?15
Ce qu’en dit notre ami Google
Contexte projet
Disponible « Silence, I kill
you ! »
16. Est-ce que mon service Android va mourir ?16
Ce qu’en dit notre ami Google
Contexte projet
On premise « Voice
actions »
17. Est-ce que mon service Android va mourir ?17
Ce qu’en dit notre ami Google
Contexte projet
Requêtes « Intents
bro »
18. Est-ce que mon service Android va mourir ?18
Ce qu’en dit notre ami Google
Contexte projet
Humour « OK Google,
raconte-moi
une blague. »
19. Est-ce que mon service Android va mourir ?19
Contexte projet
Mission compliquée mais pas impossible
21. Est-ce que mon service Android va mourir ?21
Pourquoi parler des services ?
Android et les services
22. Est-ce que mon service Android va mourir ?22
Service lié à
l’application
Dépendance
par défaut
MainThread
propre
Cycle de vie
Rappels du comportement par défaut
Android et les services
23. Est-ce que mon service Android va mourir ?23
Concepts associés
Android et les services
Foreground
services
Alarm
managers
Background
services
Intent
services
Bound
services
Started
services
Broadcast
receivers
Wake lock
Job services
24. Est-ce que mon service Android va mourir ?24
Android et les services
La petite histoire
25. Est-ce que mon service Android va mourir ?25
Politique de plus en plus restrictive
Android et les services
Optimisation
des performances
Transparence
avec l’utilisateur
26. Est-ce que mon service Android va mourir ?26
Politique de plus en plus restrictive
Android et les services
2014 2015 2016 2017 2018
Android 5
Projet volta
(jobs services)
Android 6
• Transparence
• Performance
Android 7
Restriction
Broadcast
receivers
Android 8
• Background
services
• Broadcast
Android 9
• App Standby
Bucket
• Blocage app
2019
Android 10
Restriction
lancement activité
Révolution
28. 3 étapes
Réaliser son propre service infini
dans le
Manifest
Intent-filter
Recréé le service
quand il est tué
Background
service
Broadcast
Receiver
32. Réaliser son propre service infini
Avant Oreo
Intent Implicit broadcast
depuis un service en
background
bloqués
33. Après Oreo
Réaliser son propre service infini
• BOOT_COMPLETED
dans Manifest
• Mettre en pause /
relancer traitement
Broadcast
implicite dédié au service
ProcessusForeground
service