端末のデータ領域(/data/data/パッケージ名)に保存されている
ファイルを取得する場合、アクセス権限の関係でadb pull
が利用できない。
その場合の取得方法を度々忘れてしまうので改めてメモ。
Android 4.4以下の端末の場合
Android 4.4(APIレベル19)以下の端末では問題なく取得できる。
adb shell run-as com.example.miso cat databases/miso.db > miso.db
Android 5.0以上の端末の場合
問題は5.0以上の端末で、上記のコマンドを実行するとファイルサイズが0となってしまい、
正しくファイルが表示されない。
原因はこちらのサイトで説明されている通り、
Android5.0以上ではcatコマンドの仕様が変わったらしい。
環境のせいかもしれませんが、紹介されているperlの置換がこのままではうまく動作しなかったため、
以下のように少し変更したら無事ファイルを取得できました!
adb shell run-as com.example.miso cat databases/miso.db | perl -pe 's/\r\n/\n/' > miso.db
ただし上記コマンドが動作したのはOSXのみで、
WindowsではPerlコマンドの仕様が違うのか正しく取得できず。
もしWindowsでの取得方法を知っている人は教えてほしいです!
Android 8.0以上の端末の場合 2018/10/22追記
Oreo以上では上記の方法では取得できなくなっているためshell
の部分をexec-out
に変更する必要がある。
adb exec-out run-as com.example.miso cat databases/miso.db > miso.db