如何使用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/访问您的共享首选项。; 无根
特征:
- 查看和编辑sharedpreferences
- 查看和编辑sqLite db
- 查看视图heirarchy
- 监视httpnetworking请求
- 从设备的屏幕查看stream
- 和更多….
基本设置:
- 在build.gradle中添加
compile 'com.facebook.stetho:stetho:1.5.0'
- 在应用程序的onCreate()中添加
Stetho.initializeWithDefaults(this);
- 在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﹕ ------------------------------------
我总是发现这些命令在控制台中很有用:
-
find正确的文件名称
adb shell
ls /data/data/com.your.package/shared_prefs
-
获取文件到本地目录
adb pull /data/data/com.your.package/shared_prefs/the_file_you_want $local_dir
-
检查你的
$local_dir
。
插入一些数据后,在模拟器中运行应用程序,只需closures应用程序。
现在打开DDMS或Android Monitor并select你的模拟器,在右边你可以看到文件资源pipe理器,在其中查找数据文件夹并查找你已经创build的应用程序包,这样你就可以find共享的首选项文件它可以看到XML文件,点击它并点击右上angular的设备button中的一个文件。
XML文件将被保存在您想要的位置,然后您可以使用任何编辑器(如记事本++)打开它,并可以查看您input的数据。
- 如何在不缩放背景的情况下增加Androidbutton的命中区域?
- getMeasuredHeight和getHeight有什么区别?
- 没有API时如何获取Android电子市场数据?
- 如何发送HTTP POST请求并接收响应?
- 为什么removeOnGlobalLayoutListener会抛出一个NoSuchMethodError?
- android:如何从非activity / service类使用getApplication和getApplicationContext
- 在Android Studio 2.0中,在debugging模式下找不到方法的局部variables
- 无法findcom.google.android.gsf包
- 如何使用ViewFlipper移动到某个视图?