Android端末からSQLiteのDBファイルを取得する

Android端末からSQLiteのDBファイルを取得する方法について調べました。

準備

Android SDK が入っていない場合は、Android Studio をインストールするなどして入れておきます。

そのままの状態だと adb コマンドが使えないので、platform-tools ディレクトリにパスを通しておきます。

僕の環境では、~/Library/Android/sdk/platform-tools でした。

パスを通したら adb コマンドが使えることを確認します:

adb version

DBファイルの確認

まず、DBファイルがあることを確認します:

adb shell run-as {パッケージ名} ls -l databases

DBファイルの取得(Android 4.4 以下)

Android 4.4 以下の場合は、以下のコマンドで取得できます:

adb shell run-as {パッケージ名} cat databases/{DBファイル名} > {DBファイル名}

なお、AndroidManifest.xml<application android:debuggable="false">と指定されていると取得できないようです(未検証)。

DBファイルの取得(Android 5.0 以上)

Android 5.0 以上の場合は、上記のコマンドを実行すると、ファイルサイズがゼロになってしまいます。(これでかなり悩みました。)

以下のコマンドで取得できました:

adb shell run-as {パッケージ名} cat databases/{DBファイル名} | perl -pe 's/\r\n/\n/' > {DBファイル名}

おまけ

Stetho というツールを使うと、Chrome から確認できるようなので、開発時にちょっと見る程度ならこれで十分ですね。

後で調べてみたいと思います。

参考情報