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

我使用共享首选项来存储应用程序的某些值。我想看到的文件,其中的信息实际上是存储在我的手机上。我找到了很多在 Eclipse 上实现这一点的方法,但是我正在 Android Studio 上进行调试。我的手机被植入了。我读到,拥有 root 访问权限对于读取这些类型的文件很重要。如果没有办法,那么我将查找如何通过我的程序访问信息,然后输出到日志猫。不过,希望我可以直接在手机上查看这个文件,因为它要简单得多。谢谢。

157942 次浏览

您可以简单地创建一个用于调试目的的特殊 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
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文件,那么这里有一个显示所有这些文件的好方法,但是您也可以只传入一个文件名。

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

另一个简单的方法是在手机上使用 root 浏览器应用程序。

然后转到 /data/data/package_name/shared_preferences_folder/name_of your_preferences.xml,你可以使用 文件浏览器,转到设备的 root,而不是 SD card

更新: Flipper

Flipper 是 facebook 的一个新的替代品,它有更多的功能,并且积极维护

斯泰索

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

特点:

  1. 查看和编辑共享首选项
  2. 查看和编辑 sqLitedb
  3. 视图视图层次结构视图层次结构
  4. 监视 http 网络请求
  5. 从设备屏幕上查看流
  6. 还有..。

enter image description here

基本设置:

  1. 加入 compile 'com.facebook.stetho:stetho:1.5.0'
  2. 在应用程序的 onCreate ()中添加 Stetho.initializeWithDefaults(this);
  3. 在你的电脑上的 Chrome 浏览器进入 铬://检查/

你也可以使用@Jeffrey 建议:

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

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

  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

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

现在打开 DDMS 或 Android Monitor 并选择你的模拟器,在右边你可以看到文件资源管理器,在其中寻找数据文件夹,并寻找你创建的应用程序包,因为你可以找到共享首选项文件打开它,你可以看到 XML 文件,点击它,然后点击从右上角的设备按钮拉一个文件。

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

这是一篇老文章,但我认为我应该在这里放一个图形化的答案,因为问题是关于使用 Android Studio 查看 SharedPreferences.xml。开始了。

进入工具-> Android 设备监视器。点击打开设备监视器。

enter image description here

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

enter image description here

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

我用了一个设备模拟器。

Android Studio-> Device File Explorer (右下角)-> data-> data-> { package.id }-> share-prefs

注意: 您需要连接移动设备到 android 工作室和选定的应用程序应在调试模式

Android Studio 3:

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

或使用 Android 调试数据库

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

  1. 共享偏好 /data/data//share _ prefs 目录

enter image description here

看起来像这样

enter image description here

打开设备文件资源管理器:

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

enter image description here

如果你正在使用一个模拟器,你可以通过以下命令看到终端上的 sharedPrefs.xml文件:

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

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

在 android 工作室中打开共享的 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/