How to examine SharedPreferences from adb shell?

前端 未结 8 698
傲寒
傲寒 2021-01-30 10:30

Now that we can Examining sqlite3 Databases from a Remote Shell, is it possible to examine SharedPreferences from adb shell? Since it would be much more convenient to examine an

相关标签:
8条回答
  • 2021-01-30 11:00

    Fine, I found the file just after I raised the question above. (It seem asking questions publicly stimulate me to search answers by myself much more diligently, since I don't want my dear peers to view me as a lazy programmer.)

    It is an XML file under /data/data/your.app.package.name/shared_prefs, and the file name is your.app.package.name_preferences.xml. It is really easy to modify the preferences when you figure out that the content is just a key-value map.

    0 讨论(0)
  • 2021-01-30 11:06

    I am using this convenient one-liner to pull, edit in vim, and push shared preferences for an app:

    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/
    

    Just set APP_ID to your application id.

    Note that this assumes you are using the default file name for shared preferences, as obtained from PreferenceManager.getDefaultSharedPreferences(context). Also, ADB needs to be running in root mode: adb root

    0 讨论(0)
  • 2021-01-30 11:08

    First pull shared preferences file from device. This requires root permision.

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

    Now MyKeys.xml is stored in current directory of your system.

    Modify values by

    vim MyKeys.xml
    

    After editing file save changes and push to device.

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

    To Verify your changes

    adb shell
    cat /data/data/org.test/shared_prefs/MyKeys.xml
    
    0 讨论(0)
  • 2021-01-30 11:11

    If the app is debugable you could do:

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

    Note that the preference might be stored in another file so better check the directory to find it:

    $ ls /data/data/<app-package-id>/shared_prefs/
    
    0 讨论(0)
  • 2021-01-30 11:11

    If you'd like to edit Shared Preferences from adb scripts, please see how to get root on Android emulator here. (If using 'adb root' is not enought in your case).

    If you wish to install vi editor/busybox on Android go here. [OPTIONAL]

    To edit a shared preference value, you need to first COPY app's xml file to SDstorage, copy it to your local filesystem, edit and then upload back to the phone.

    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
    

    Don't forget to RESTART the app to see the results.

    0 讨论(0)
  • 2021-01-30 11:12

    If you are using shared_preferences for Flutter, the file is /data/data/your.app.package.name/shared_prefs/FlutterSharedPreferences.xml. Note that if you edit the file, you must restart your app for your changes to be visible to your app. Doing a hot reload/hot restart doesn't expose your manual changes to your app.

    0 讨论(0)
提交回复
热议问题