J'ai cherché partout et je ne trouve pas de vraie réponse précise ou de tutoriel sur la façon, si c'est possible, de le faire.
est-il possible d'extraire de quelque manière que ce soit une base de données d'un appareil Android sans avoir à le rooter? J'ai juste besoin d'extraire ces données de quelque manière que ce soit pour les rassembler sur mon PC, alors comment puis-je effectuer cela? Dois-je reprogrammer l'application ou toute autre méthode que vous connaissez, mais rappelez-vous sans enraciner l'appareil. Merci
Réponses:
Une manière courante d'obtenir ce que vous désirez est d'utiliser la commande d'extraction ADB.
Une autre façon que je préfère dans la plupart des cas est de copier la base de données par code sur la carte SD:
N'oubliez pas de définir l'autorisation d'écrire sur SD dans votre manifeste, comme ci-dessous.
la source
getPath
méthode.Si votre appareil exécute Android v4 ou supérieur, vous pouvez extraire les données de l'application, y compris sa base de données, sans racine à l'aide de la
adb backup
commande, puis extraire le fichier de sauvegarde et accéder à la base de données sqlite.Sauvegardez d'abord les données de l'application sur votre PC via un câble USB avec la commande suivante, remplacez-les
app.package.name
par le nom réel du package de l'application.Cela vous demandera de "déverrouiller votre appareil et de confirmer l'opération de sauvegarde". Ne fournissez pas de mot de passe pour le chiffrement de sauvegarde , vous pourrez donc l'extraire plus tard. Cliquez sur le bouton "Sauvegarder mes données" sur votre appareil. L'écran affichera le nom du package que vous sauvegardez, puis se fermera de lui-même une fois terminé.
Le
data.ab
fichier résultant dans votre dossier d'accueil contient des données d'application au format de sauvegarde Android. Pour l'extraire, utilisez la commande suivante:Si ce qui précède s'est terminé avec une
openssl:Error: 'zlib' is an invalid command.
erreur, essayez ce qui suit.Le résultat est le
apps/app.package.name/
dossier contenant les données d'application, y compris la base de données sqlite.Pour plus de détails, vous pouvez consulter l' article de blog original .
la source
openssl:Error: 'zlib' is an invalid command.
, auquel j'ai répondu avecdd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
TOUTEFOIS, après qu'il montre17+0 records in17+0 records out17 bytes transferred in 0.000064 secs
qu'il n'y a aucune preuve que quoi que ce soit ait été fait dans le dossier. Comme il ne s'agit que de 17 octets, je suppose que cette commande a également échoué. Je pense que c'est mal comment je ne peux pasadb pull
la base de données d'une application de débogage !!android:allowBackup="false"
openssl
sous Mac OS X ne prennent pas en charge lazlib
commande non plus , donc je réinstallé celui avec infusion:brew reinstall openssl
. Cela ne remplacera pas votre système openssl. Par conséquent, j'ai modifié la commande PATH uniquement pour la session en cours:export PATH=/usr/local/opt/openssl/bin:$PATH
après quoi j'ai pu exécuter avec succès les commandes de cette réponse.Pour les applications déboguables 1 sur des appareils non rootés , vous pouvez utiliser la commande suivante:
Exemple:
Définissez PATH adb pour les variables d'environnement ou utilisez la commande cd pour le dossier android sdk platform-tools.
Exemple:
puis utilisez la commande ci-dessus
1 Notez que la plupart des applications du Play Store ne sont pas déboguables car elles nécessitent la définition de l' indicateur déboguable dans le manifeste.
la source
package.name
par le package de l'application, l'erreur est renvoyée:run-as: Package 'com.my.app' is unknown
La plupart des réponses ici sont bien plus compliquées qu'elles ne devraient l'être. Si vous souhaitez simplement copier la base de données de votre application de votre téléphone sur votre ordinateur, vous avez juste besoin de cette commande:
Tout ce que vous devez remplir dans la commande ci-dessus est le nom du package de votre application, le nom de la base de données et éventuellement vers quoi / où vous voulez que la base de données soit copiée.
Veuillez noter que cette commande spécifique ne fonctionnera que si vous n'avez qu'un seul appareil connecté à votre ordinateur. Le
-d
paramètre signifie que le seul appareil connecté sera ciblé. Mais il existe d'autres paramètres que vous pouvez utiliser à la place:-e
ciblera le seul émulateur en cours d'exécution-s <serialnumber>
ciblera un appareil avec un numéro de série spécifique.la source
adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db"
démarrezSSHDroid
FileZilla et connectez-vous à votre téléphone via le protocole SFTP. Définissez / mnt / sdcard comme répertoire distant par défaut.adb -d shell "run-as your.package.name ls databases"
) et 2) vous pouvez vouloir obtenir tous les autres fichiers associés avec la base de données, dans mon cas, l'extraction des fichiers -smh et -wal était le seul moyen d'obtenir DB Browser for SQLite pour ouvrir la base de donnéesEn utilisant Android Studio 3.0 ou une version ultérieure, il est possible d'extraire la base de données (également les préférences partagées, le répertoire de cache et autres) si l'application s'exécute en mode débogage sur un appareil non rooté.
Pour extraire la base de données à l'aide d'Android Studio, procédez comme suit.
la source
la source
Pour Ubuntu (pas seulement?):
voir Sergeis Answer mais au lieu de openssl, utilisez zlib-flate:
Sinon, openssl lancera probablement:
car openssl n'est pas compilé avec le support zlib dans Ubuntu
la source
Depuis, rien ne fonctionne vraiment pour moi. Je crée un petit script Windows BATCH basé sur d'autres réponses combinées. J'espère que cela aidera quelqu'un. Utilisation simple: backupDatabase <PackageName> <ApplicationName> [TargetDirectory]. Il utilise la méthode de sauvegarde de Sergei et Android Backup Extractor .
la source
vous pouvez facilement extraire le fichier sqlite de votre appareil (root pas nécessaire)
start adb
cd / sdk / platform-tools ./adb shell Tapez
ensuite la commande suivante dans le terminal
./adb -d shell "run-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
Par exemple
./adb -d shell "run-as com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
la source
Si vous essayez de le faire sur Android 6, demandez l'autorisation et utilisez le code de la réponse à cette question
Une fois qu'il est accordé
la source
Vous pouvez également utiliser ma bibliothèque Ultra Debugger . Il permet de télécharger la base de données sous forme de fichier ou de modifier les valeurs directement dans le navigateur. Aucune racine nécessaire, très facile à utiliser.
la source
Sur Mac (AUCUNE racine requise)
Il copiera le fichier sqlite dans le dossier platform-tools.
la source
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 faire une copie de fichier dans un fichier public visible.
la source
Sur un appareil enraciné, vous pouvez:
la source
Basé sur la réponse donnée par Lam Vinh, voici un simple fichier batch qui fonctionne pour moi sur mon Nexus 7 de 1ère génération.Il invite l'utilisateur à entrer le nom du package puis le nom de la base de données (sans l'extension .sqlite) et le met dans c: \ temp. Cela suppose que vous avez défini le sdk Android dans les variables d'environnement.
la source
Si vous êtes sous Android 4.0 ou supérieur et que vous êtes sur un mac , voici un script ruby qui enregistrera le contenu de votre application sur le bureau. J'imagine que cela fonctionnerait également dans Ubuntu, même si je ne l'ai pas testé.
pour exécuter -> ruby your_ruby_file_name.rb
Ce script est uniquement "happy path", veuillez donc vous assurer que votre appareil est connecté et que adb a été ajouté à votre profil.
la source
Je donne la solution complète pour "enregistrer" et "restaurer" la base de données de l'application vers / depuis le stockage interne (pas sur le PC avec adb).
J'ai fait deux méthodes une pour sauvegarder et une autre pour restaurer la base de données. Utilisez ces méthodes à la fin de onCreate () dans MainActivity (l'une ou l'autre si vous souhaitez sauvegarder ou restaurer la base de données).
enregistrer la base de données dans le stockage interne:
restaurer la base de données à partir du stockage interne:
la source
C'est toujours mieux si les choses sont automatisées.C'est pourquoi j'ai écrit un simple script python pour copier un fichier db à partir d'un appareil utilisant ADB. Cela fait gagner beaucoup de temps au développement si vous le faites fréquemment.
Fonctionne uniquement avec les applications déboguables si l'appareil n'est pas enraciné.
Voici le lien vers l'essentiel.
Exécutez-le comme:
python copyandroiddbfile.py
la source
Si vous voulez que votre fichier de base de données
Voir le DDMS> Exploration de fichiers
trouvez votre fichier db à partir du nom de votre package
puis cliquez sur extraire un fichier de l'appareil (appareil enraciné uniquement)
la source