我使用共享首选项来存储应用程序的某些值。我想看到的文件,其中的信息实际上是存储在我的手机上。我找到了很多在 Eclipse 上实现这一点的方法,但是我正在 Android Studio 上进行调试。我的手机被植入了。我读到,拥有 root 访问权限对于读取这些类型的文件很重要。如果没有办法,那么我将查找如何通过我的程序访问信息,然后输出到日志猫。不过,希望我可以直接在手机上查看这个文件,因为它要简单得多。谢谢。
您可以简单地创建一个用于调试目的的特殊 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.
从 Android Studio 启动 Android 设备监视器,进入文件资源管理器,浏览“/data/data/< name of your package >/share _ prefs/”。您可以在那里找到 XML... ... 还可以复制它以供检查。
如果您有一个非根设备,那么不可能直接从 Android Studio 做到这一点。但是,只要应用程序是调试版本,就可以使用 adb shell访问该文件。
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 目录中提取文件。
如果您有多个 Shared Preference文件,那么这里有一个显示所有这些文件的好方法,但是您也可以只传入一个文件名。
Shared Preference
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", "------------------------------------"); } }
我的 Shared Preference值都是 String,但这是使用以上两种方法中的任何一种的输出..。
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﹕ ------------------------------------
另一个简单的方法是在手机上使用 root 浏览器应用程序。
然后转到 /data/data/package_name/shared_preferences_folder/name_of your_preferences.xml,你可以使用 文件浏览器,转到设备的 root,而不是 SD card。
/data/data/package_name/shared_preferences_folder/name_of your_preferences.xml
root
SD card
Flipper 是 facebook 的一个新的替代品,它有更多的功能,并且积极维护
当应用程序处于调试模式时,可以使用 http://facebook.github.io/stetho/访问共享首选项
特点:
基本设置:
compile 'com.facebook.stetho:stetho:1.5.0'
Stetho.initializeWithDefaults(this);
打开设备文件资源管理器(屏幕右下角) 转到 data/data/com.yourAppName/shared_prefs
data/data/com.yourAppName/shared_prefs
我总是发现这些命令在控制台中很有用:
找到正确的文件名
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。
$local_dir
在插入一些数据后,在模拟器中运行应用程序,只需关闭应用程序。
现在打开 DDMS 或 Android Monitor 并选择你的模拟器,在右边你可以看到文件资源管理器,在其中寻找数据文件夹,并寻找你创建的应用程序包,因为你可以找到共享首选项文件打开它,你可以看到 XML 文件,点击它,然后点击从右上角的设备按钮拉一个文件。
XML 文件将保存在您所需的位置,然后您可以使用任何编辑器(如记事本 + +)打开它,并可以查看您输入的数据。
这是一篇老文章,但我认为我应该在这里放一个图形化的答案,因为问题是关于使用 Android Studio 查看 SharedPreferences.xml。开始了。
SharedPreferences.xml
进入工具-> Android 设备监视器。点击打开设备监视器。
然后,您需要在设备监视器中选择 File Explorer 选项卡。找到数据文件夹并在其中找到另一个数据文件夹。它将包含一个文件夹,其中包含应用程序包的名称,并且将有所需的 SharedPreferences.xml。
选择 SharedPreferences.xml文件,然后使用上图右上角标记的按钮将该文件拉出并保存到计算机中。
我用了一个设备模拟器。
Android Studio-> Device File Explorer (右下角)-> data-> data-> { package.id }-> share-prefs
注意: 您需要连接移动设备到 android 工作室和选定的应用程序应在调试模式
在 Android Studio 3:
或使用 Android 调试数据库
设备文件资源管理器是 Android Studio 3. x的一部分,非常适合用来浏览您的首选项文件、缓存项或数据库。
看起来像这样
打开设备文件资源管理器:
单击“查看”> “工具窗口”> “设备文件资源管理器”,或单击工具窗口栏中的“设备文件资源管理器”按钮。
如果你正在使用一个模拟器,你可以通过以下命令看到终端上的 sharedPrefs.xml文件:
sharedPrefs.xml
adb root
cat /data/data/<project name>/shared_prefs/<xml file>
之后,如果您不想保持虚拟设备的根,可以使用 adb unroot。
adb unroot
在 android 工作室中打开共享的 preference
preference
从右侧打开设备资源管理器文件-data > data > > share _ prefs
查找附加的图像以获得更多描述
在设备文件资源管理器中,按照下面的路径:-
/data/data/com.**package_name**.test/shared_prefs/com.**package_name**.test_preferences.xml
Mac 中 Android 模拟器的共享首选项文件路径
/Users/"UserName"/Documents/AndroidStudio/DeviceExplorer/"EmulatorName"/data/data/com.app.domain/shared_prefs/