Comment afficher le fichier de préférences partagées à l'aide d'Android Studio?


101

J'utilise des préférences partagées pour stocker certaines valeurs pour mon application. Je voudrais voir le fichier où les informations sont réellement stockées sur mon téléphone. J'ai trouvé de nombreuses façons de le faire sur Eclipse, mais je débogue sur Android Studio. Mon téléphone est enraciné. J'ai lu qu'il est important d'avoir un accès root pour lire ces types de fichiers. S'il n'y a aucun moyen, alors je chercherai comment accéder aux informations via mon programme, puis je les afficherai dans le journal cat. J'espère cependant que je pourrai simplement afficher le fichier directement sur le téléphone, car il est beaucoup plus simple. Merci.


Installez ES File Explorer et activez la navigation root. Vous pourrez alors l'ouvrir directement sur le téléphone.
CurlyPaul

3
essayez d'utiliser adb pull pour récupérer le fichier sur le bureau. adb pull /data/data/<packagename>/shared_prefs/prefs.xml
Lal

2
OU allez dans l'explorateur de fichiers et dans l'arborescence de fichiers, recherchez le dossier de données de votre application sous /data/data/com.your-package/shared_prefs. Le fichier de préférences sera là, sous forme de XML. Copiez-le de l'appareil et profitez-en. Dans le coin supérieur droit de la vue Explorateur de fichiers, il y a deux boutons d'icône - un avec un disque et un avec un téléphone mobile. Ces boutons vous permettront de copier des fichiers depuis et vers le téléphone / émulateur, respectivement.
Lal

1
Pour une raison quelconque, mon fichier xml prefs s'appelle <PACKAGENAME> _preferences.xml
JPM

Réponses:


95

Depuis Android Studio, démarrez Android Device Monitor, accédez à l'Explorateur de fichiers et parcourez "/ data / data / <nom de votre package> / shared_prefs /". Vous y trouverez le XML ... et vous pouvez également le copier pour inspection.

Si vous disposez d'un appareil non rooté, il n'est pas possible de le faire directement depuis Android Studio. Cependant, vous pouvez accéder au fichier adb shelltant que votre application est la version de débogage.

adb shell
run-as your.app.id
chmod 777 shared_prefs/your.app.id_preferences.xml
exit # return to default user
cp /data/data/your.app.id/shared_prefs/your.app.id_preferences.xml /sdcard

Après cela, vous pouvez extraire le fichier du répertoire / sdcard avec adb.


Je ne peux pas accéder à ce dossier depuis Device Monitor. La racine est-elle requise?
Marian Klühspies

2
La deuxième méthode fonctionne pour les appareils non rootés. Après avoir copié le fichier sur la carte SD, vous pouvez quitter adb et exécuter adb pull "/ sdcard / your_preferences_file" et vous obtiendrez un fichier xml dans votre répertoire actuel que vous pourrez inspecter.
Bebop_

4
Vous pouvez en fait récupérer ces informations à partir d'un émulateur sans racine, si vous pouvez déboguer de cette façon. Si vous êtes sur un appareil physique, vous aurez besoin de root.
Booger

3
recherchez l'explorateur de fichiers de l'appareil dans le coin inférieur droit d'AndroidStudio. Il vous fournira un accès facile au système de fichiers de l'appareil
Maksim Turaev

2
En utilisant Device File Explorer, je peux accéder aux préférences partagées sans accès root
Devansh Maurya

77

L'Explorateur de fichiers de périphériques qui fait partie d' Android Studio 3.x est vraiment bon pour explorer vos fichiers de préférences, vos éléments de cache ou votre base de données.

  1. Préférences partagées / data / data // répertoire shared_prefs

entrez la description de l'image ici

Ça ressemble à quelque chose comme ça

entrez la description de l'image ici

Pour ouvrir l'explorateur de fichiers de périphérique:

Cliquez sur Affichage> Fenêtres d'outils> Explorateur de fichiers de périphériques ou cliquez sur le bouton Explorateur de fichiers de périphériques dans la barre de fenêtres d'outils.

entrez la description de l'image ici


13
Ouvrez l'Explorateur de fichiers de périphérique (en bas à droite de l'écran).
Apit John Ismail

47

Stétho

Vous pouvez utiliser http://facebook.github.io/stetho/ pour accéder à vos préférences partagées pendant que votre application est en mode débogage. Pas de racine

fonctionnalités:

  1. afficher et modifier les préférences partagées
  2. afficher et modifier la base de données sqLite
  3. voir voir heirarchy
  4. surveiller les requêtes réseau http
  5. afficher le flux depuis l'écran de l'appareil
  6. et plus....

entrez la description de l'image ici

Configuration de base:

  1. dans le build.gradle ajouter compile 'com.facebook.stetho:stetho:1.5.0'
  2. dans onCreate () de l'application, ajoutez Stetho.initializeWithDefaults(this);
  3. dans Chrome sur votre PC, accédez au chrome: // inspecter /

MISE À JOUR: Flipper

Flipper est une nouvelle alternative de Facebook. Il a plus de fonctionnalités mais pour le moment, l'écriture n'est disponible que pour Mac, légèrement plus difficile à configurer et manque de débogage de la base de données, tout en offrant un inspecteur de mise en page extrêmement amélioré

Vous pouvez également utiliser la suggestion @Jeffrey:

  • Ouvrez l'explorateur de fichiers de périphérique (en bas à droite de l'écran)
  • Accédez à data / data / com.yourAppName / shared_prefs

Cela peut-il fonctionner sur les émulateurs? Je n'arrive pas à le faire fonctionner
EduardoMaia

@EduardoMaia Ça devrait. Je l'utilise avec émulateur tous les jours. Vous pouvez créer une question avec des captures d'écran, je vais donc essayer de vous aider.
Maksim Turaev

@EduardoMaia Vous pouvez essayer de faire ce qui suit: 1. Clonez le référentiel facebook stetho. 2. Importez ce projet dans DERNIER Android Studio (Fichier-> Importer -> "choisissez settings.gradle") 3. acceptez de mettre à jour le plugin gradle. 4. Démarrez Android Emulator (dans mon cas, l'API 24) 5. Lancez stetho-sample (sélectionnez-le dans le menu de configuration d'exécution à côté de la flèche verte 6. Sur votre PC, ouvrez le dernier navigateur Chrome 7. allez par chrome: // inspectez l'adresse 8. Choisissez votre émulateur dans la liste 9. Dans la fenêtre ouverte, allez dans l'onglet Ressources 10. Trouvez vos préférences partagées dans le menu LocalStorage sur le côté gauche 11. Dans l'application jouer avec le drapeau booléen
Maksim Turaev

J'ai résolu mon problème hier sans avoir besoin de voir les préférences partagées. Mais je vais essayer cela étape par étape un autre jour. Merci.
EduardoMaia

14

Vous pouvez simplement créer une activité spéciale à des fins de débogage:

@SuppressWarnings("unchecked")
public void loadPreferences() {
// create a textview with id (tv_pref) in Layout.
TextView prefTextView;
prefTextView = (TextView) findViewById(R.id.tv_pref);
    Map<String, ?> prefs = PreferenceManager.getDefaultSharedPreferences(
            context).getAll();
    for (String key : prefs.keySet()) {
        Object pref = prefs.get(key);
        String printVal = "";
        if (pref instanceof Boolean) {
            printVal =  key + " : " + (Boolean) pref;
        }
        if (pref instanceof Float) {
            printVal =  key + " : " + (Float) pref;
        }
        if (pref instanceof Integer) {
            printVal =  key + " : " + (Integer) pref;
        }
        if (pref instanceof Long) {
            printVal =  key + " : " + (Long) pref;
        }
        if (pref instanceof String) {
            printVal =  key + " : " + (String) pref;
        }
        if (pref instanceof Set<?>) {
            printVal =  key + " : " + (Set<String>) pref;
        }
        // Every new preference goes to a new line
        prefTextView.append(printVal + "\n\n");     
    }
}
// call loadPreferences() in the onCreate of your Activity.

C'était très utile, mais cela ne correspondait pas tout à fait à mes besoins. J'ai ajouté une modification qui permet de partager plusieurs fichiers de préférences
Christopher Rucinski

Merci, j'ai juste du mal à comprendre comment accepter les modifications
cYrixmorten

Cela a été nié par d'autres. Ils ont dit que ce devrait être sa propre réponse, alors je l'ai présentée comme une nouvelle réponse. Au départ, je viens de modifier votre réponse parce que je n'ai pu faire ce que j'ai fait que lorsque j'ai vu votre réponse.
Christopher Rucinski

Très bien :-) ouais m'est venu à l'
esprit

13

Android Studio -> Device File Explorer (coin inférieur droit) -> data -> data -> {package.id} -> shared-prefs

Remarque: vous devez connecter un appareil mobile au studio Android et l'application sélectionnée doit être en mode débogage


10

Ceci est un ancien article, mais je pensais que je devrais mettre une réponse graphique ici car la question concerne la visualisation de l' SharedPreferences.xmlutilisation d'Android Studio. Alors voilà.

Allez dans Outils -> Moniteur de périphérique Android. Ouvrez le moniteur de périphérique en cliquant dessus.

entrez la description de l'image ici

Ensuite, vous devez sélectionner l'onglet Explorateur de fichiers dans le moniteur de périphérique. Recherchez le dossier de données et recherchez un autre dossier de données à l'intérieur. Il contiendra un dossier portant le nom de votre dossier de candidature et il y aura le dossier souhaité SharedPreferences.xml.

entrez la description de l'image ici

Sélectionnez le SharedPreferences.xmlfichier, puis tirez et enregistrez le fichier sur votre ordinateur à l'aide du bouton marqué dans le coin supérieur droit de l'image ci-dessus.

J'ai utilisé un émulateur de périphérique.


1
Grâce à votre article, j'ai découvert developer.android.com/studio/debug/device-file-explorer, qui est la nouvelle façon de faire la même chose que vous expliquez ici.
malarres

C'est génial de savoir que je pourrais vous aider! De rien.
Reaz Murshed

4

Fichiers de préférences partagés uniques ou multiples

Si vous avez plusieurs Shared Preferencefichiers, alors voici un bon moyen de les afficher tous, mais vous pouvez également passer un nom de fichier.

  • loadSharedPrefs("pref_name");

  • loadSharedPrefs("shared_pref1", "shared_pref2", "shared_pref3");

Choisissez l'une des options suivantes en fonction de vos besoins ...

Valeurs de type unique

public void loadSharedPrefs(String ... prefs) {

    // Logging messages left in to view Shared Preferences. I filter out all logs except for ERROR; hence why I am printing error messages.

    Log.i("Loading Shared Prefs", "-----------------------------------");
    Log.i("----------------", "---------------------------------------");

    for (String pref_name: prefs) {

        SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
        for (String key : preference.getAll().keySet()) {

            Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
                  preference.getString(key, "error!"));

        }

        Log.i("----------------", "---------------------------------------");

    }

    Log.i("Finished Shared Prefs", "----------------------------------");

}

Valeurs de type multiple

public void loadSharedPrefs(String ... prefs) {

    // Define default return values. These should not display, but are needed
    final String STRING_ERROR = "error!";
    final Integer INT_ERROR = -1;
    // ...
    final Set<String> SET_ERROR = new HashSet<>(1);

    // Add an item to the set
    SET_ERROR.add("Set Error!");

    // Loop through the Shared Prefs
    Log.i("Loading Shared Prefs", "-----------------------------------");
    Log.i("------------------", "-------------------------------------");

    for (String pref_name: prefs) {

        SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
        Map<String, ?> prefMap = preference.getAll();

        Object prefObj;
        Object prefValue = null;

        for (String key : prefMap.keySet()) {

            prefObj = prefMap.get(key);

            if (prefObj instanceof String) prefValue = preference.getString(key, STRING_ERROR);
            if (prefObj instanceof Integer) prefValue = preference.getInt(key, INT_ERROR);
            // ...
            if (prefObj instanceof Set) prefValue = preference.getStringSet(key, SET_ERROR);

            Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
                  String.valueOf(prefValue));

        }

        Log.i("------------------", "-------------------------------------");

    }

    Log.i("Loaded Shared Prefs", "------------------------------------");

}

}

Sortie Logcat

Mes Shared Preferencevaleurs sont toutes String, mais c'est la sortie en utilisant l'une des 2 méthodes ci-dessus ...

I/Loading Shared Prefs -----------------------------------
I/------------------﹕ -------------------------------------
I/Shared Preference : FAVORITE - 135397 Jurassic World
I/Shared Preference : FAVORITE - 87101 Terminator Genisys
I/Shared Preference : FAVORITE - 177677 Mission: Impossible  Rogue Nation
I/------------------﹕ -------------------------------------
I/Shared Preference : WATCHED - 177677 Mission: Impossible  Rogue Nation
I/Shared Preference : WATCHED - 157336 Interstellar
I/Shared Preference : WATCHED - 135397 Jurassic World
I/Shared Preference : WATCHED - 87101 Terminator Genisys
I/------------------﹕ -------------------------------------
I/Shared Preference : WILL_WATCH - 211672 Minions
I/Shared Preference : WILL_WATCH - 102899 Ant-Man
I/------------------﹕ -------------------------------------
I/Loaded Shared Prefs ------------------------------------

4

Un autre moyen simple consiste à utiliser une application d'exploration de racine sur votre téléphone.

Ensuite, allez dans /data/data/package name/shared preferences folder/name of your preferences.xml, vous pouvez utiliser ES File Explorer , et aller à la rootde votre appareil, pas sd card.


1
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message - vous pouvez toujours commenter vos propres articles, et une fois que vous avez une réputation suffisante, vous pourrez commenter n'importe quel article . - De l'avis
Luca Detomi

@LucaDetomi vous savez de quoi je suis hors d'ici
user5291072

Votre réponse a été signalée comme trop courte. Les réponses doivent contenir des détails permettant aux utilisateurs de comprendre «pourquoi» cela pourrait être une bonne réponse et peut-être la meilleure. Je vous suggère d'ajouter plus de détails qui aident à comprendre les principes et peut-être à l'adapter à d'autres problèmes similaires
Luca Detomi

4

Pour ouvrir partagé preferencedans Android Studio

Ouvrez le fichier de l'explorateur de périphériques à partir du côté droit - data> data>> shared_prefs

trouver l'image ci-jointe pour plus de description



2

Exécutez l'application dans Emulator après avoir inséré des données, fermez simplement l'application.

Maintenant, ouvrez le DDMS ou Android Monitor et sélectionnez votre émulateur, sur le côté droit, vous pouvez voir l'Explorateur de fichiers, recherchez le dossier Data et recherchez votre package d'application que vous avez créé, dans lequel vous pouvez trouver le fichier de préférences partagé ouvert il, vous pouvez voir le fichier XML, cliquez dessus et cliquez sur le bouton Extraire un fichier du périphérique dans le coin supérieur droit.

Le fichier XML sera enregistré à l'emplacement souhaité, vous pourrez ensuite l'ouvrir à l'aide de n'importe quel éditeur tel que notepad ++ et afficher les données que vous avez saisies.


Dans Android Studio 3.0 , je l'ai trouvé dans Device File Explorer > data> data> (nom du package)> shared_prefs> (nom du package) _preferences.xml
Josselin

2

Dans l'explorateur de fichiers de périphériques, suivez le chemin ci-dessous: -

/data/data/com.**package_name**.test/shared_prefs/com.**package_name**.test_preferences.xml

1

Je trouve toujours ces commandes utiles dans la console:

  1. Trouvez le nom de fichier correct

    adb shell

    ls /data/data/com.your.package/shared_prefs

  2. Récupérez le fichier dans le répertoire local

    adb pull /data/data/com.your.package/shared_prefs/the_file_you_want $local_dir

  3. Vérifiez-le dans votre $local_dir.


1

Si vous utilisez un émulateur, vous pouvez voir le sharedPrefs.xmlfichier sur le terminal avec ces commandes:

  • adb root
  • cat /data/data/<project name>/shared_prefs/<xml file>

après cela, vous pouvez utiliser adb unrootsi vous ne voulez pas garder le périphérique virtuel enraciné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.