リモートシェルからのsqlite3データベースの検査 ができるようになったので、adbシェルからSharedPreferencesを調べることはできますか?デバッグ時にコマンドラインからSharedPreferencesを調べて操作する方がはるかに便利です。
または別の言い方をすると、SharedPreferencesがどのファイルに保存され、これらのファイルを表示および変更する方法は?
上記の質問をした直後にファイルを見つけました。 (親しい同僚に私を怠惰なプログラマーと見なしてほしくないので、質問をすることは、私が自分ではるかに熱心に答えを検索することを公に刺激します。)
これは/data/data/your.app.package.name/shared_prefs
の下のXMLファイルであり、ファイル名はyour.app.package.name_preferences.xmlです。コンテンツが単なるKey-Valueマップであることがわかったら、設定を変更するのは本当に簡単です。
アプリが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/
私はこの便利なワンライナーを使用して、アプリケーションのプル、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
_
ヘルパー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
}
他の誰かが私がそうであったように上記の提案のすべてを使用して「Permission Denied」エラーが発生している場合は、exec-out
このような:
adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
まず、共有設定ファイルをデバイスからプルします。これにはルート権限が必要です。
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