115 votes

Comment extraire les données (privées) de sa propre application Android?

Cherchant à tirer un seul fichier à l'aide de

adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt

échoue avec

failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied

malgré que le débogage USB est activé sur le périphérique.

Nous pouvons contourner le problème par le biais de l'archaïque itinéraire

adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt

mais cela est difficile à manier pour plus d'un fichier.

Comment puis-je tirer le répertoire /data/data/com.corp.appName/les fichiers de mon MacBook?

En faisant ce soit directement ou par l'intermédiaire d'un transit dans " /storage/sdcard0/myDir (d'où je peux continuer avec Transfert de Fichiers Android) c'est bien.

Commentaires Supplémentaires

Il se peut que juste courir

adb backup  -f myFiles com.corp.appName

va générer les fichiers, je suis à la recherche d'. Dans ce cas, je suis à la recherche d'un moyen de décompresser/décompressez l'résultant de sauvegarde!

128voto

Calaf Points 1406

adb backup écrira une archive spécifique à Android:

 adb backup  -f myAndroidBackup.ab  com.corp.appName
 

Cette archive peut être convertie au format tar à l'aide de:

 dd if=myAndroidBackup.ab  bs=1 skip=24|openssl zlib -d > myAndroidBackup.tar
 

Référence:

http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html

Recherchez "Mise à jour" sur ce lien.

6voto

Tamas Points 301

Vous pouvez utiliser ce script shell ci-dessous. Il est également capable d'extraire des fichiers du cache de l'application, contrairement à l'outil adb backup :

 #!/bin/sh
adb shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"
 

Ensuite, vous pouvez l'utiliser comme ceci:

 ./pull.sh files/myFile.txt
./pull.sh cache/someCachedData.txt
 

5voto

CommonsWare Points 402670

Comment puis-je extraire le répertoire /data/data/com.corp.appName/files sur mon MacBook?

Utilisez un émulateur au lieu d'un périphérique.

Ou, rootez votre appareil.

Ou bien, essayez d'utiliser cp -r files/* /mnt/sdcard/someDirectoryYouCreate au lieu de cat dans votre recette run-as ci-dessus.

2voto

Après avoir défini les bonnes autorisations en ajoutant le code suivant:

 File myFile = ...;
myFile.setReadable(true, false); // readable, not only for the owner
 

adb pull fonctionne comme vous le souhaitez.

voir File.setReadable ()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X