代码之家  ›  专栏  ›  技术社区  ›  an0

如何从adb shell检查SharedPreferences?

  •  47
  • an0  · 技术社区  · 16 年前

    Examining sqlite3 Databases from a Remote Shell

    8 回复  |  直到 10 年前
        1
  •  50
  •   an0    16 年前

    /data/data/your.app.package.name/shared_prefs ,文件名为your.app.pack.name_preferences.xml。当你发现内容只是一个关键价值图时,修改偏好真的很容易。

        2
  •  40
  •   joecks    10 年前

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

    $ adb shell
    $ run-as <app-package-id>
    $ cat /data/data/<app-package-id>/shared_prefs/prefs.xml
    

    请注意,首选项可能会存储在另一个文件中,这样更好

    $ ls /data/data/<app-package-id>/shared_prefs/
    
        3
  •  12
  •   friederbluemle    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/
    

    刚刚设置 APP_ID 到您的应用程序id。

    请注意,这假设您正在使用共享首选项的默认文件名,如从以下位置获得的 PreferenceManager.getDefaultSharedPreferences(context) adb root

        4
  •  5
  •   eleven    6 年前

    辅助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
    }
    
        5
  •  4
  •   CFL_Jeff    8 年前

    exec-out

    adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
    
        6
  •  1
  •   Shiv Buyya    8 年前

    首先从设备中提取共享首选项文件。这需要root权限。

    adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml
    

    现在MyKeys.xml存储在系统的当前目录中。

    通过以下方式修改值

    vim MyKeys.xml
    

    编辑文件后,保存更改并推送到设备。

    adb push MyKeys.xml /data/data/org.test/shared_prefs/MyKeys.xml
    

    验证您的更改

    adb shell
    cat /data/data/org.test/shared_prefs/MyKeys.xml
    
        7
  •  1
  •   user2233706    5 年前

    如果您正在使用 shared_preferences 对于Flutter,文件是 /data/data/your.app.package.name/shared_prefs/FlutterSharedPreferences.xml

        8
  •  0
  •   kosiara - Bartosz Kosarzycki    5 年前

    如果你愿意 来自adb 脚本,请参阅如何在Android模拟器上获取root here

    here

    到电话。

    adb shell
    su
    cp /data/data/com.your.package.name/shared_prefs/com.your.package.name_preferences.xml /storage/emulated/0/
    adb pull /storage/emulated/0/com.your.package.name_preferences.xml
    nano com.your.package.name_preferences.xml
    adb push com.your.package.name_preferences.xml /storage/emulated/0/com.your.package.name_preferences.xml
    cp /storage/emulated/0/com.your.package.name_preferences.xml /data/data/com.your.package.name/shared_prefs/com.your.package.name_preferences.xml
    

    别忘了