SlideShare une entreprise Scribd logo
android:allowBackup
Vous ne le connaissiez pas ?

Vous allez pourtant le détester !
Marty, d’abord tu rentres dans la voiture !
!
En mai 2010, Google annonce une nouvelle
version de son système d’exploitation.
Android 2.2 (FroYo)
2
Parmi les nouveautés : la possibilité de
synchroniser les données d’une application
dans le cloud.
Building 44
Mountain View
HISTORIQUE
Framework Android
ARCHITECTURE
3
Backup service
Backup transport
BACKUP TRANSPORT
4
Permission : android.permission.BACKUP
Créer son Backup Transport
Un service obligatoire qui intercepte l’Intent :
android.intent.action.START_RESTORE
BACKUP TRANSPORT
5
L’utilisateur peut décider de désactiver la
synchronisation.
Utilisateur
ARCHITECTURE
6
Framework
Android
Application
Backup Agent
7
CÔTÉ CODE
Dans l’AndroidManifest.xml :
Accepter le mode backup :
android:backupAgent=“.MyBackupAgent”
android:allowBackup=“true”
Et donner un BackupAgent :
8
CÔTÉ CODE
Dans l’AndroidManifest.xml :
Deux autres attributs utiles.
Tuer l’application lorsque les données sont restaurées :
android:restoreAnyVersion=“true”
android:killAfterRestore=“true”
Restaurer n’importe quelle version :
9
CÔTÉ CODE
Backup Transport de Google
10
CÔTÉ CODE
Backup Transport de Google
Obtenir une clé sur le service
… et l’ajouter dans l’AndroidManifest.xml :
<meta-data
android:name="com.google.android.backup.api_key"
android:value=“…” />
11
BACKUP AGENT
Choix 1 : Etendre BackupAgent
onBackup(ParcelFileDescriptor oldState,
BackupDataOutput data,
ParcelFileDescriptor newState)
onRestoreFile(ParcelFileDescriptor data,
long size,
File destination,
int type,
long mode,
long mtime)
12
BACKUP AGENT
onBackup (1/2)
FileInputStream instream = new
FileInputStream(oldState.getFileDescriptor());
DataInputStream in = new DataInputStream(instream);
try {
long stateModified = in.readLong();
long fileModified = mDataFile.lastModified();
if (stateModified != fileModified) {
// Il faut faire un backup
} else {
// Rien à changer
}
} catch (IOException e) {}
13
BACKUP AGENT
onBackup (2/2)
ByteArrayOutputStream bufStream = new ByteArrayOutputStream();
DataOutputStream outWriter = new DataOutputStream(bufStream);
// Données à sauvegarder
outWriter.writeUTF(mPlayerName);
outWriter.writeInt(mPlayerScore);
// On les envoie
byte[] buffer = bufStream.toByteArray();
int len = buffer.length;
data.writeEntityHeader(APP_BACKUP_KEY, len);
data.writeEntityData(buffer, len);
14
BACKUP AGENT
onRestoreFile (1/2)
while (data.readNextHeader()) {
String key = data.getKey();
int dataSize = data.getDataSize();
// Nos données
if (APP_BACKUP_KEY.equals(key)) {
byte[] dataBuf = new byte[dataSize];
data.readEntityData(dataBuf, 0, dataSize);
ByteArrayInputStream baStream = new ByteArrayInputStream(dataBuf);
DataInputStream in = new DataInputStream(baStream);
String name = in.readUTF();
} else {
data.skipEntityData();
}
}
15
BACKUP AGENT
onRestoreFile (2/2)
// On renvoie les données que l’on a récupéré
FileOutputStream outstream = new
FileOutputStream(newState.getFileDescriptor());
DataOutputStream out = new DataOutputStream(outstream);
out.writeUTF(…);
16
BACKUP AGENT
Choix 2 : Etendre BackupAgentHelper
Sauvegarde uniquement des fichiers ou des préférences
void onCreate() {
FileBackupHelper fileHelper = new FileBackupHelper(context, file1, file2);
addHelper(FILE_KEY, fileHelper)
SharedPreferencesBackupHelper preferencesHelper = new
SharedPreferencesBackupHelper(context, file1, file2);
addHelper(SHARED_PREFS_KEY, preferencesHelper);
}
17
INCONVÉNIENTS
Fonctionnalité peu utilisée aujourd’hui
• Ecrire un BackupAgent n’est pas simple

• Ne fonctionne qu’entre les terminaux Google / Amazon…

• Aucune garantie que l’utilisateur a validé la synchronisation

• Ne gère que la restauration complète d’une application

• Des conditions qui enlèvent tout intérêt au service :
• Ne pas stocker des informations sensibles (nom d’utilisateur,
mot de passe…)
• Ne pas stocker des contenus sous licence
18
ANDROID 4.0
En novembre 2011, Google annonce une
nouvelle version de son système d’exploitation.
Android 4.0 (Ice Cream Sandwich)
Parmi les nouveautés : la possibilité de
synchroniser les données du système ou d’une
application en particulier avec adb.
Building 44
Mountain View
#holoyolo
!
19
ANDROID 4.0
Backup d’une application avec son nom de paquet :
Simple à utiliser :
adb backup com.example.app
Backup du système complet :
adb backup -all -apk -shared
20
ANDROID 4.0
Mais (relativement) sécurisé :
21
ANDROID 4.0
La restauration est aussi simple :
adb restore backup.ab
22
SOUS LE CAPOT
Que contient un fichier backup.ab ?
Il s’agit d’un fichier tar (compressé, avec éventuellement
un mot de passe) dont les entêtes ont été modifiés.
Il faut donc le convertir en fichier tar classique :
java -jar abe-all.jar pack backup.tar backup.ab
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
… ou avec Android Backup Extractor :
23
SOUS LE CAPOT
Arborescence
apps
com.android.browser
com.android.email
com.google.android.quicksearchbox
shared
0
DCIM
Downloads
Music
24
SOUS LE CAPOT
Arborescence
apps
com.google.android.quicksearchbox
a : apk
c : cache
db : base de données
ef : “managed external”
f : fichiers
obb : extensions
r : root
sp : préférences
25
LE PROBLÈME
Android Studio
Sur Android Studio, tous les nouveaux
projets utilisent
android:allowBackup=“true”
Des milliers d’applications ont donc
cette “fonctionnalité” sans que les
développeurs ne le sachent.
26
LE PROBLÈME
Application
Si l’attribut n’est pas défini, c’est alors sa valeur par défaut qui est
utilisée.
Dans notre cas, allowBackup est à true par défaut.
… mais Lint va nous hurler dessus
27
LE PROBLÈME
Lint
Un peu plus ?
Il faudra attendre le prochain numéro

Contenu connexe

En vedette

El reto de superar la desigualdad en Bolivia
El reto de superar la desigualdad en BoliviaEl reto de superar la desigualdad en Bolivia
El reto de superar la desigualdad en Bolivia
Gobernabilidad
 
Bloque de cierre
Bloque de cierreBloque de cierre
Bloque de cierre
DUO SOLUCIONES
 
Week 8+part2+lecture
Week 8+part2+lectureWeek 8+part2+lecture
Week 8+part2+lectureeducw200
 
Dia del patrimonio
Dia del patrimonioDia del patrimonio
Dia del patrimonio
Alvaro da Silva
 
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLabCocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads France
 
Els cinc regnes
Els cinc regnesEls cinc regnes
Els cinc regnes
irnaaz
 
Rencontres HAS 2011 - Développer les services aux patients (suite)
Rencontres HAS 2011 - Développer les services aux patients (suite)Rencontres HAS 2011 - Développer les services aux patients (suite)
Rencontres HAS 2011 - Développer les services aux patients (suite)
Haute Autorité de Santé
 
Arrivera-t-on vraiment au e-Learning à l’université?
Arrivera-t-on vraiment au e-Learning à l’université?Arrivera-t-on vraiment au e-Learning à l’université?
Arrivera-t-on vraiment au e-Learning à l’université?
Ann Davidson
 
Diapo élections pdf
Diapo élections pdfDiapo élections pdf
Diapo élections pdfchloebec
 
Découvre la france
Découvre la franceDécouvre la france
Découvre la franceBoira32
 
Presentacion profe aquino
Presentacion profe aquinoPresentacion profe aquino
Presentacion profe aquino
Juan José
 
Mercadoavanzado.blogspot.com 2010 06-01_archive.html
Mercadoavanzado.blogspot.com 2010 06-01_archive.htmlMercadoavanzado.blogspot.com 2010 06-01_archive.html
Mercadoavanzado.blogspot.com 2010 06-01_archive.html
Arquitecto bogota
 
Plannacionaldetics2010 2020peru
Plannacionaldetics2010 2020peruPlannacionaldetics2010 2020peru
Plannacionaldetics2010 2020peru
mariovilcacondori
 
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADOR
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADORDANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADOR
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADORDANIELA VELEZ
 
Logiques féminines de légitimation du pouvoir monarchique (Maroc)
Logiques féminines de légitimation du pouvoir monarchique (Maroc)Logiques féminines de légitimation du pouvoir monarchique (Maroc)
Logiques féminines de légitimation du pouvoir monarchique (Maroc)Souad Azizi
 
Declaration patrimoine-escoffier
Declaration patrimoine-escoffierDeclaration patrimoine-escoffier
Declaration patrimoine-escoffierLe Point
 
Objetivo
ObjetivoObjetivo
Objetivo
Luz Ma
 

En vedette (19)

El reto de superar la desigualdad en Bolivia
El reto de superar la desigualdad en BoliviaEl reto de superar la desigualdad en Bolivia
El reto de superar la desigualdad en Bolivia
 
Bloque de cierre
Bloque de cierreBloque de cierre
Bloque de cierre
 
Week 8+part2+lecture
Week 8+part2+lectureWeek 8+part2+lecture
Week 8+part2+lecture
 
Dia del patrimonio
Dia del patrimonioDia del patrimonio
Dia del patrimonio
 
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLabCocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
 
Els cinc regnes
Els cinc regnesEls cinc regnes
Els cinc regnes
 
Rencontres HAS 2011 - Développer les services aux patients (suite)
Rencontres HAS 2011 - Développer les services aux patients (suite)Rencontres HAS 2011 - Développer les services aux patients (suite)
Rencontres HAS 2011 - Développer les services aux patients (suite)
 
Arrivera-t-on vraiment au e-Learning à l’université?
Arrivera-t-on vraiment au e-Learning à l’université?Arrivera-t-on vraiment au e-Learning à l’université?
Arrivera-t-on vraiment au e-Learning à l’université?
 
Diapo élections pdf
Diapo élections pdfDiapo élections pdf
Diapo élections pdf
 
Découvre la france
Découvre la franceDécouvre la france
Découvre la france
 
Presentacion profe aquino
Presentacion profe aquinoPresentacion profe aquino
Presentacion profe aquino
 
Mercadoavanzado.blogspot.com 2010 06-01_archive.html
Mercadoavanzado.blogspot.com 2010 06-01_archive.htmlMercadoavanzado.blogspot.com 2010 06-01_archive.html
Mercadoavanzado.blogspot.com 2010 06-01_archive.html
 
Plannacionaldetics2010 2020peru
Plannacionaldetics2010 2020peruPlannacionaldetics2010 2020peru
Plannacionaldetics2010 2020peru
 
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADOR
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADORDANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADOR
DANIELA VELEZ SALUTATIONS UNIVERSIDAD CENTRAL DEL ECUADOR
 
Logiques féminines de légitimation du pouvoir monarchique (Maroc)
Logiques féminines de légitimation du pouvoir monarchique (Maroc)Logiques féminines de légitimation du pouvoir monarchique (Maroc)
Logiques féminines de légitimation du pouvoir monarchique (Maroc)
 
Test
TestTest
Test
 
Declaration patrimoine-escoffier
Declaration patrimoine-escoffierDeclaration patrimoine-escoffier
Declaration patrimoine-escoffier
 
Fre
FreFre
Fre
 
Objetivo
ObjetivoObjetivo
Objetivo
 

Similaire à Android BackupManager

Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTA
Sidereo
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des apps
Noé Breiss
 
Tutorial android
Tutorial androidTutorial android
Tutorial android
ERWIN AGUILAR
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
Lilia Sfaxi
 
Les intents sous Android
Les intents sous Android Les intents sous Android
Les intents sous Android
Houssem Lahiani
 
Android wear
Android wearAndroid wear
Android wear
Houssem Lahiani
 
Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à Android
Yoann Gotthilf
 
TP_1.pdf
TP_1.pdfTP_1.pdf
TP_1.pdf
FethiBenYahia1
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my gallery
MOHAMMED MOURADI
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
Lilia Sfaxi
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
YaminaGh1
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
RihabBENLAMINE
 
Ch2. Développement mobile
Ch2. Développement mobileCh2. Développement mobile
Ch2. Développement mobile
Haifa Chorfi
 
Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015
Hamza Ben Marzouk
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
Philippe Sfeir
 

Similaire à Android BackupManager (20)

Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTA
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des apps
 
Tutorial android
Tutorial androidTutorial android
Tutorial android
 
Tuto bada
Tuto badaTuto bada
Tuto bada
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Les intents sous Android
Les intents sous Android Les intents sous Android
Les intents sous Android
 
Android wear
Android wearAndroid wear
Android wear
 
Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à Android
 
TP_1.pdf
TP_1.pdfTP_1.pdf
TP_1.pdf
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my gallery
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
Chap android
Chap androidChap android
Chap android
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
 
Ch2. Développement mobile
Ch2. Développement mobileCh2. Développement mobile
Ch2. Développement mobile
 
Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015Rapport atelier Web App Security 2015
Rapport atelier Web App Security 2015
 
rapportWAS
rapportWASrapportWAS
rapportWAS
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
 

Android BackupManager

  • 1. android:allowBackup Vous ne le connaissiez pas ?
 Vous allez pourtant le détester !
  • 2. Marty, d’abord tu rentres dans la voiture ! ! En mai 2010, Google annonce une nouvelle version de son système d’exploitation. Android 2.2 (FroYo) 2 Parmi les nouveautés : la possibilité de synchroniser les données d’une application dans le cloud. Building 44 Mountain View HISTORIQUE
  • 4. BACKUP TRANSPORT 4 Permission : android.permission.BACKUP Créer son Backup Transport Un service obligatoire qui intercepte l’Intent : android.intent.action.START_RESTORE
  • 5. BACKUP TRANSPORT 5 L’utilisateur peut décider de désactiver la synchronisation. Utilisateur
  • 7. 7 CÔTÉ CODE Dans l’AndroidManifest.xml : Accepter le mode backup : android:backupAgent=“.MyBackupAgent” android:allowBackup=“true” Et donner un BackupAgent :
  • 8. 8 CÔTÉ CODE Dans l’AndroidManifest.xml : Deux autres attributs utiles. Tuer l’application lorsque les données sont restaurées : android:restoreAnyVersion=“true” android:killAfterRestore=“true” Restaurer n’importe quelle version :
  • 10. 10 CÔTÉ CODE Backup Transport de Google Obtenir une clé sur le service … et l’ajouter dans l’AndroidManifest.xml : <meta-data android:name="com.google.android.backup.api_key" android:value=“…” />
  • 11. 11 BACKUP AGENT Choix 1 : Etendre BackupAgent onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) onRestoreFile(ParcelFileDescriptor data, long size, File destination, int type, long mode, long mtime)
  • 12. 12 BACKUP AGENT onBackup (1/2) FileInputStream instream = new FileInputStream(oldState.getFileDescriptor()); DataInputStream in = new DataInputStream(instream); try { long stateModified = in.readLong(); long fileModified = mDataFile.lastModified(); if (stateModified != fileModified) { // Il faut faire un backup } else { // Rien à changer } } catch (IOException e) {}
  • 13. 13 BACKUP AGENT onBackup (2/2) ByteArrayOutputStream bufStream = new ByteArrayOutputStream(); DataOutputStream outWriter = new DataOutputStream(bufStream); // Données à sauvegarder outWriter.writeUTF(mPlayerName); outWriter.writeInt(mPlayerScore); // On les envoie byte[] buffer = bufStream.toByteArray(); int len = buffer.length; data.writeEntityHeader(APP_BACKUP_KEY, len); data.writeEntityData(buffer, len);
  • 14. 14 BACKUP AGENT onRestoreFile (1/2) while (data.readNextHeader()) { String key = data.getKey(); int dataSize = data.getDataSize(); // Nos données if (APP_BACKUP_KEY.equals(key)) { byte[] dataBuf = new byte[dataSize]; data.readEntityData(dataBuf, 0, dataSize); ByteArrayInputStream baStream = new ByteArrayInputStream(dataBuf); DataInputStream in = new DataInputStream(baStream); String name = in.readUTF(); } else { data.skipEntityData(); } }
  • 15. 15 BACKUP AGENT onRestoreFile (2/2) // On renvoie les données que l’on a récupéré FileOutputStream outstream = new FileOutputStream(newState.getFileDescriptor()); DataOutputStream out = new DataOutputStream(outstream); out.writeUTF(…);
  • 16. 16 BACKUP AGENT Choix 2 : Etendre BackupAgentHelper Sauvegarde uniquement des fichiers ou des préférences void onCreate() { FileBackupHelper fileHelper = new FileBackupHelper(context, file1, file2); addHelper(FILE_KEY, fileHelper) SharedPreferencesBackupHelper preferencesHelper = new SharedPreferencesBackupHelper(context, file1, file2); addHelper(SHARED_PREFS_KEY, preferencesHelper); }
  • 17. 17 INCONVÉNIENTS Fonctionnalité peu utilisée aujourd’hui • Ecrire un BackupAgent n’est pas simple
 • Ne fonctionne qu’entre les terminaux Google / Amazon…
 • Aucune garantie que l’utilisateur a validé la synchronisation
 • Ne gère que la restauration complète d’une application
 • Des conditions qui enlèvent tout intérêt au service : • Ne pas stocker des informations sensibles (nom d’utilisateur, mot de passe…) • Ne pas stocker des contenus sous licence
  • 18. 18 ANDROID 4.0 En novembre 2011, Google annonce une nouvelle version de son système d’exploitation. Android 4.0 (Ice Cream Sandwich) Parmi les nouveautés : la possibilité de synchroniser les données du système ou d’une application en particulier avec adb. Building 44 Mountain View #holoyolo !
  • 19. 19 ANDROID 4.0 Backup d’une application avec son nom de paquet : Simple à utiliser : adb backup com.example.app Backup du système complet : adb backup -all -apk -shared
  • 21. 21 ANDROID 4.0 La restauration est aussi simple : adb restore backup.ab
  • 22. 22 SOUS LE CAPOT Que contient un fichier backup.ab ? Il s’agit d’un fichier tar (compressé, avec éventuellement un mot de passe) dont les entêtes ont été modifiés. Il faut donc le convertir en fichier tar classique : java -jar abe-all.jar pack backup.tar backup.ab dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar … ou avec Android Backup Extractor :
  • 24. 24 SOUS LE CAPOT Arborescence apps com.google.android.quicksearchbox a : apk c : cache db : base de données ef : “managed external” f : fichiers obb : extensions r : root sp : préférences
  • 25. 25 LE PROBLÈME Android Studio Sur Android Studio, tous les nouveaux projets utilisent android:allowBackup=“true” Des milliers d’applications ont donc cette “fonctionnalité” sans que les développeurs ne le sachent.
  • 26. 26 LE PROBLÈME Application Si l’attribut n’est pas défini, c’est alors sa valeur par défaut qui est utilisée. Dans notre cas, allowBackup est à true par défaut. … mais Lint va nous hurler dessus
  • 28. Un peu plus ? Il faudra attendre le prochain numéro