124 votes

Récupérer une base de données ou tout autre fichier depuis le stockage interne en utilisant l'exécution en tant que tel.

Sur un appareil Android non rooté, je peux naviguer vers le dossier de données contenant la base de données à l'aide de la commande run-as avec le nom de mon paquet. Pour la plupart des types de fichiers, je me contente de les visualiser, mais pour la base de données, j'aimerais les extraire de l'appareil Android.

Y a-t-il un download copy o move à partir de cette partie du shell adb ? Je voudrais télécharger le fichier de la base de données et visualiser son contenu à l'aide d'un navigateur de base de données.

Une réponse consiste à transformer l'ensemble de l'application en une archive compressée, mais il n'y a pas d'autre réponse sur la façon d'extraire cette archive une fois que cela est fait et déplacé sur la machine, ce qui me laisse sur la touche alors qu'il pourrait y avoir une solution plus directe au départ.

253voto

Alex P. Points 4442

Par design user d'Android (c'est ce que vous avez sur votre téléphone jusqu'à ce que vous déverrouilliez le système). chargeur de démarrage et de flasher le téléphone avec userdebug o eng ) restreint l'accès au Stockage interne - chaque application ne peut accéder qu'à ses propres fichiers. Heureusement pour les développeurs de logiciels qui ne veulent pas Racine leurs téléphones, Google fournit un moyen d'accéder à la Stockage interne de Débuggeable de leurs paquets en utilisant run-as commandement.

Pour télécharger le /data/data/debuggable.app.package.name/databases/file à partir d'un appareil Android 5.1+, exécutez la commande suivante :

adb exec-out run-as debuggable.app.package.name cat databases/file > file

Pour télécharger plusieurs fichiers dans un dossier sous l'onglet /data/data/debuggable.app.package.name/ en même temps - utilisez tar :

adb exec-out run-as debuggable.app.package.name tar c databases/ > databases.tar
adb exec-out run-as debuggable.app.package.name tar c shared_prefs/ > shared_prefs.tar

75voto

marmor Points 4559

La réponse acceptée ne fonctionne plus pour moi (bloquée par Android ?)

Alors à la place, j'ai fait ça :

> adb shell
shell $ run-as com.example.package
shell $ chmod 666 databases/file
shell $ exit                                               ## exit out of 'run-as'
shell $ cp /data/data/package.name/databases/file /sdcard/
shell $ run-as com.example.package
shell $ chmod 600 databases/file
> adb pull /sdcard/file .

32voto

Ifta Points 461

Si quelqu'un cherche à tirer une base de données de déboguer l'application peut utiliser la procédure ci-dessous :

  1. rechercher et ouvrir l'explorateur de fichiers du périphérique

search and open device file explorer

  1. Sélectionnez votre combiné, puis naviguez jusqu'à data/data répertoire

go to data/data directory

  1. Trouvez maintenant votre paquet d'applications et allez dans le dossier des bases de données. Vous pouvez y voir les bases de données et en faisant un clic droit, vous obtiendrez une option pour les sauvegarder sur votre disque dur.

enter image description here

9voto

Paul Lammertsma Points 12817

J'ai publié un simple shell script pour vider les bases de données :

https://github.com/Pixplicity/humpty-dumpty-Android

Il exécute deux méthodes distinctes décrites ici :

  1. Tout d'abord, il essaie de rendre le fichier accessible aux autres utilisateurs, et tente de le retirer de l'appareil.
  2. Si cela échoue, il transmet le contenu du fichier par le terminal à la machine locale. Il effectue un tour supplémentaire pour supprimer \r les caractères que certains périphériques transmettent à l'interpréteur de commandes.

A partir de là, vous pouvez utiliser une variété d'applications SQLite CLI ou GUI, telles que sqlite3 o sqlitebrowser pour parcourir le contenu de la base de données.

7voto

Triplee121 Points 81

Je n'ai rien trouvé d'autre que ça pour moi :

adb shell
run-as package.name
cat /databases/databaseFileName.db > /sdcard/copiedDatabaseFileName.db
exit
exit
adb pull /sdcard/copiedDatabaseFileName.db /file/location/on/computer/

La première sortie consiste à quitter le run-as, la deuxième sortie consiste à quitter le shell adb pour effectuer le pull.

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