Jak mogę wyświetlić plik wspólnych preferencji za pomocą Android Studio?

103

Używam wspólnych preferencji do przechowywania pewnych wartości dla mojej aplikacji. Chciałbym zobaczyć plik, w którym informacje są faktycznie przechowywane w moim telefonie. Znalazłem wiele sposobów, aby to zrobić w Eclipse, ale debuguję w Android Studio. Mój telefon jest zrootowany. Czytałem, że posiadanie uprawnień administratora jest ważne, aby czytać tego typu pliki. Jeśli nie ma sposobu, sprawdzę, jak uzyskać dostęp do informacji za pośrednictwem mojego programu, a następnie wyślę je do dziennika cat. Mam jednak nadzieję, że mogę po prostu wyświetlić plik bezpośrednio w telefonie, ponieważ jest to znacznie prostsze. Dzięki.

JayUser
źródło
Zainstaluj ES File Explorer i włącz przeglądanie root. Będziesz mógł wtedy otworzyć go bezpośrednio w telefonie.
CurlyPaul
3
spróbuj użyć adb pull, aby pobrać plik na pulpit. adb pull /data/data/<packagename>/shared_prefs/prefs.xml
Lal
2
LUB przejdź do eksploratora plików iw drzewie plików znajdź folder danych swojej aplikacji w /data/data/com.your-package/shared_prefs. Plik preferencji będzie tam w postaci XML. Skopiuj go z urządzenia i ciesz się. W prawym górnym rogu widoku Eksploratora plików znajdują się dwa przyciski ikon - jeden z dyskiem, a drugi z telefonem komórkowym. Te przyciski umożliwiają kopiowanie plików odpowiednio zi do telefonu / emulatora.
Lal
1
Z jakiegoś powodu mój plik prefs xml nazywa się <NAZWA PAKIETU> _preferences.xml
JPM

Odpowiedzi:

97

W Android Studio uruchom Android Device Monitor, przejdź do Eksploratora plików i przeglądaj „/ data / data / <nazwa pakietu> / shared_prefs /”. Znajdziesz tam XML ... a także możesz go skopiować do wglądu.

Jeśli masz niezrootowane urządzenie, nie możesz tego zrobić bezpośrednio z Android Studio. Możesz jednak uzyskać dostęp do pliku, o adb shellile Twoja aplikacja jest wersją debugowania.

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

Następnie możesz pobrać plik z katalogu / sdcard za pomocą adb.

George Dima
źródło
Nie mogę uzyskać dostępu do tego folderu z monitora urządzeń. Czy root jest wymagany?
Marian Klühspies
2
Druga metoda działa na urządzeniach nierootowanych. Po skopiowaniu pliku na kartę SD, możesz wyjść z adb i uruchomić adb pull "/ sdcard / your_preferences_file", a otrzymasz plik xml w bieżącym katalogu, który możesz sprawdzić.
Bebop_
4
Możesz faktycznie pobrać te informacje z emulatora bez rootowania, jeśli możesz debugować w ten sposób. Jeśli korzystasz z urządzenia fizycznego, będziesz potrzebować roota.
Booger
3
poszukaj eksploratora plików urządzenia w prawym dolnym rogu AndroidStudio. Zapewni łatwy dostęp do systemu plików urządzenia
Maksim Turaev
2
Korzystając z Eksploratora plików urządzeń, mogę uzyskać dostęp do wspólnych preferencji bez dostępu do roota
Devansh Maurya,
83

Eksplorator plików urządzeń, który jest częścią Android Studio 3.x, jest naprawdę dobry do przeglądania plików preferencji, elementów pamięci podręcznej lub bazy danych.

  1. Shared Preferences / data / data // katalog shared_prefs

wprowadź opis obrazu tutaj

Wygląda mniej więcej tak

wprowadź opis obrazu tutaj

Aby otworzyć Eksplorator plików urządzenia:

Kliknij Widok> Okna narzędzi> Eksplorator plików urządzenia lub kliknij przycisk Eksplorator plików urządzenia na pasku narzędzi.

wprowadź opis obrazu tutaj

phnmnn
źródło
13
Otwórz Eksplorator plików urządzenia (w prawym dolnym rogu ekranu).
Apit John Ismail
47

Stetho

Możesz użyć http://facebook.github.io/stetho/, aby uzyskać dostęp do wspólnych preferencji, gdy aplikacja jest w trybie debugowania.Bez korzenia

cechy:

  1. przeglądać i edytować wspólne preferencje
  2. przeglądaj i edytuj sqLite db
  3. zobacz zobacz heirarchię
  4. monitorować żądania sieciowe HTTP
  5. podgląd strumienia z ekranu urządzenia
  6. i więcej....

wprowadź opis obrazu tutaj

Podstawowe ustawienia:

  1. w pliku build.gradle dodaj compile 'com.facebook.stetho:stetho:1.5.0'
  2. w aplikacji onCreate () add Stetho.initializeWithDefaults(this);
  3. w Chrome na komputerze przejdź do chrome: // inspect /

AKTUALIZACJA: Flipper

Flipper to nowsza alternatywa dla Facebooka. Ma więcej funkcji, ale na razie pisanie jest dostępne tylko dla komputerów Mac, nieco trudniejsze w konfiguracji i brakuje mu debugowania bazy danych, a jednocześnie zapewnia niezwykle ulepszony inspektor układu

Możesz również skorzystać z sugestii @Jeffrey:

  • Otwórz Eksplorator plików urządzenia (w prawym dolnym rogu ekranu)
  • Przejdź do data / data / com.yourAppName / shared_prefs
Maksim Turaev
źródło
Czy to działa na emulatorach? Nie wydaje mi się, żeby to zadziałało
EduardoMaia,
@EduardoMaia Powinno. Na co dzień używam go z emulatorem. Możesz utworzyć pytanie ze zrzutami ekranu, więc postaram się Ci pomóc.
Maksim Turaev
@EduardoMaia Możesz spróbować wykonać następujące czynności: 1. Sklonuj repozytorium facebook stetho. 2. Zaimportuj ten projekt do najnowszego Android Studio (Plik-> Importuj -> "wybierz ustawienia.gradle") 3. Zgódź się na aktualizację wtyczki gradle. 4. Uruchom emulator Androida (w moim przypadku API 24) 5. Uruchom stetho-sample (wybierz go z menu uruchamiania konfiguracji obok zielonej strzałki 6. Na swoim komputerze otwórz najnowszą przeglądarkę Chrome 7. przejdź przez chrome: // sprawdź adres 8. wybierz emulator z listy 9. W otwartym oknie przejdź do zakładki Zasoby 10. Znajdź swoje wspólne preferencje w menu LocalStorage po lewej stronie 11. W aplikacji baw się flagą boolean
Maksim Turaev
Rozwiązałem wczoraj mój problem bez konieczności przeglądania udostępnionych ustawień. Ale spróbuję tego krok po kroku innego dnia. Dzięki.
EduardoMaia
15

Android Studio -> Eksplorator plików urządzenia (prawy dolny róg) -> dane -> dane -> {package.id} -> shared-prefs

Uwaga: musisz podłączyć urządzenie mobilne do Android Studio, a wybrana aplikacja powinna być w trybie debugowania

Niranjan
źródło
14

Możesz po prostu utworzyć specjalne działanie do celów debugowania:

@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.
cYrixmorten
źródło
Było to bardzo przydatne, ale nie do końca pasowało do moich potrzeb. Dodałem edycję, która pozwala na wiele współdzielonych plików preferencji
Christopher Rucinski
Dzięki, mam tylko kłopoty zastanawianie się, jak zaakceptować zmiany
cYrixmorten
Zostało to odrzucone przez innych. Powiedzieli, że to powinna być jego własna odpowiedź, więc umieściłem ją jako nową odpowiedź. Pierwotnie zredagowałem twoją odpowiedź, ponieważ mogłem zrobić to, co zrobiłem tylko wtedy, gdy zobaczyłem twoją odpowiedź.
Christopher Rucinski
W porządku :-) tak, przyszło mi do głowy po tym, że musiało zostać sprawdzone przez innych
cYrixmorten
10

To jest stary post, ale pomyślałem, że powinienem umieścić tutaj graficzną odpowiedź, ponieważ pytanie dotyczy przeglądania SharedPreferences.xml pomocą Android Studio. Więc oto jest.

Przejdź do Narzędzia -> Monitor urządzenia Android. Otwórz monitor urządzenia, klikając go.

wprowadź opis obrazu tutaj

Następnie musisz wybrać kartę Eksplorator plików w monitorze urządzenia. Znajdź folder danych i znajdź w nim inny folder danych. Będzie zawierał folder z nazwą pakietu aplikacji i żądany plik SharedPreferences.xml.

wprowadź opis obrazu tutaj

Wybierz SharedPreferences.xml plik, a następnie przeciągnij i zapisz plik na swoim komputerze za pomocą przycisku zaznaczonego w prawym górnym rogu powyższego obrazu.

Użyłem emulatora urządzenia.

Reaz Murshed
źródło
1
Dzięki Twojemu poście dowiedziałem się o developer.android.com/studio/debug/device-file-explorer, czyli nowym sposobie robienia tego samego, co tutaj opisujesz.
malarres
Dobrze wiedzieć, że mogę pomóc! Serdecznie zapraszamy.
Reaz Murshed
4

Pojedyncze lub wiele udostępnionych plików preferencji

Jeśli masz wiele Shared Preferenceplików, tutaj jest dobry sposób na pokazanie ich wszystkich, ale możesz też podać jedną nazwę pliku.

  • loadSharedPrefs("pref_name");

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

Wybierz jedną z poniższych opcji, aby dopasować ją do swoich potrzeb ...

Wartości pojedynczego typu

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", "----------------------------------");

}

Wartości wielu typów

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", "------------------------------------");

}

}

Wyjście Logcat

Moje Shared Preferencewartości to wszystkie String, ale to jest wynik przy użyciu jednej z 2 powyższych metod ...

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﹕ ------------------------------------
Christophera Rucińskiego
źródło
4

Innym prostym sposobem byłoby użycie aplikacji root explorer na telefonie.

Następnie przejdź do /data/data/package name/shared preferences folder/name of your preferences.xml, możesz użyć eksploratora plików ES i przejdź do rootswojego urządzenia, a nie sd card.

user5291072
źródło
1
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem - zawsze możesz komentować własne posty, a gdy zdobędziesz wystarczającą reputację , będziesz mógł skomentować każdy post . - Z recenzji
Luca Detomi
@LucaDetomi wiesz, co mnie tu nie ma
user5291072
Twoja odpowiedź została oznaczona jako zbyt krótka. Odpowiedzi powinny zawierać szczegóły, które pozwolą użytkownikom zrozumieć, „dlaczego” może to być dobra odpowiedź, a może najlepsza. Proponuję dodać więcej szczegółów, które pomogą zrozumieć zasady i być może dostosować je do innych podobnych zagadnień
Luca Detomi
4

Aby otworzyć udostępnione preferencew Android Studio

Otwórz plik eksploratora urządzeń z prawej strony - dane> dane>> shared_prefs

znajdź załączony obraz, aby uzyskać dokładniejszy opis

Shwetank
źródło
gdzie załączony obraz
Mahmoud Mabrok
3

W Android Studio 3 :

  • Otwórz Eksplorator plików urządzenia (w prawym dolnym rogu ekranu).
  • Przejdź do data / data / com.yourAppName / shared_prefs.

lub użyj bazy danych debugowania systemu Android

Jeffrey
źródło
3

W Eksploratorze plików urządzenia postępuj zgodnie z poniższą ścieżką: -

/data/data/com.**package_name**.test/shared_prefs/com.**package_name**.test_preferences.xml
neelkanth_vyas
źródło
2

Uruchom aplikację w Emulatorze po wstawieniu danych, po prostu zamknij aplikację.

Teraz otwórz DDMS lub Android Monitor i wybierz emulator, po prawej stronie możesz zobaczyć Eksplorator plików, poszukać w nim folderu Data i poszukać pakietu aplikacji, który utworzyłeś, w którym możesz znaleźć otwarty plik preferencji współdzielonych możesz zobaczyć plik XML, kliknąć go i kliknąć przycisk pobierania pliku z urządzenia w prawym górnym rogu.

Plik XML zostanie zapisany w żądanej lokalizacji, a następnie możesz go otworzyć za pomocą dowolnego edytora, takiego jak Notatnik ++, i możesz wyświetlić wprowadzone dane.

Naren
źródło
W Android Studio 3.0 znalazłem to w Eksploratorze plików urządzeń > dane> dane> (nazwa pakietu)> shared_prefs> (nazwa pakietu) _preferences.xml
Josselin
1

Te polecenia zawsze są przydatne w konsoli:

  1. Znajdź poprawną nazwę pliku

    adb shell

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

  2. Pobierz plik do katalogu lokalnego

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

  3. Sprawdź to w swoim $local_dir.

Róża
źródło
1

Jeśli używasz emulatora, możesz zobaczyć sharedPrefs.xmlplik na terminalu za pomocą tych poleceń:

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

po tym możesz użyć, adb unrootjeśli nie chcesz, aby urządzenie wirtualne było zrootowane.

Rodrirokr
źródło