Comment peut-on tirer de l' (privé) des données de sa propre application Android?
De tenter de 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 route
adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt
mais c'est lourd pour plus d'un fichier.
Comment puis-je tirer le répertoire /data/data/com.corp.appName/les fichiers de mon MacBook?
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.
De Commentaire Supplémentaire
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!
- À moins que l'appareil est enraciné, vous ne pouvez tout simplement pas le faire.
- J'espère que vous avez tort, mais juste au cas où, s'il vous plaît passer votre commentaire être une réponse. Pourriez-vous ajouter une sorte de référence à sauvegarder pourquoi tu crois? Je voudrais sauver tous les fichiers inutiles qui le buggy versions de mon programme ont enregistré à assurez-vous en bas de la route que mon plus proche de déverrouillage programme permettra de traiter tous les types de fichiers d'entrée.
- Je vais citer l'expérience (+de 20 appareils), et bien sûr developer.android.com/guide/topics/data/... vous dit que la mémoire de Stockage Interne est privé de l'application. Si vous êtes en train de recueillir des données de débogage, de l'écrire pour le stockage externe ou faire
WORLD_READABLE
. - Est-ce à dire que l'on pouvait chmod du répertoire de monde: - x au monde:r-x assez longtemps pour être en mesure de récupérer les fichiers?
- Je pense qu'il serait utile de savoir si vous essayez de copier des fichiers à partir d'une Application dont vous êtes responsable, ou si c'est quelqu'un elses App. Si c'est votre Application, vous pouvez simplement écrire les données nécessaires à un support de stockage externe. Si c'est quelqu'un elses Application, vous allez exiger d'une interface quelconque (comme un ContentProvider) ou de la racine.
- C'est en effet l'une de mes applications. Il est encore à mi-chemin par le biais de développement. Pour écrire, j'ai ouvert les fichiers à l'aide de 'contexte.getcontexteapplication().openFileOutput( myFile, le Contexte.MODE_PRIVATE )'. Mais maintenant je peux voir que c'est une mauvaise idée, et peut-être c'est pourquoi de nombreuses applications de stocker leurs fichiers à la racine du système de fichiers plutôt que dans le répertoire officiellement sanctionnée par Android.
- Ce que je voulais dire, c'est de ne pas utiliser MODE_PRIVATE, mais plutôt MODE_WORLD_READABLE, au cours du développement. Ou mieux encore, utiliser un stockage externe au cours du développement.
- Nonobstant le fait que c'est l'une de mes applications, n'est-il pas légitime pour que les utilisateurs soient en mesure de conserver une copie des données d'une application stockée sur leurs appareils? Après tout, les données vraisemblablement appartiennent au propriétaire de l'appareil, pas l'application de l'auteur.
- Le problème est de savoir comment vous différencier entre le propriétaire, et une Application malveillante/programme, en essayant de faire l'interface avec vos Applications de données privées. (ce qui pourrait avoir un les utilisateurs de données personnelles)
Vous devez vous connecter pour publier un commentaire.
adb backup va écrire un Android archive:
Cette archive peut être converti au format tar en utilisant:
Référence:
http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html
De la recherche pour "mise à Jour" à ce lien.
Vous pouvez également utiliser Android backup extractor pour extraire des fichiers à partir de la sauvegarde Android (
.ab
) fichier.bs=24 skip=1
est beaucoup plus rapide quebs=1 skip=24
(sur mon système, 38.6 MB/s vs 1,7 MB/s) 🙂dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
(à partir de ci-dessus source)dd
commande sur mon MacBook au travail. Au lieu de cela, j'utilisejava -jar ./abe.jar unpack data.ab data.tar
. Vous pouvez télécharger l'abe de l'utilitaire à partir de sourceforge.net/projects/adbextractor/files/?source=navbarandroid:allowBackup="false"
dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
dd
autant que nous le faisons. Icitail -c+25 myAndroidBackup.ab | ...
est très bien.J'ai eu le même problème mais résolu en cours d'exécution suivants:
Après cela, vous pouvez exécuter
Voici ce qui a fonctionné pour moi:
Je suis d'impression de la base de données directement dans un fichier local.
adb shell
------ l'intérieur de la coquille exécuterrun-as com.example.test
------ l'intérieur de la coquille exécutercat ...db > /mnt/sdcard/file.db
------adb pull /mnt/sdcard/file.db .
------ fin (désolé, les sauts de ligne ne sont pas de travail)adb shell
ne fonctionne pas pour moi, mais suivant cette réponse et à l'aide deadb exec-out
il a travaillé!Sur MacOSX, en combinant les réponses de Calaf et Ollie Ford, le suivant a fonctionné pour moi.
Sur la ligne de commande (assurez-vous que la bad est dans votre chemin, le mien était dans ~/Library/Android/sdk/platform-tools/bad) et avec votre appareil android connecté et en mode débogage USB, exécutez:
Votre appareil android va vous demander la permission de faire une sauvegarde de vos données. Sélectionnez "sauvegarder MES DONNÉES"
Attendre quelques instants.
Le fichier de sauvegarde apparaîtra dans le répertoire où vous avez exécuté la bad.
Exécuter:
Maintenant, vous allez vous disposez d'une sauvegarde.fichier tar, vous pouvez décompresser comme ceci:
Et de voir tous les fichiers stockés par votre application.
adb backup
et ladd
de goudron de conversion étapes permettent pas de statut pendant le travail et peut prendre quelques minutes si vous avez beaucoup de données. Être patient!Vous pouvez utiliser ce script shell ci-dessous. Il est en mesure de tirer des fichiers à partir de l'app cache, pas comme la
adb backup
outil:Alors vous pouvez l'utiliser comme ceci:
rm /sdcard/
substituts, de la chance c'est pas-rf
.Des versions plus récentes d'Android Studio comprennent la Appareil de l'Explorateur de Fichiers que j'ai trouvé pour être une pratique GUI méthode de téléchargement de fichiers à partir de mon développement Nexus 7.
Vous Devez vous assurer que vous avez activé le Débogage USB sur l'appareil
Interagir avec le contenu de l'appareil dans la fenêtre explorateur de fichiers. Cliquez-droit sur un fichier ou d'un répertoire pour créer un nouveau fichier ou d'un répertoire, enregistrez le fichier sélectionné ou un répertoire sur votre ordinateur, télécharger, supprimer, ou de synchroniser. Double-cliquez sur un fichier pour l'ouvrir dans Android Studio.
Android Studio enregistre les fichiers que vous ouvrez cette façon dans un répertoire temporaire à l'extérieur de votre projet. Si vous apportez des modifications à un fichier que vous avez ouvert à l'aide de l'Appareil de l'Explorateur de Fichiers, et souhaitez enregistrer vos modifications à l'appareil, vous devez télécharger manuellement la version modifiée du fichier de l'appareil.
Documentation Complète
Si vous utilisez un ordinateur Mac et un téléphone Samsung, c'est ce que vous avez à faire (depuis
run-as
ne fonctionne pas sur Samsung etzlib
ne fonctionne pas sur Mac)Faire une sauvegarde de votre répertoire de données de l'application
adb backup -f /Users/username/Desktop/data.ab com.example
Vous sera demandé un mot de passe pour chiffrer votre Téléphone, n'entrez pas. Il suffit de taper sur "sauvegarder mes données". Voir Comment prendre de Sauvegarde?
Une fois sauvegardé, vous verrez
data.ab
fichier dans votre ordinateur de Bureau. Maintenant nous avons besoin de convertir cettetar
format.Utilisation Android Backup Extractor pour cela. Télécharger | Code source
Télécharger et vous verrez
abe.jar
fichier. Ajoutez ceci à votre variable PATH.L'exécuter pour générer le goudron fichier:
java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar
Extrait de la de données.tar fichier pour accéder à tous les fichiers
data.tar
juste des extraits d'undata.tar.cpgz
@henryCette réponse est fondée sur mon expérience avec d'autres réponses et des commentaires dans les réponses. J'espère que je peux aider quelqu'un dans une situation similaire.
Je fais cela à OSX via un terminal.
Précédemment Vinicius Avellar la réponse de beaucoup travaillé pour moi. Je n'étais jamais la plupart du temps besoin de la base de données de l'appareil à partir d'une application de débogage.
Aujourd'hui j'ai eu un cas d'utilisation où j'avais besoin d' plusieurs fichiers privés. J'ai fini avec deux solutions qui ont travaillé pour cette affaire.
Voici mon script pour extraire plusieurs fichiers privés que je vais partager avec vous, le lecteur, qui est aussi une enquête sur ce génial question 😉 :
Gist:
https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4
Retour à la méthode 1, décryptage d'une sauvegarde à l'aide de Android Backup Extractor
Voici les étapes que j'ai pris sur mon Mac, et de les problèmes je suis tombé sur:
J'ai d'abord mis en file d'attente d'une sauvegarde ( et de définir un mot de passe pour crypter ma sauvegarde, mon appareil requise ):
Seconde, j'ai téléchargé tout à l'abe.jar à partir d'ici: https://sourceforge.net/projects/adbextractor/files/abe.jar/download
Ensuite, j'ai couru:
À ce point, j'ai un message d'erreur. Parce que mon archive est crypté, java m'a donné une erreur que j'ai besoin d'installer une politique de sécurité des bibliothèques.
Enfin j'ai juste couru ( après l'exécution de la commande précédente de nouveau )
Maintenant, il est important de noter que, si vous pouvez juste lancer-au fur et à chat, il est beaucoup beaucoup plus rapide. L'un, vous obtenez seulement les fichiers que vous voulez et non pas l'ensemble de l'application. Deux, plus fichiers ( + de chiffrement pour moi ), il est plus lent à transférer. Donc, en sachant le faire de cette façon est important si vous n'avez pas d'exécution que sur OSX, mais le script doit être le premier goto pour une application de débogage.
Rappelez-vous que je viens d'écrire ça aujourd'hui et testé il y a quelques temps, donc merci de me signaler d'éventuels bugs!
Après le réglage de la droite les autorisations en ajoutant le code suivant:
adb pull
fonctionne comme souhaité.voir Fichier.setReadable()
À partir de Dave Thomas script que j'ai été capable d'écrire ma propre solution pour remédier à 2 problèmes:
C'est mon script qui copie les données de l'application pour sdcard puis tirez
Similaire à Tamas réponse, voici un one-liner pour Mac OS X pour récupérer tous les fichiers de l'app avec
your.app.id
à partir de votre appareil et de les enregistrer (dans ce cas)~/Desktop/your.app.id
:-d
pour tirer à partir de l'émulateurSauvegardé les données de Jeu avec apk. Nougat Oneplus 2.
Oui, exactement. Bizarrement assez, vous avez également besoin du fichier pour avoir le
x
ensemble de bits. (au moins sur Android 2.3)chmod 755
tout le chemin vers le bas travaillé pour copier un fichier (mais vous devez restaurer les autorisations par la suite, si vous envisagez de continuer à utiliser l'appareil).que vous pouvez faire: