Android: Просмотр файла SharedPreferences? - PullRequest
20 голосов
/ 10 мая 2011

В целях отладки мне нужно получить доступ к файлу общих настроек моего приложения. Насколько я знаю, я должен найти этот файл в / data / ... но я не могу получить доступ к папке / data из-за отсутствия разрешений. Это нормально? Есть ли еще способ получить доступ к файлу? (кроме, может быть, raeding его изнутри приложения?) Телефон не рутирован, и я также не хочу рутировать его. Спасибо за любую подсказку!

Ответы [ 2 ]

17 голосов
/ 10 мая 2011

Я сталкивался с этой проблемой в прошлом (не имея прав root в файловой системе, но мне нужен доступ к папке с данными приложений). Если у вас нет рутованного устройства или устройства разработчика, такого как ADP1, вы можете попробовать запустить приложение на эмуляторе, а затем получить доступ к файлам из «Проводника» в eclipse или DDMS.

РЕДАКТИРОВАТЬ # 1: Попробуйте использовать функцию getAll sharedPreferences и сохраните ее в файл, я посмотрю, смогу ли я собрать пример.

РЕДАКТИРОВАТЬ # 2: Пример кода, созданный из случайных образцов по сети, вероятно, не лучший способ сделать это, но я проверил его, и он работает. Записывает файл в корень вашей sdcard. Убедитесь, что у вас есть

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

установите в своем манифесте

private void saveSharedPreferences()
{
    // create some junk data to populate the shared preferences
    SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefEdit = prefs.edit();
    prefEdit.putBoolean("SomeBooleanValue_True", true);
    prefEdit.putInt("SomeIntValue_100", 100);
    prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
    prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
    prefEdit.commit();

    // BEGIN EXAMPLE
    File myPath = new File(Environment.getExternalStorageDirectory().toString());
    File myFile = new File(myPath, "MySharedPreferences");

    try
    {
        FileWriter fw = new FileWriter(myFile);
        PrintWriter pw = new PrintWriter(fw);

        Map<String,?> prefsMap = prefs.getAll();

        for(Map.Entry<String,?> entry : prefsMap.entrySet())
        {
            pw.println(entry.getKey() + ": " + entry.getValue().toString());            
        }

        pw.close();
        fw.close();
    }
    catch (Exception e)
    {
        // what a terrible failure...
        Log.wtf(getClass().getName(), e.toString());
    }
}

Источники Один Два Три

1 голос
/ 10 мая 2011

На телефоне без рута, к сожалению, нет хорошего способа получить доступ к папке / data. Вы можете попробовать создать файлы с MODE_WORLD_READABLE примерно так:

SharedPreferences myPrefs = this.getSharedPreferences("prefs", MODE_WORLD_READABLE);

, а затем попробуйте использовать adb pull для извлечения файла на рабочий стол.

adb pull /data/data/<packagename>/shared_prefs/prefs.xml

но ваш пробег может отличаться.

...