web-dev-qa-db-fra.com

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

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

Je peux accéder à ce fichier à partir d’AVD dans Eclipse avec l’aide de sqlite manager

Mais je ne peux pas accéder à ce fichier sur mon téléphone Android.
Je le 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 de sécurité) 

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

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

257
Naveen Prince

Il est difficile d’accéder aux fichiers directement sur votre téléphone, mais vous pourrez peut-être les copier sur votre ordinateur où vous pourrez faire tout ce que vous voulez avec.

  1. Si l'application est débogable, vous pouvez utiliser la commande run-as dans Shell adb.

    adb Shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  2. Sinon, vous pouvez 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 est préférable de 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 de l'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 le décompresser. Vous pouvez utiliser la commande adb restore backup.db pour restaurer la sauvegarde. 

317
THelper

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

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

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

 Steps followed in Android Studio 3.0

90
Shahidul

Vous pouvez également essayer d'extraire 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 la 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 enraciné.

60

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

Sans racine, accéder au /data directement pour lire sauf depuis votre application via code n'est pas possible. Vous pouvez donc essayer de copier ce fichier sur sdcard 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éveloppement. Je suis désolé, il n'y a pas d'autre moyen, autant que je sache.

21
Anirudh Ramanathan
  1. Ouvrez votre invite de commande
  2. Accédez au répertoire 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. Modifiez le répertoire en cd /sdcard pour vous assurer que database.db est présent.
  7. adb pull /sdcard/database.db ou simplement vous pouvez copier database.db à partir du périphérique.
11
Isura Amarasinghe

Le moyen le plus simple (une seule étape) 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
11
Alex P.

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

Une autre méthode consiste à extraire le fichier via adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
10
Nguyen Minh Binh

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

A 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

4
Khairul Alam Licon

Sur un rooted device, la solution correcte 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 originale fonctionnait, mais chmod renverrait un répertoire inconnu. Le fait de changer la commande chmod en/data/data/* donnait accès à tous les sous-dossiers du répertoire de données depuis DDMS dans Intellij. Je suppose que la même solution est vraie pour Eclipse DDMS.

UPDATE 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 le périphérique. Je pouvais voir le dossier de données, mais essayer de l'ouvrir ne fonctionnerait pas. Comme mentionné en ligne à d'autres endroits, expand + disparaîtrait puis réapparaîtrait peu de temps après (remarque, des solutions sur le Web prétendent autoriser l'accès à ces dossiers sans enracinement. ne sais pas si je préfère ne pas root de toute façon ((je préférerais pouvoir le faire manuellement plutôt que de compter sur une application ou une invite de commande pour me donner mes solutions))). J'ai enraciné mon 6 et ai essayé DDMS encore. 

À ce stade, il m'a montré le dossier de données et je pouvais développer le dossier et voir le com. répertoires, mais je ne pouvais en ouvrir aucun. C'est à ce moment 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 postée:

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

Cette solution a semblé fonctionner, mais seulement 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 moment, puis je me suis dit pourquoi ne pas l'essayer simplement dans 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 du répertoire de mon application pour confirmer que le fichier .csv était correctement enregistré.

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

(pour ajouter à cela un peu plus loin, curieusement, les autorisations ne sont pas passées au fichier .csv qui est passé dans le répertoire files. - .. juste FYI)

4
lol2dubs

Pour sauvegarder d'Android sur le bureau

Ouvrez la ligne de commande cmd et exécutez la commande suivante: Adb backup -f C:\Intel\xxx.ab -noapk your.app.package . Ne saisissez pas de mot de passe et cliquez sur Sauvegarder mes données . Assurez-vous de ne pas enregistrer sur le lecteur C racine. Vous pouvez ê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 naviguez jusqu'au dossier où vous l'avez extrait.
  3. lancez ceci avec vos propres noms de fichiers: Java -jar abe.jar décompressez c:\Intel\xxx.ab c:\Intel\xxx.tar
3
RonTLV

adb backup n'a pas fonctionné pour moi, alors voici ce que j'ai fait (Xiaomi Redmi Note 4X, Android 6.0):
1. Accédez à 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 doit être localisé d’une manière ou d’une autre. Le mien se trouvait à l'adresse / MIUI/backup/AllBackup/_FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_.
7. Ensuite, j'ai suivi les étapes de cette réponse by RonTLV pour convertir le fichier de sauvegarde (.bak dans mon cas) en tar (copie 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 naviguez jusqu'au dossier où vous l'avez extrait.
c) lancez ceci avec vos propres noms de fichiers: Java -jar abe.jar décompressez c:\Intel\xxx.ab c:\Intel\xxx.tar
"

1
Russian

Une des méthodes 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, à moins de rooter 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 une mémoire externe sans nécessiter de racine.

1
waqaslam

vous pouvez copier ce fichier de base de données dans l’Explorateur Eclipse (par exemple, sdcard ou PC) et utiliser sqlite pour accéder à ce fichier et le mettre à jour.

0
Vito

peut être pour accéder à ce dossier vous avez besoin de droits d’administrateur.

donc vous avez deux options: - 

  1. rootez votre appareil et ensuite essayez d'accéder à ce dossier
  2. utiliser un émulateur

p.s. : si vous utilisez l’une des deux options ci-dessus, vous pouvez accéder à ce dossier en procédant comme suit

ouvrez la perspective DDMS -> votre appareil -> (sélectionnez l’Explorateur de fichiers parmi 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 récupérer votre dossier

0
user3829503

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

Voici du code que vous pouvez utiliser pour copier le fichier de données/données dans 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" />
0
live-love

La question qui se pose est la suivante: comment accéder à un dossier de données dans un périphérique Android?


Si le périphérique Android est Bluestacks * Root Browser APK montre data/data/..


Essayez de télécharger Root Browserfrom https://apkpure.com/root-browser/com.jrummy.root.browserfree


Si le fichier est un fichier texte , Vous devez cliquer sur "Ouvrir en tant que", "Fichier texte", "Ouvrir en tant que", "Editeur de texte RB". 

0

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 ne voudrez peut-être pas consulter la structure de fichiers de votre App-Directory. Pour cela, suivez les étapes ci-dessous:

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

La mention Android-Studio de Shahidul ( https://stackoverflow.com/a/44089388/1256697 ) fonctionne également. Pour ceux qui ne voient pas l'option DeviceFile Explorer dans le menu: Assurez-vous d'ouvrir le répertoire/Android dans Android Studio. Par exemple. Les utilisateurs réactifs ont ce à l'intérieur de leur Dossier-Projet à la même place que le répertoire/ios.

0
suther