Для целей отладки мне необходимо получить доступ к файлу общих настроек моего приложения. Насколько я знаю, я должен найти этот файл в /data/... но я не могу получить доступ к папке /data через отсутствующие разрешения. Это нормально? Любой способ получить доступ к файлу? (кроме, может быть, изгоняет его из приложения?) Телефон не укоренен, и я также не хочу его корневать. Спасибо за любой намек!
Android: просмотр файла SharedPreferences?
Ответ 1
Я столкнулся с этой проблемой в прошлом (не имея права root на файловой системе, но нуждающейся в доступе к папке данных приложений). Если у вас нет корневого устройства или устройства разработчика, такого как ADP1, вы можете попробовать запустить приложение на эмуляторе, а затем получить доступ к файлам из "Проводника файлов" в eclipse или DDMS.
ИЗМЕНИТЬ № 1: Попробуйте использовать функцию getAll sharedPreferences и сохраните ее в файле, я увижу, могу ли я свернуть образец.
ИЗМЕНИТЬ № 2: Пример кода, созданный из случайных выборок вокруг сети, возможно, не лучший способ сделать это, но я его протестировал, и он работает. Он записывает файл в корень вашей SD-карты. Убедитесь, что у вас есть
<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());
}
}
Ответ 2
На нетронутом телефоне, к сожалению, нет хорошего доступа к папке /data. Вы можете попробовать создать файлы с помощью MODE_WORLD_READABLE
следующим образом:
SharedPreferences myPrefs = this.getSharedPreferences("prefs", MODE_WORLD_READABLE);
а затем попробуйте использовать adb pull
для извлечения файла на рабочий стол.
adb pull /data/data/<packagename>/shared_prefs/prefs.xml
но ваш пробег может отличаться.