106 votes

Android - Tirant de la base de données SQlite appareil Android

J'ai regardé partout et je ne trouve pas de réponse précise ni de tutoriel sur la manière de procéder si possible.

Est-il possible d'extraire de quelque manière que ce soit la base de données d'un appareil Android sans avoir à la rooter? J'ai juste besoin d'extraire ces données de quelque manière que ce soit afin de les rassembler sur mon pc, alors comment puis-je effectuer cela? Dois-je reprogrammer l'application ou la méthode que vous connaissez, mais souvenez-vous sans enraciner l'appareil. Merci

180voto

Sergei Points 1051

Si votre appareil fonctionne sous Android v4 ou au-dessus, vous pouvez extraire les données d'application, y compris la base de données, sans racine en utilisant adb backup à la commande, puis extraire le fichier de sauvegarde et d'accès à la base de données sqlite.

Première application de sauvegarde de données à votre PC via le câble USB avec la commande suivante, remplacez - app.package.name avec le nom du package de l'application.

adb backup -f ~/data.ab -noapk app.package.name

Il vous invite à "déverrouiller votre appareil et confirmer l'opération de sauvegarde". Ne pas fournir un mot de passe pour le chiffrement de sauvegarde, de sorte que vous pouvez l'extraire plus tard. Cliquez sur "sauvegarder mes données" bouton sur votre appareil. L'écran affiche le nom du paquet que vous voulez sauvegarder, puis fermez par lui-même en cas de réussite.

Le résultant data.ab le fichier dans votre dossier contient les données des applications android format de sauvegarde. Pour l'extraire, utilisez la commande suivante:

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

Le résultat est l' apps/app.package.name/ le dossier contenant les données d'application, y compris la base de données sqlite.

Pour plus de détails, vous pouvez consulter le blog original.

79voto

KarlKarlsom Points 2970

Une méthode courante pour atteindre vos objectifs consiste à utiliser la commande d'extraction ADB.

Un autre moyen que je préfère dans la plupart des cas consiste à copier la base de données par code sur la carte SD:

 try {
                    File sd = Environment.getExternalStorageDirectory();
                    File data = Environment.getDataDirectory();

                    if (sd.canWrite()) {
                        String currentDBPath = "/data/" + getPackageName() + "/databases/yourdatabasename";
                        String backupDBPath = "backupname.db";
                        File currentDB = new File(currentDBPath);
                        File backupDB = new File(sd, backupDBPath);

                        if (currentDB.exists()) {
                            FileChannel src = new FileInputStream(currentDB).getChannel();
                            FileChannel dst = new FileOutputStream(backupDB).getChannel();
                            dst.transferFrom(src, 0, src.size());
                            src.close();
                            dst.close();
                        }
                    }
                } catch (Exception e) {

                }
 

N'oubliez pas de définir l'autorisation d'écrire en SD dans votre manifeste.

70voto

Lam Vinh Points 269

Pour debuggable apps sur la non-enracinée appareils, vous pouvez utiliser la commande suivante:

la commande adb shell "exécuter en tant que package.nom chmod 666 /data/data/paquet.nom/bases de données/fichier"
adb pull /data/data/paquet.nom/bases de données/fichier

Exp:
la commande adb shell "exécuter en tant que com.app chmod 666 /data/data/com.app/bases de données/données.db"
adb pull /data/data/com.app/bases de données/données.db

Définir le CHEMIN d'accès de la bad pour l'Environnement de Variables ou d'utiliser la commande cd pour android sdk dossier platform-tools.
Exp:
cd /dossier/android-sdk/platform-tools/ après l'utilisation de commande ci-dessus

5voto

user1885518 Points 495

Pour Ubuntu (pas seulement?):

voir Sergeis Answer mais au lieu d’openssl, utilisez zlib-flate:

chat appbackup.ab | (dd bs = 24 count = 0 skip = 1; cat) | zlib-flate -uncompress> appbackup.tar

Sinon, openssl lancera probablement:

openssl: Erreur: 'zlib' est une commande non valide.

parce que openssl n'est pas compilé avec le support zlib dans Ubuntu

0voto

k3b Points 5381
  > is it possible to pull in any way a database of an Android device without having to root it? 
 

oui si votre application Android crée une copie de fichier de la base de données accessible à tous.

Android protège les données privées des applications afin qu'elles ne soient pas visibles / accessibles par d'autres applications. une base de données est une donnée privée. votre application peut bien sûr lire le fichier de base de données afin de pouvoir copier un fichier dans un fichier public visible.

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