kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

実機内でsqlite3コマンドを使ってみよう

Androidアプリ開発をしていて、実機のDB内容を確認したくなりました。少し手順が必要でしたが、DB内容を見ることが出来るようになりましたので、その手順をメモしておきます。

はじめに

参考にさせて頂いたサイトです。ほぼ記述されているままの手順で出来ました。

前提です。

  1. PC側(Windows)には、Android開発環境構築済み。
  2. 私の使用している実機には、sqlite3コマンドが入っていませんでした。導入からの作業になります。
  3. 実機はroot化済みです。

手順の流れ

次のような流れで作業することにになりました。

  1. エミュレータからsqlite3を取得
  2. 実機へsqlite3をコピー
  3. sqlite3を使う

エミュレータからsqlite3を取得

まず、エミュレータを起動します。

コマンドプロンプトから、次のコマンドを実行し、エミュレータ内に存在するsqlite3コマンドの場所を確認します。

C:\usr\android-sdk-windows\platform-tools>adb shell
# ls /system/*/sqlite3
ls /system/*/sqlite3
/system/xbin/sqlite3
# exit

次のコマンドで、sqlite3コマンドを、Windowsのファイルとして取得します。

C:\usr\android-sdk-windows\platform-tools>adb pull /system/xbin/sqlite3 sqlite3
189 KB/s (24120 bytes in 0.124s)

エミュレータを終了します。

実機へsqlite3をコピー

実機とPCをUSB接続します。

次のコマンドを実行し、先程取得したsqlite3ファイルを、実機のSDカードへコピーします。

C:\usr\android-sdk-windows\platform-tools>adb push sqlite3 /sdcard/
327 KB/s (24120 bytes in 0.072s)

次のようにコマンド実行し、sqlite3を実行できるように設定します。root化が必要です。

C:\usr\android-sdk-windows\platform-tools>adb shell
$ su -
# mount | grep system
/dev/block/mtdblock2 /system yaffs2 ro 0 0
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock2 /system
# mount | grep system
/dev/block/mtdblock2 /system yaffs2 rw 0 0
#
# cp /sdcard/sqlite3 /system/xbin/
#
# sqlite3
SQLite version 3.6.22
Enter ".help" for instructions
sqlite> .quit
.quit
#
# mount -o remount,ro -t yaffs2 /dev/block/mtdblock2 /system
# mount | grep system
/dev/block/mtdblock2 /system yaffs2 ro 0 0
# exit
$ exit

sqlite3を使う

次のようにして、sqlite3を使えました。ここで「com.sampleapp」は、Androidに作成済みのサンプルアプリを表しています。DBは、サンプルアプリのユーザ(ここでは「app_107」)のみがアクセスできる権限になっていましたので、サンプルアプリのユーザへ変更してから、sqlite3コマンを実行しています。

C:\usr\android-sdk-windows\platform-tools>adb shell
$ su -
su -
# ls -l /data/data/com.sampleapp/databases

  • rw-rw---- app_107 app_107 6144 2011-10-30 11:15 db

#
# su - app_107
$ cd /data/data/com.sampleapp/databases
$ sqlite3 db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>