Как я могу просмотреть файл общих настроек с помощью 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.