如何使用Android Studio查看共享首选项文件?

时间:2014-05-13 15:35:40

标签: android android-studio sharedpreferences

我使用共享偏好设置为我的应用存储特定值。我想看看信息实际存储在手机上的文件。我在Eclipse上找到了许多方法,但是我在Android Studio上进行了调试。我的手机扎根了。我读到有root权限对于读取这些类型的文件很重要。如果没有办法,那么我将查找如何通过我的程序访问信息,然后将其输出到log cat。但是,希望我可以直接在手机上查看文件,因为它更简单。感谢。

15 个答案:

答案 0 :(得分:74)

在Android Studio中,启动Android设备监视器,转到文件资源管理器,然后浏览" / data / data /<您的包名称> / shared_prefs /"。你会在那里找到XML ......你也可以复制它以供检查。

如果您使用的是非root设备,则无法直接在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

之后,您可以使用adb从/ sdcard目录中提取文件。

答案 1 :(得分:39)

Stetho

在应用程序处于调试模式时,您可以使用http://facebook.github.io/stetho/访问共享首选项。 无根

特点:

  1. 查看和修改共享偏好
  2. 查看和编辑sqLite db
  3. 查看视图heirarchy
  4. 监控http网络请求
  5. 从设备屏幕查看流
  6. 等......
  7. enter image description here

    基本设置:

      build.gradle中的
    1. 添加compile 'com.facebook.stetho:stetho:1.5.0'
    2. 在应用程序的onCreate()中添加Stetho.initializeWithDefaults(this);
    3. 在电脑上的Chrome中
    4. 转到chrome://inspect/
    5. 更新:Flipper

      Flipper是来自facebook的新版本。它有更多的功能,但是当时写入只适用于Mac,配置稍微困难,缺乏数据库调试,同时提供极端增强的布局检查器

      您也可以使用@Jeffrey建议:

        
          
      • 打开设备文件资源管理器(屏幕右下角)
      •   
      • 转到data / data / com.yourAppName / shared_prefs
      •   

答案 2 :(得分:27)

Android Studio 3.x 的设备文件资源管理器非常适合浏览您的首选项文件,缓存项或数据库。

  1. 共享的首选项 / data / data // shared_prefs目录

enter image description here

看起来像这样

enter image description here

要打开设备文件资源管理器,请执行以下操作:

单击视图>工具窗口>设备文件资源管理器,或单击工具窗口栏中的设备文件资源管理器按钮。

enter image description here

答案 3 :(得分:14)

您可以简单地创建一个特殊的Activity用于调试目的:

@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.

答案 4 :(得分:8)

Android Studio - &gt;设备文件资源管理器(右下角) - &gt;数据 - &gt;数据 - &gt; {package.id} - &gt;共享首选项

注意:您需要将移动设备连接到android studio,并且所选应用程序应处于调试模式

答案 5 :(得分:7)

这是一篇旧帖子,但我在这里应该提出一个图形答案,因为问题是关于使用Android Studio查看SharedPreferences.xml。所以这就是它。

转到工具 - &gt; Android设备监视器。单击打开设备监视器。

enter image description here

然后,您需要在设备监视器中选择“文件资源管理器”选项卡。找到数据文件夹并在其中找到另一个数据文件夹。它将包含一个具有应用程序包名称的文件夹,并且将包含所需的SharedPreferences.xml

enter image description here

选择SharedPreferences.xml文件,然后使用上图中右上角标记的按钮将文件拉出并保存到计算机中。

我使用过设备模拟器。

答案 6 :(得分:5)

另一种简单的方法是在手机上使用root Explorer应用程序。

然后转到/data/data/package name/shared preferences folder/name of your preferences.xml,您可以使用ES File explorer,然后转到设备的root,而不是sd card

答案 7 :(得分:3)

单个或多个共享首选项文件

如果您有多个Shared Preference个文件,那么这里是展示所有文件的好方法,但您也可以传入1个文件名。

  • 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﹕ ------------------------------------

答案 8 :(得分:3)

Android Studio 3 中:

  • 打开设备文件资源管理器(在屏幕的右下方)。
  • 转到data / data / com.yourAppName / shared_prefs。

或使用Android Debug Database

答案 9 :(得分:2)

插入一些数据后,在模拟器中运行应用程序,只需关闭应用程序。

现在打开DDMS或Android Monitor并选择您的模拟器,在右侧您可以看到文件资源管理器,在其中查找Data文件夹并查找您创建的应用程序包,您可以找到共享首选项文件打开它,您可以看到XML文件,单击它并单击右上角设备按钮中的拉文件。

XML文件将保存在您想要的位置,然后您可以使用任何编辑器(如记事本++)打开它,并可以查看您输入的数据。

答案 10 :(得分: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

  4. 中查看

答案 11 :(得分:0)

如果您使用的是仿真器,则可以使用以下命令在终端上查看sharedPrefs.xml文件:

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

之后,如果您不想让虚拟设备保持根目录,则可以使用adb unroot

答案 12 :(得分:0)

要在android studio中打开共享的(?i)(CREATE TABLE|TIMESTAMP)

  

从右侧打开设备资源管理器文件-data> data>> shared_prefs

找到附件图像以获取更多描述

答案 13 :(得分:0)

在设备文件资源管理器中,遵循以下路径:-

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

答案 14 :(得分:0)

Mac 中 Android Emulator 的共享首选项文件路径

/Users/"UserName"/Documents/AndroidStudio/DeviceExplorer/"EmulatorName"/data/data/com.app.domain/shared_prefs/
相关问题