Android:正在查看SharedPreferences文件?

问题描述 投票:20回答:3

出于调试目的,我需要访问应用程序的共享首选项文件。据我所知,我应该在/ data / ...中找到此文件,但是由于缺少权限,我无法访问/ data文件夹。这正常吗?还有办法访问文件吗? (除了可能是从应用程序内部将其删除?)电话没有植根,我也不想植根。感谢您的提示!

android preferences android-preferences
3个回答
17
投票

过去我曾遇到过此问题(对文件系统没有root权限,但需要访问应用程序数据文件夹)。如果您没有生根设备或开发人员设备(例如ADP1),则可以尝试在模拟器上运行应用程序,然后从Eclipse或DDMS中的“文件资源管理器”中访问文件。

编辑#1:尝试使用sharedPreferences的getAll函数并将其保存到文件中,我将查看是否可以将示例放在一起。

编辑#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());
    }
}

来源OneTwoThree


1
投票

不幸的是,在没有根目录的电话上,没有好的方法可以访问/ data文件夹。您可以尝试使用MODE_WORLD_READABLE创建文件,如下所示:

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

然后尝试使用adb pull将文件提取到桌面。

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

但是您的里程可能有所不同。


0
投票

您可以使用Stetho轻松访问和修改SharedPreferences数据。跟着下面提供的链接将其添加到您的android项目并查看数据。

http://facebook.github.io/stetho/

© www.soinside.com 2019 - 2024. All rights reserved.