実機のdata/dataに保存したファイルを取得する方法をメモ

data/dataの中身を参照する事はadbのrun-asコマンドで可能だが、ファイル自体をローカルPCへpull取得する方法が結構微妙なのでメモ。
中身を参照はcatコマンドなどで参照できるのでいいが、sqliteのDBファイルの場合、中身をcatで見てもよくわからないので、ローカルに取得したくなる。

中身を確認する方法はこちら参照

adb pullコマンドについて

まずdata/dataでない場合はpullコマンドを使う事で簡単に取得できる

adb pull [端末上のファイル名] [PCのファイル名]

ただ権限がないユーザのためdata/dataのデータをpullすることはできない。そのため権限のあるsuと同様なrun-asで権限のあるユーザに切り替えることで参照まで可能。ただこの場合もまだデータをpullはできない。
そのため一度pull可能な場所にファイルを移動コピーする事でpullを実行すると良い。adbではcpコマンドは使えないためファイルの中身を参照してその値を別ファイル(pullできる場所)へ書き出すという方法が良い。

data/dataのファイルを取得する方法

まずはファイルをdata/dataからpullできる場所へファイル移動 ※ファイル書き出し

adb -d shell "run-as [パッケージ名] cat [カレントから取得したいファイル名] > /sdcard/test"

”adb shell” コマンドでアクセスした後に実行しても良いが、adbの[-d]オプションを付ける事で端末にコマンドを直接送る事ができる。
”run-as” コマンドで次に権限を取得。そしてファイルの中身をcatコマンドで取得し リダイレクト[>]でファイルに書き込みすれば完了。
今回はsdcard/内のtestファイル(新規作成)を出力先に指定している。
※ [カレントから取得したいファイル名] は data/data/[パッケージ名]/ の直下のファイル指定を絶対パス指定で行うこと

端末内の全パッケージ名取得

pm list packages

※adb shellでアクセスしてること

あとはpullして完了

adb pull /sdcard/test .

これを使ってメリットがあるのはdbファイルかプレファレンスファイル。
後この方法で取得できるのはデバッグモードのapkのみなのでリリース版では無理。

その他おすすめの備忘録

Tagged with:
 

One Response to [Android]実機デバッグでdata/dataに保存したファイルを取得する方法

  1. kat0usi より:

    adb -d shell "run-as [パッケージ名] cat [カレントから取得したいファイル名] > /sdcard/test"

コメントを残す