run-asできないけどSharedPreferencesを見たい

あくまで自分で開発してるときの話です。他人が作ったアプリのは見られません。

SharedPreferencesが見られなくて困った。プログラム上からは取得/更新できるけど、実際にファイルにどう書かれているか知りたかった。

adb shellから、run-asコマンドを使っても

run-as: package has corrupt installation

と出て、表示できない。

Android StuidioでView -> Tool Windows -> Device File Exploreを使っても同じメッセージが表示されて表示できない。

原因を調べてもよく分からない。

インストールし直してみたりしたけどメッセージは変わらない。

しょうがないのでコードで書き出すことに。

MainなActivityに以下の関数を作る

    protected fun showFiles(filter: FileFilter? = null, print: Boolean = false, path: File? = null ) {
        val targetPath = path ?: File("/data/data/" + packageName)

        if (targetPath.isDirectory) {
            if (filter == null || filter.accept(targetPath)) {
                Log.d("showFiles", "dir: ${targetPath.absolutePath}/");
            }
            targetPath.listFiles().forEach { file -> showFiles(filter, print, file) }
        } else {
            if (filter == null || filter.accept(targetPath)) {
                Log.d("showFiles", "file: ${targetPath.absolutePath}");
                if (print) {
                    Log.d("showFiles", "content: ${targetPath.readText()}")
                }
            }
        }
    }

そして、onCreateで引数なしで呼んでみる

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        showFiles();
...

logcatにファイル名が出てくる。

自分が使ってるファイル名が分かったら、こんどはonCreateで引数つけて呼んでみる。

今回は”config”という名前をつけてたのが分かったので、

showFiles(FileFilter {pathname -> pathname.endsWith("config.xml") }, true);

という呼び出しに変更して実行すると、 config.xmlファイルがlogcatに表示される。