如何检查adb shell中的SharedPreferences?

an0*_*an0 40 android adb android-sharedpreferences

既然我们可以从远程Shell中检查sqlite3数据库,是否可以检查adb shell中的SharedPreferences?因为在调试时从命令行检查和操作SharedPreferences会更方便.

或者以另一种方式,在什么文件中保存SharedPreferences,以及如何查看和修改这些文件?

an0*_*an0 46

好吧,我在上面提出问题之后找到了这个文件.(看起来有些问题公开激励我更加努力地自己搜索答案,因为我不希望亲爱的同伴把我视为一个懒惰的程序员.)

它是一个XML文件/data/data/your.app.package.name/shared_prefs,文件名是your.app.package.name_preferences.xml.当您发现内容只是一个键值映射时,很容易修改首选项.

  • adb pull <路径>,在您的设备上编辑,adb push <文件> <路径> (3认同)
  • 正如所问,你怎么能编辑它?!未安装 VI 和 Nano 编辑器。你怎么编辑它比??? (2认同)
  • 那么当你编写首选项时,你有标志mode_private怎么样...文件在哪里? (2认同)

joe*_*cks 36

如果应用程序是可调试的,您可以这样做:

$ adb shell
$ run-as <app-package-id>
$ cat /data/data/<app-package-id>/shared_prefs/prefs.xml
Run Code Online (Sandbox Code Playgroud)

请注意,首选项可能存储在另一个文件中,因此最好检查目录以找到它:

$ ls /data/data/<app-package-id>/shared_prefs/
Run Code Online (Sandbox Code Playgroud)

  • 在较新版本上,默认路径为“/data/user/0/&lt;app-package-id&gt;...” (4认同)
  • 您需要 root 访问权限才能工作,否则您将收到“权限被拒绝” (2认同)

fri*_*mle 10

我正在使用这个方便的单行程来拉取,在vim中编辑,并推送应用程序的共享首选项:

APP_ID=com.myapp; adb pull /data/data/${APP_ID}/shared_prefs/${APP_ID}_preferences.xml /tmp/${APP_ID}_preferences.xml && vim /tmp/${APP_ID}_preferences.xml && adb push /tmp/${APP_ID}_preferences.xml /data/data/${APP_ID}/shared_prefs/
Run Code Online (Sandbox Code Playgroud)

只需设置APP_ID您的应用程序ID即可.

请注意,这假设您使用的共享首选项的默认文件名,从中获取PreferenceManager.getDefaultSharedPreferences(context).此外,ADB需要以root模式运行:adb root


CFL*_*eff 5

如果其他人像我一样使用上述所有建议遇到​​“权限被拒绝”错误,您可能需要exec-out像这样使用:

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
Run Code Online (Sandbox Code Playgroud)

  • 需要可调试的包 (6认同)

ele*_*ven 5

助手bash功能

function adb-pull-prefs {
    # ${1} - app package
    # ${2} - prefs name
    adb exec-out run-as ${1} cat /data/data/${1}/shared_prefs/${2}.xml
}
Run Code Online (Sandbox Code Playgroud)