Comment accéder aux données / dossier de données sur un appareil Android?

317

Je développe une application et je sais que ma base de données *.dbapparaîtra dansdata/data/com.****.***

Je peux accéder à ce fichier depuis AVD dans Eclipse avec l'aide du gestionnaire sqlite

Mais je ne peux pas accéder à ce fichier sur mon téléphone Android.
Je google et il dit que je dois rooter mon téléphone pour le faire, mais je ne veux pas le faire. (Nouveau téléphone, problèmes de garantie et problèmes de sécurité)

Voici donc ma question: Comment puis-je accéder à mon data/data/.....répertoire dans mon téléphone Android " sans l'enraciner "?

Puis-je modifier les autorisations utilisateur pour le répertoire data/data.....sans le rooter?

Naveen Prince P
la source
1
avez-vous un fichier database.db .. ???
Amit Prajapati
si j'utilise la base de données - "openOrCreateDatabase (....)"
Naveen Prince P
5
Vous devrez certainement rooter le téléphone avant tout. Ensuite, vous aurez besoin d'une application de gestion de fichiers compétente que vous pouvez utiliser. Le gestionnaire de fichiers ASTRO est populaire mais il ne prend pas en charge l'accès root, il est donc inutile pour les utilisateurs expérimentés. Vous devriez pouvoir utiliser ES File Explorer ou File Expert. J'ai récemment eu des problèmes d'affichage / de données / de données ou d'autres dossiers protégés avec ES File Explorer et je l'ai quasiment abandonné, et j'utilise maintenant File Expert. Ils nécessitent tous deux d'aller dans les paramètres et d'activer l'option de l'explorateur racine (et parfois aussi de monter le système de fichiers en écriture). Vous devez donc le faire en premier.
Samir
Ce n'est pas une question ni des réponses liées à la programmation.
SkyWalker du

Réponses:

376

L'accès aux fichiers directement sur votre téléphone est difficile, mais vous pourrez peut-être les copier sur votre ordinateur où vous pourrez en faire ce que vous voudrez. Sans enracinement, vous avez 2 options:

  1. Si l'application est débogable, vous pouvez utiliser la run-ascommande dans le shell adb

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Vous pouvez également utiliser la fonction de sauvegarde d'Android.

    adb backup -noapk com.your.packagename

    Vous serez maintenant invité à «déverrouiller votre appareil et confirmer l'opération de sauvegarde». Il vaut mieux NE PAS fournir de mot de passe, sinon il devient plus difficile de lire les données. Cliquez simplement sur «sauvegarder mes données». Le fichier «backup.ab» résultant sur votre ordinateur contient toutes les données d'application au format de sauvegarde Android. Fondamentalement, c'est un fichier tar compressé. Cette page explique comment vous pouvez utiliser la commande zlib d'OpenSSL pour la décompresser. Vous pouvez utiliser la adb restore backup.dbcommande pour restaurer la sauvegarde.

THelper
la source
15
adb backup -f \location\on\local\drive -noapk app.package.nametravaillé pour moi sans racine
theblang
24
Utilisez cette commande pour décompresser votre fichier de sauvegarde:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman
11
Dans l'option 1, comment dire à la commande cp de les enregistrer sur mon ordinateur portable (Mac)? Si vous donnez un exemple Win, j'aimerais le savoir aussi, et je le traduirai simplement. Merci.
Gerard
10
Important: L' exécution adb backup -noapk com.your.packagenameenregistrera le fichier ab dans le répertoire actuel , alors assurez-vous d'avoir navigué dans le bon répertoire (par exemple cd Desktop..)
Menelaos Kotsollaris
6
Notez que l'approche de sauvegarde produira une sauvegarde vide si votre application a désactivé les sauvegardes via android:allowBackup="false"dans le manifeste.
Tom
130

Si vous utilisez Android Studio 3.0 ou une version ultérieure, procédez comme suit.

  1. Cliquez sur Affichage > Fenêtres d'outils > Explorateur de fichiers de périphérique .
  2. Développez les nœuds / data / data / [nom du package] .

Vous pouvez uniquement développer des packages qui s'exécutent en mode débogage sur un périphérique non rooté.

Étapes suivies dans Android Studio 3.0

Shahidul
la source
1
je ne peux rien voir dans ce quai. et ne me dites rien. savez-vous quel est le problème?
Mahdi Azadbar
1
Cela ne fonctionne qu'en mode débogage, pas pour les versions de
build
Merci d'avoir montré la façon sans pita d'examiner le système de fichiers!
Lensflare
Je ne semble pas avoir l'option dans la version 3.0.1, a-t-elle bougé?
Codingale
1
C'est génial. J'aurais aimé le savoir il y a quelque temps.
checkmate711
59

Vous pouvez également essayer de récupérer la base de données à l'aide de l'application root explorer. Et si cela ne fonctionne pas, vous pouvez essayer ceci:

  1. Ouvrir cmd
  2. Changez votre répertoire et allez dans 'Outils de plateforme'
  3. Tapez ' adb shell'
  4. su
  5. Appuyez sur «Autoriser» sur l'appareil
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Ouvrez la vue DDMS dans Eclipse et à partir de là, ouvrez «FileExplorer» pour obtenir le fichier souhaité

Après cela, vous devriez pouvoir parcourir les fichiers sur le périphérique rooté.

Sheraz Ahmad Khilji
la source
2
Je pense que l'application Root Explorer ne fonctionne que pour les téléphones rootés. J'essaierai la 2ème méthode
Naveen Prince P
5
Impossible de chmod / données: opération non autorisée
bofredo
@bofredo Je pense que c'est parce que votre téléphone n'est pas enraciné. vous devez rooter votre téléphone, puis essayer ceci
Sheraz Ahmad Khilji
1
@mahemadhi yes, vous devrez probablement exécuter cette commande manuellement pour chaque répertoire car tous les répertoires ont des autorisations qui leur sont privées.
Sheraz Ahmad Khilji
1
@VivekChavda yup, ils ont besoin d'un téléphone rooté
Sheraz Ahmad Khilji
21

Pour effectuer l'une des opérations ci-dessus (c'est-à-dire accéder aux dossiers protégés depuis votre téléphone lui-même), vous avez toujours besoin de root. (Cela inclut la modification des autorisations de montage sur le dossier / data et l'accès à celui-ci)

Sans root, il n'est pas possible d' accéder /datadirectement à la lecture sauf depuis votre application via le code. Vous pouvez donc essayer de copier ce fichier sur une carte SD ou dans un endroit accessible, puis vous devriez pouvoir y accéder normalement.

L'enracinement n'annulera pas votre garantie si vous avez un appareil de développeur. Je suis désolé, il n'y a pas d'autre moyen AFAIK.

Anirudh Ramanathan
la source
je n'utilise pas d'appareil de développeur. Le mien est Xperia U
Naveen Prince P
puis-je modifier l'autorisation utilisateur du dossier de données avec les commandes chmode?
Naveen Prince P
La partition entière est montée en lecture seule. Je dirais que votre meilleur pari serait adb pullcomme mentionné dans la réponse ci-dessous.
Anirudh Ramanathan
C'est possible si l'application le permet. Les répertoires ont tous une autorisation x pour tout le monde (mais pas de r pour tout le monde, vous devez donc connaître le chemin). Cela dépend si l'application a rendu le fichier accessible ou non. Certains fichiers le sont, la plupart ne le sont pas.
Jan Hudec
Vous dites d'abord qu'il est impossible de lire, puis vous proposez de copier le fichier ailleurs. Mais, comment copier un fichier sans le lire en premier lieu? Je pense que cette réponse est boguée.
jusqu'au
13

La façon la plus simple (en une seule étape simple) d'extraire un fichier de votre dossier d'application débogable (disons /data/data/package.name/databases/file) sur un appareil Android 5.0+ non rooté est d'utiliser cette commande:

adb exec-out run-as package.name cat databases/file > file
Alex P.
la source
12
  1. Ouvrez votre invite de commande
  2. Remplacez le répertoire par E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Entrez les commandes ci-dessous
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Changez le répertoire pour cd /sdcardvous assurer database.dbqu'il est là.
  7. adb pull /sdcard/database.db ou simplement vous pouvez copier database.db depuis l'appareil.
Isura Amarasinghe
la source
Fonctionne parfaitement pour moi. Merci! Mais dans mon cas, le nom du fichier de base de données n'a pas d'extension .db.
technik
10

Utilisez l'Explorateur de fichiers dans Eclipse. Sélectionnez Windows => Afficher la vue => Autre ... => Explorateur de fichiers.

Une autre façon consiste à extraire le fichier via adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
Nguyen Minh Binh
la source
5

J'ai aussi eu le même problème une fois. Il n'y a aucun moyen d'accéder directement au fichier sur les appareils Android, à l'exception du shell ADB ou du périphérique de root.

À côté, voici 02 alternatives:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, 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) {

    }
}

2) Essayez ceci: https://github.com/sanathp/DatabaseManager_For_Android

Khairul Alam Licon
la source
5

Pour sauvegarder d'Android sur le bureau

Ouvrez la ligne de commande cmd et exécutez ceci: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . N'entrez pas de mot de passe et cliquez sur Sauvegarder mes données. Assurez-vous de ne pas enregistrer sur la racine du lecteur C. Vous pourriez être refusé. C'est pourquoi j'ai enregistré sur C: \ Intel.

Pour extraire le fichier * .ab

  1. Allez ici et téléchargez: https://sourceforge.net/projects/adbextractor/
  2. Extrayez le fichier téléchargé et accédez au dossier dans lequel vous avez extrait.
  3. exécutez ceci avec vos propres noms de fichiers: java -jar abe.jar décompressez c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
RonTLV
la source
1
Ceci est une excellente réponse, merci. A travaillé pour moi pour extraire une sauvegarde d'une seule application créée sur un appareil Xiaomi (avec l'extension .bak). Aucun enracinement requis
Russe
4

Sur un appareil rooté , la bonne solution est la suivante:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

La solution d'origine fonctionnait, mais le chmod retournerait un répertoire inconnu. La modification de la commande chmod en / data / data / * a donné accès à tous les sous-dossiers du répertoire de données à partir de DDMS dans Intellij. Je suppose que la même solution est vraie pour Eclipse DDMS.

MISE À JOUR Donc, ce que j'ai trouvé est étrange. J'utilise un Nexus 6 utilisant DDMS dans IntelliJ (Android Device Monitor). J'ai construit une petite application de démarrage. Cette application enregistre les données dans un fichier .csv dans data / data / com.example.myapp / files

Lorsque j'ai commencé à essayer d'accéder à ce fichier sur mon Nexus 6, j'ai constaté que je devais rooter l'appareil .. Je pouvais voir le dossier de données, mais essayer de l'ouvrir ne fonctionnerait pas. Comme mentionné en ligne dans d'autres endroits, l'extension + disparaîtrait puis réapparaîtrait peu de temps après (remarque, il existe des solutions sur le Web qui prétendent autoriser l'accès à ces dossiers sans enracinement, je ne les ai trouvées que trop tard, et je suis Je ne sais pas si je préfère ne pas rooter de toute façon ((je préfère être en mesure de le faire manuellement que de compter sur une application ou une invite de commande pour me donner mes solutions))). J'ai rooté mon 6 et réessayé DDMS.

À ce stade, il m'a montré le dossier de données et j'ai pu développer le dossier et voir le com. répertoires, mais je n'ai pu en ouvrir aucun. C'est alors que j'ai découvert la solution ci-dessus. Les instructions initiales ne fonctionneraient pas sur cette partie:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

C'est alors que j'ai essayé la solution que j'ai publiée:

chmod 777 /data /data/data /data/data/*

Cette solution semble fonctionner, mais uniquement sur certains dossiers. Je pouvais maintenant développer mon dossier myapp, mais je ne pouvais pas développer le répertoire de fichiers qu'il contient.

À ce stade, j'ai joué pendant un certain temps, puis j'ai pensé pourquoi ne pas simplement l'essayer sur le répertoire dont j'ai besoin plutôt que d'essayer ces entrées génériques.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Suivi par:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Ces commandes m'ont permis de développer et d'afficher les fichiers dans le répertoire de mon application pour confirmer que le fichier .csv était correctement enregistré.

J'espère que cela aide quelqu'un. J'ai lutté avec ça pendant des heures!

(pour ajouter encore un peu, curieusement, les autorisations ne sont pas passées au fichier .csv qui est passé au répertoire des fichiers. mes autorisations de répertoire de fichiers lisent drwxrwxrwx et mes autorisations de fichier log.csv lisent -rw-rw --- - .. juste FYI)

lol2dubs
la source
2

Vous pouvez télécharger un fichier sigle comme ça:

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

Avant de télécharger, vous n'aurez peut-être pas besoin d'examiner la structure des fichiers dans votre répertoire d'applications. Pour cela, procédez comme suit THelper:

adb shell
run-as com.your.packagename 
cd files
ls -als .

La méthode Android-StudioShahidul mentionnée ( https://stackoverflow.com/a/44089388/1256697 ) fonctionne également. Pour ceux qui ne voient pas l' DeviceFile Exploreroption dans le menu: Assurez-vous d'ouvrir le répertoire / android dans Android Studio. Par exemple, les utilisateurs natifs de React ont ceci à l' intérieur de leur dossier de projet directement au même niveau que le répertoire / ios.

suther
la source
1

L'un des moyens les plus simples consiste à créer votre base de données sur une carte SD. Parce que vous ne pouvez pas accéder au dossier de données de votre téléphone dans la mémoire interne, sauf si vous rootez votre téléphone. Alors pourquoi ne pas simplement créer votre base de données sur carte SD.

De plus, si vous le souhaitez, vous pouvez écrire du code de copie de fichier pour copier votre fichier de base de données existant (de la mémoire interne) vers la mémoire externe sans nécessiter de racine.

waqaslam
la source
comment faire? comment puis-je créer un db dans sdcard
Naveen Prince P
Cette méthode vous aidera à créer une base de données sur une carte SD. Fournissez simplement un chemin de Filepointage vers la carte SD et vous êtes
prêt
1

peut être pour accéder à ce dossier, vous avez besoin des droits d'administration.

vous avez donc deux options: -

  1. rooter votre appareil et essayer d'accéder à ce dossier
  2. utiliser l'émulateur

ps: si vous utilisez l'une des deux options ci-dessus, vous pouvez accéder à ce dossier en suivant ces étapes

ouvrir la perspective DDMS -> votre appareil -> (Sélectionnez l'Explorateur de fichiers dans les options de la fenêtre de droite) sélectionnez le package -> données -> données -> nom du package -> fichiers

et à partir de là, vous pouvez extraire votre fichier

user3829503
la source
1

adb backupn'a pas fonctionné pour moi, alors voici ce que j'ai fait (Xiaomi Redmi Note 4X, Android 6.0):
1. Allez dans Paramètres> Paramètres supplémentaires> Sauvegarde et réinitialisation> Sauvegardes locales .
2. Appuyez sur «Sauvegarder» en bas de l'écran.
3. Décochez les cases "Système" et "Applications".
4. Appuyez sur le bouton de divulgation des détails à droite de la cellule "Applications" pour accéder à l'écran de sélection des applications.
5. Sélectionnez l'application souhaitée et appuyez sur OK.
6. Une fois la sauvegarde terminée, le fichier réel doit être localisé d'une manière ou d'une autre. Le mien se trouve dans / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. J'ai ensuite suivi les étapes de cette réponse de RonTLVpour réellement convertir le fichier de sauvegarde (.bak dans mon cas) en tar (duplication de la réponse d'origine):
"
a) Allez ici et téléchargez: https://sourceforge.net/projects/adbextractor/ "
b) Extrayez le fichier téléchargé et accédez au dossier dans lequel vous avez extrait.
c) exécutez ceci avec vos propres noms de fichiers: java -jar abe.jar décompressez c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

russe
la source
0

vous pouvez copier ce fichier db vers quelque part dans l'explorateur eclipse (par exemple: sdcard ou PC), et vous pouvez utiliser sqlite pour accéder et mettre à jour ce fichier db.

Vito
la source
0

La question est: comment-accéder-aux-données-dossier-de-données-dans-l'appareil-android?


Si l'appareil Android est Bluestacks * Root Browser APK affiche les données / données / ..


Essayez de télécharger le navigateur racine à partir de https://apkpure.com/root-browser/com.jrummy.root.browserfree


Si le fichier est un fichier texte, vous devez cliquer sur "Ouvrir sous", "Fichier texte", "Ouvrir sous", "RB Text Editor"

Tonio FERENER - VARI
la source
0

Vous pouvez également essayer de copier le fichier dans le dossier de la carte SD, qui est un dossier public, puis vous pouvez copier le fichier sur votre PC où vous pouvez utiliser sqlite pour y accéder.

Voici un code que vous pouvez utiliser pour copier le fichier de données / données vers un dossier de stockage public:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.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) {
        e.printStackTrace();
    }
}

Manifeste:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
l'amour en direct
la source
Toutes les actions pour copier le fichier ne sont pas accessibles si le fichier ne partage pas l'autorisation de lecture à d'autres
Steve Luck
0

La base de données SQLlite est stockée sur le téléphone de l'utilisateur et se cache sous le chemin:

/Data/Data/com.companyname.AppName/File/

vous avez 2 options ici:

  1. vous pouvez rooter votre téléphone pour pouvoir accéder à votre fichier db3 de masquage
  2. ce n'est pas une solution mais une solution de contournement. Pourquoi ne pas simplement créer une page de test qui affiche votre table de base de données en utilisant une instruction 'select'.
ikhlas ahmed
la source