Où l'émulateur Android stocke-t-il la base de données SQLite?

108

Je travaille sur une application Android qui stocke des données dans une base de données SQLite. Ma question est la suivante: où ce fichier de base de données est-il stocké sur le système de fichiers lorsque vous utilisez un émulateur?

J'ai vu qu'il est stocké dans

/data/data/package_name/databases

mais j'ai besoin de savoir où sur le disque dur de ma machine locale qui correspond réellement. La base de données persiste sur plusieurs exécutions de l'émulateur, même après avoir arrêté la machine, elle ne peut donc pas résider uniquement dans la RAM ...

I82Much
la source

Réponses:

55

Le système de fichiers de l'émulateur ne correspond pas à un répertoire de votre disque dur. L'image disque de l'émulateur est stockée sous forme de fichier image, que vous pouvez gérer via Eclipse (recherchez l'icône ressemblant à G1 dans la barre d'outils), ou via le binaire de l'émulateur lui-même (exécutez "emulator -help" pour une description des options) .

Il vaut mieux utiliser adb depuis la ligne de commande pour vous connecter à un émulateur en cours d'exécution. Si vous pouvez obtenir le répertoire et le nom de fichier spécifiques, vous pouvez faire un "adb pull" pour extraire le fichier de base de données de l'émulateur et sur votre disque dur normal.

Edit : Suppression de la suggestion selon laquelle cela fonctionne également pour les appareils non rootés - cela ne fonctionne que pour les émulateurs et les appareils sur lesquels vous utilisez adb en tant que root.

Eric Mill
la source
6
J'ai obtenu la base de données via ddms d'Eclipse. J'ai fait mes changements, puis j'ai repoussé. A fonctionné comme un charme.
I82Much
@ I82 Beaucoup a fonctionné pour moi aussi, changez la perspective de l'éclipse en ddms et vous pourrez ensuite obtenir le fichier de données de là. Merci.
vanzylv
Mise à jour 2013: sur un appareil Jelly Bean, vous ne pouvez pas adb pull(même avec le chemin exact !), Si vous n'êtes pas root .
Bill The Ape
Ce n'est pas une mise à jour, essentiellement depuis le début, les fichiers privés de l'application ont été privés d'adb sur des appareils sécurisés. Mais cette question concerne l'émulateur, où adb s'exécute en tant que root.
Chris Stratton
6
Un exemple pour extraire la base de données d'un émulateur vers votre machine locale estadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter
123

Une mise à jour mentionnée dans les commentaires ci-dessous:

Vous n'avez plus besoin d'être dans la perspective DDMS, ouvrez simplement l'explorateur de fichiers à partir de la fenêtre Eclipse > Afficher la vue> Autre ... Il semble que l'application n'a pas besoin d'être en cours d'exécution même, je peux naviguer dans différents fichiers d'applications Contenu. J'utilise la version 1.0.29 d'ADB


Ou, vous pouvez essayer l'ancienne approche:

Ouvrez la perspective DDMS sur votre Eclipse IDE

( Fenêtre> Ouvrir la perspective> Autre> DDMS )

et le plus important:

VOTRE APPLICATION DOIT ÊTRE EN COURS POUR VOIR LA HIÉRARCHIE DES DOSSIERS ET DES FICHIERS .

Ensuite, dans l' onglet Explorateur de fichiers, vous suivrez le chemin:

data> data> nom-de-votre-package> bases de données> votre-fichier-base-de-données .

Sélectionnez ensuite le fichier, cliquez sur l' icône du disque dans le coin droit de l'écran pour télécharger le fichier .db . Si vous souhaitez télécharger un fichier de base de données sur l'émulateur, vous pouvez cliquer sur l' icône du téléphone (à côté de l'icône du disque) et choisir le fichier à télécharger.

Si vous souhaitez voir le contenu du fichier .db , je vous conseille d'utiliser SQLite Database Browser, que vous pouvez télécharger ici .

PS: Si vous souhaitez voir la base de données à partir d'un appareil réel, vous devez rooter votre téléphone.

rogcg
la source
5
Si quelqu'un se demande, vous devez cliquer sur l'onglet «Explorateur de fichiers».
MSpeed
Salut cyberrog, j'ai trouvé un fichier de base de données mais pouvez-vous me dire comment ouvrir ce fichier? ou comment voir son contenu?
Nilesh Nikumbh
4
@NileshNikumbh Sélectionnez le fichier, cliquez sur l'icône du disque et sélectionnez où vous voulez le stocker. Vous devez également télécharger le navigateur SQLite. sourceforge.net/projects/sqlitebrowser Après l'avoir installé, ouvrez simplement le fichier .db, choisissez l'onglet Parcourir les données et la colonne que vous voulez voir.
rogcg
Très bonne publication! J'ai des problèmes pour obtenir le fichier sqlite à partir du périphérique émulateur:Failed to pull selection (null)
Jan-Terje Sørensen
@OckhamsRazor Si vous voulez voir la base de données depuis un appareil réel (pas un émulateur), vous devez rooter votre téléphone.
rogcg
18

Les autres réponses sont sérieusement dépassées. Avec Android Studio , voici comment procéder:

  1. Cliquez sur Outils> Android> Moniteur de périphérique Android

entrez la description de l'image ici

  1. Cliquez sur Explorateur de fichiers

entrez la description de l'image ici

  1. Accédez à votre fichier db et cliquez sur le bouton Enregistrer .

entrez la description de l'image ici

Yuchen Zhong
la source
1
"Android Device Monitor est obsolète dans Android Studio 3.1 et supprimé d'Android Studio 3.2. Les fonctionnalités que vous pouvez utiliser via Android Device Monitor ont été remplacées par de nouvelles fonctionnalités ..." developer.android.com/studio/profile/monitor
Pete Alvin
8

Dans Android Studio 3.4.1, vous pouvez utiliser la fonction de recherche d'Android Studio pour trouver «Device File Explorer», puis accéder au répertoire / data / data / package_name / database de votre émulateur.

S. Miller
la source
6

J'ai écrit un simple script bash, qui extrait la base de données d'un appareil Android vers votre ordinateur (utilisateurs Linux, Mac)

nom de fichier: android_db_move.sh utilisation: android_db_move.sh com.example.app db_name.db

#!/bin/bash

REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"

if [ $# -ne $REQUIRED_ARGS ]
    then
        echo ""
        echo "Usage:"
        echo "android_db_move.sh [package_name] [db_name]"
        echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
        echo ""
    exit 1
fi;


echo""

cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"

echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

echo $cmd2
eval $cmd2

if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

exit 0
Tadas Valaitis
la source
6

Étant donné que la question n'est pas limitée à Android Studio, je donne donc le chemin pour Visual Studio 2015 (travaillé pour Xamarin).

Outils-Android-Moniteur de périphérique Android

entrez la description de l'image ici

  • Localisez le fichier de base de données mentionné dans l'image ci-dessus et cliquez sur le bouton Pull comme indiqué dans l'image 2.
  • Enregistrez le fichier à l'emplacement souhaité.
  • Vous pouvez ouvrir ce fichier à l'aide de SQLite Studio ou de DB Browser pour SQLite.

Un merci spécial aux autres personnes qui ont répondu à cette question.

Foyzul Karim
la source
4

Les bases de données sont stockées sous forme de fichiers SQLite dans / data / data / PACKAGE / databases / DATABASEFILE où:

Vous pouvez voir (copier depuis / vers le système de fichiers) le fichier de base de données dans l'émulateur en sélectionnant la perspective DDMS , dans l'onglet Explorateur de fichiers.

caligari
la source
3

Solution simple - fonctionne à la fois pour l'émulateur et les appareils connectés

1 Voir la liste des appareils / émulateurs actuellement disponibles.

$ adb devices

Liste des périphériques connectés

G7NZCJ015313309 émulateur de périphérique-5554 périphérique

9885b6454e46383744 appareil

2 Exécutez la sauvegarde sur votre appareil / émulateur

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 Extraire data.ab

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

Vous trouverez la base de données dans le /dbdossier

Mick
la source
Si vous êtes sur OS X, vous manquerez probablement la partie zlib de openssl. Vous pouvez utiliser cette $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
Lasse Magnussen
Ça ne marche pas pour moi. Je reçoisbash: adb: command not found
Matthias
0

selon la documentation Android , Monitor est obsolète dans Android Studio 3.1 et supprimé d'Android Studio 3.2. Pour accéder aux fichiers, il y a un onglet dans le studio Android appelé "Device File Explorer" en bas à droite de la fenêtre de développement dans lequel vous pouvez accéder au système de fichiers de votre émulateur. Il suffit de suivre

/ data / data / nom_package / databases

bonne chance.

Explorateur de fichiers pour appareils Android

vahid sabet
la source