如何使用Android Studio查看共享偏好设置文件?

我正在使用共享首选项来存储我的应用程序的某些值。 我想查看信息实际存储在手机上的文件。 我发现有很多方法可以在Eclipse上执行此操作,但我正在Android Studio上进行debugging。 我的手机已经扎根。 我读过具有根访问权限对于读取这些types的文件非常重要。 如果没有办法,那么我将查找如何通过我的程序访问信息,然后输出到日志猫。 不过,我希望可以直接在手机上查看文件,因为它更简单。 谢谢。

从Android Studio启动Android设备监视器,进入文件资源pipe理器,然后浏览“/ data / data / <您的软件包的名称> / shared_prefs /”。 你会发现那里的XML …也可以复制它进行检查。

如果您的设备不是固定的,则无法直接从Android Studio执行此操作。 但是,只要您的应用程序是debugging版本,就可以使用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提取文件。

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

特征:

  1. 查看和编辑sharedpreferences
  2. 查看和编辑sqLite db
  3. 查看视图heirarchy
  4. 监视httpnetworking请求
  5. 从设备的屏幕查看stream
  6. 和更多….

在这里输入图像说明

基本设置:

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

你可以简单的创build一个特殊的Activity来进行debugging:

 @SuppressWarnings("unchecked") public void loadPreferences() { 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; } // create a TextView with printVal as text and add to layout } } 

另一种简单的方法是在手机上使用根资源pipe理器应用程序。

然后进入/data/data/package name/shared preferences folder/name of your preferences.xml ,您可以使用ES文件资源pipe理器 ,并转到您的设备的root ,而不是sd card

这是一个旧post,但我应该在这里提供一个graphics化的答案,因为问题是关于使用Android Studio查看SharedPreferences.xml 。 所以在这里。

转至工具 – > Android设备监视器。 通过点击打开设备监视器。

在这里输入图像说明

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

在这里输入图像说明

selectSharedPreferences.xml文件,然后使用上图右上angular标记的button将文件SharedPreferences.xml到计算机中。

我用过一个设备模拟器。

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

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

  • loadSharedPrefs("pref_name");

  • loadSharedPrefs("shared_pref1", "shared_pref2", "shared_pref3");

select以下一种以满足您的需求…

单types值

 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", "----------------------------------"); } 

多types值

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

我总是发现这些命令在控制台中很有用:

  1. find正确的文件名称

    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

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

现在打开DDMS或Android Monitor并select你的模拟器,在右边你可以看到文件资源pipe理器,在其中查找数据文件夹并查找你已经创build的应用程序包,这样你就可以find共享的首选项文件它可以看到XML文件,点击它并点击右上angular的设备button中的一个文件。

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