web-dev-qa-db-ja.com

adbシェルからSharedPreferencesを調べる方法は?

リモートシェルからのsqlite3データベースの検査 ができるようになったので、adbシェルからSharedPreferencesを調べることはできますか?デバッグ時にコマンドラインからSharedPreferencesを調べて操作する方がはるかに便利です。

または別の言い方をすると、SharedPreferencesがどのファイルに保存され、これらのファイルを表示および変更する方法は?

43
an0

上記の質問をした直後にファイルを見つけました。 (親しい同僚に私を怠惰なプログラマーと見なしてほしくないので、質問をすることは、私が自分ではるかに熱心に答えを検索することを公に刺激します。)

これは/data/data/your.app.package.name/shared_prefsの下のXMLファイルであり、ファイル名はyour.app.package.name_preferences.xmlです。コンテンツが単なるKey-Valueマップであることがわかったら、設定を変更するのは本当に簡単です。

47
an0

アプリがdebugableの場合、次のことができます。

$ 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/
38
joecks

私はこの便利なワンライナーを使用して、アプリケーションのプル、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モードで実行する必要があります:_adb root_

10
friederbluemle

ヘルパー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
eleven

他の誰かが私がそうであったように上記の提案のすべてを使用して「Permission Denied」エラーが発生している場合は、exec-out このような:

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
3
CFL_Jeff

まず、共有設定ファイルをデバイスからプルします。これにはルート権限が必要です。

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
1
Shiv Buyya