Как я могу просмотреть файл общих настроек с помощью Android Studio?


102

Я использую общие настройки для хранения определенных значений для своего приложения. Я хотел бы увидеть файл, в котором фактически хранится информация на моем телефоне. Я нашел много способов сделать это в Eclipse, но отлаживаю в Android Studio. Мой телефон рутирован. Я читал, что для чтения этих типов файлов важно иметь root-доступ. Если нет возможности, я посмотрю, как получить доступ к информации через мою программу, а затем выведу ее в журнал cat. Однако, надеюсь, я смогу просто просмотреть файл прямо на телефоне, так как это намного проще. Спасибо.


Установите ES File Explorer и включите корневой просмотр. После этого вы сможете открыть его прямо на телефоне.
— CurlyPaul

3
попробуйте использовать adb pull, чтобы загрузить файл на рабочий стол. adb pull /data/data/<packagename>/shared_prefs/prefs.xml
— Лал

2
ИЛИ перейдите в проводник и в дереве файлов найдите папку с данными вашего приложения в /data/data/com.your-package/shared_prefs. Файл настроек будет там в виде XML. Скопируйте его с устройства и наслаждайтесь. В правом верхнем углу окна проводника есть две иконки: одна с диском, а другая с мобильным телефоном. Эти кнопки позволят вам копировать файлы с телефона / эмулятора и обратно соответственно.
— Лал

1
По какой-то причине мой XML-файл prefs называется <PACKAGENAME> _preferences.xml
— JPM

Ответы:


96

Из Android Studio запустите Android Device Monitor, перейдите в проводник и найдите «/ data / data / <имя вашего пакета> / shared_prefs /». Вы найдете там XML ... а также можете скопировать его для проверки.

Если у вас нет рутированного устройства, это невозможно сделать прямо из Android Studio. Однако вы можете получить доступ к файлу, adb shellесли ваше приложение является отладочной версией.

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

После этого вы можете вытащить файл из каталога / sdcard с помощью adb.


Я не могу получить доступ к этой папке из Device Monitor. Требуется рут?
— Marian Klühspies

2
Второй метод работает для некорневых устройств. После копирования файла на SD-карту вы можете выйти из adb и запустить adb pull "/ sdcard / your_preferences_file", и вы получите XML-файл в текущем каталоге, который вы можете проверить.
— Bebop_

4
Вы действительно можете получить эту информацию из эмулятора без root, если вы можете отлаживать таким образом. Если вы используете физическое устройство, вам понадобится root.
— Booger

3
найдите файловый менеджер устройства в правом нижнем углу AndroidStudio. Он предоставит вам легкий доступ к файловой системе устройства
— Максим Тураев

2
Используя Device File Explorer, я могу получить доступ к общим настройкам без корневого доступа
— Деванш Маурья

78

Проводник файлов устройства, входящий в состав Android Studio 3.x , действительно хорош для изучения ваших файлов настроек, элементов кеша или базы данных.

  1. Общие настройки / данные / данные // каталог shared_prefs

введите описание изображения здесь

Это выглядит примерно так

введите описание изображения здесь

Чтобы открыть проводник файлов устройства:

Щелкните «Просмотр»> «Окна инструментов»> «Проводник файлов устройства» или нажмите кнопку «Проводник файлов устройства» на панели инструментов.

введите описание изображения здесь


13
Откройте проводник устройства (в правом нижнем углу экрана).
— Апит Джон Исмаил

47

Стето

Вы можете использовать http://facebook.github.io/stetho/ для доступа к вашим общим предпочтениям, пока ваше приложение находится в режиме отладки.Нет корня

функции:

  1. просматривать и редактировать общие настройки
  2. просматривать и редактировать базу данных sqLite
  3. просмотр просмотр иерархии
  4. отслеживать запросы сети http
  5. просматривать трансляцию с экрана устройства
  6. и больше....

введите описание изображения здесь

Базовая настройка:

  1. в build.gradle добавить compile 'com.facebook.stetho:stetho:1.5.0'
  2. в onCreate () приложения добавьте Stetho.initializeWithDefaults(this);
  3. в Chrome на вашем ПК перейдите в chrome: // inspect /

ОБНОВЛЕНИЕ: Flipper

Флиппер - это более новая альтернатива от facebook. У него больше функций, но на данный момент он доступен только для Mac, немного сложнее в настройке и в нем отсутствует отладка базы данных, но при этом есть чрезвычайно улучшенный инспектор макета.

Вы также можете использовать предложение @Jeffrey:

  • Откройте проводник устройства (в правом нижнем углу экрана)
  • Перейдите в data / data / com.yourAppName / shared_prefs

Может ли это работать на эмуляторах? Я не могу показаться , чтобы сделать его работу
— EduardoMaia

@EduardoMaia Так и должно быть. Использую с эмулятором каждый день. Вы можете создать вопрос со скриншотами, поэтому я постараюсь вам помочь.
— Максим Тураев

@EduardoMaia Вы можете попробовать сделать следующее: 1. Клонировать репозиторий facebook stetho. 2. Импортируйте этот проект в ПОСЛЕДНЮЮ версию Android Studio (Файл-> Импорт -> «выбрать settings.gradle») 3. Согласитесь на обновление плагина gradle. 4. Запустите эмулятор Android (в моем случае API 24). 5. Запустите stetho-sample (выберите его в меню конфигурации запуска рядом с зеленой стрелкой 6. На вашем ПК откройте последнюю версию браузера Chrome 7. перейдите по chrome: // проверьте адрес 8. выберите свой эмулятор в списке 9. В открывшемся окне перейдите на вкладку «Ресурсы» 10. Найдите общие настройки в меню LocalStorage с левой стороны 11.
— Максим Тураев

Вчера я исправил свою проблему, не просматривая общие настройки. Но я попробую это пошагово в другой раз. Спасибо.
— EduardoMaia

14

Вы можете просто создать специальное действие для отладки:

@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

Другие отрицали это. Они сказали, что это должен быть отдельный ответ, поэтому я сформулировал его как новый ответ. Изначально я только что отредактировал ваш ответ, потому что смог сделать то же самое, только когда увидел ваш ответ.
— Кристофер Ручински,

Хорошо :-) да, мне пришло в голову, что после этого он должен был быть просмотрен другими
— cYrixmorten

13

Android Studio -> Device File Explorer (правый нижний угол) -> data -> data -> {package.id} -> shared-prefs

Примечание: вам необходимо подключить мобильное устройство к студии Android, и выбранное приложение должно быть в режиме отладки.


10

Это старый пост, но я хотел бы поставить здесь графический ответ, так как вопрос касается просмотра SharedPreferences.xmlиспользования Android Studio. Итак, поехали.

Перейдите в Инструменты -> Монитор устройств Android. Откройте монитор устройства, щелкнув по нему.

введите описание изображения здесь

Затем вам нужно выбрать вкладку File Explorer в мониторе устройства. Найдите папку с данными и найдите внутри нее другую папку с данными. В нем будет папка с названием вашего пакета приложения и там будет желаемое SharedPreferences.xml.

введите описание изображения здесь

Выберите SharedPreferences.xml файл, а затем извлеките и сохраните файл на своем компьютере, используя кнопку, отмеченную в правом верхнем углу изображения выше.

Я использовал эмулятор устройства.


1
Благодаря вашему сообщению я узнал о developer.android.com/studio/debug/device-file-explorer, который представляет собой новый способ сделать то же самое, что вы здесь объясняете.
— malarres

Приятно осознавать, что могу помочь! Добро пожаловать.
— Реаз Муршед

4

Один или несколько файлов общих настроек

Если у вас несколько Shared Preferenceфайлов, то вот хороший способ показать их все, но вы также можете просто передать одно имя файла.

  • loadSharedPrefs("pref_name");

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

Выберите один из следующих вариантов в соответствии со своими потребностями ...

Однотипные значения

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

}

Множественные значения

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

}

}

Выход Logcat

Мои Shared Preferenceзначения все String, но это результат с использованием любого из двух методов выше ...

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

Другой простой способ - использовать приложение root explorer на вашем телефоне.

Затем перейдите к /data/data/package name/shared preferences folder/name of your preferences.xml, вы можете использовать ES File explorer , и перейдите к rootсвоему устройству, а не sd card.


1
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением - вы всегда можете комментировать свои собственные сообщения, и как только у вас будет достаточная репутация, вы сможете комментировать любое сообщение . - Из
— отзыва

@LucaDetomi, ты знаешь, что я отсюда
— ухожу

Ваш ответ отмечен как слишком короткий. Ответы должны содержать детали, которые позволят пользователям понять, «почему» это может быть хороший ответ, а может быть, и лучший. Я предлагаю вам добавить больше деталей, которые помогут понять принципы и, возможно, адаптировать их к другим аналогичным вопросам
— Лука Детоми

4

Чтобы открыть общий доступ preferenceв студии Android

Откройте файл проводника устройства с правой стороны - данные> данные>> shared_prefs

найдите прикрепленное изображение для более подробного описания



2

После вставки данных запустите приложение в эмуляторе, просто закройте приложение.

Теперь откройте DDMS или Android Monitor и выберите свой эмулятор, справа вы увидите проводник, найдите в нем папку Data и найдите пакет приложения, который вы создали, в котором вы можете найти открытый файл общих настроек. На нем вы можете увидеть XML-файл, щелкните его и нажмите кнопку «Вытащить файл» с помощью кнопки устройства в правом верхнем углу.

XML-файл будет сохранен в желаемом месте, затем вы сможете открыть его с помощью любого редактора, например notepad ++, и просмотреть введенные вами данные.


В Android Studio 3.0 я нашел его в Device File Explorer > data> data> (package name)> shared_prefs> (package name) _preferences.xml
— Josselin

2

В проводнике файлов устройства следуйте указанному ниже пути: -

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

1

Я всегда считаю эти команды полезными в консоли:

  1. Найдите правильное имя файла

    adb shell

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

  2. Получите файл в локальный каталог

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

  3. Проверьте это в своем $local_dir.


1

Если вы используете эмулятор, вы можете увидеть sharedPrefs.xmlфайл на терминале с помощью следующих команд:

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

после этого вы можете использовать, adb unrootесли не хотите, чтобы виртуальное устройство оставалось рутированным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.