実機内でsqlite3コマンドを使ってみよう
Androidアプリ開発をしていて、実機のDB内容を確認したくなりました。少し手順が必要でしたが、DB内容を見ることが出来るようになりましたので、その手順をメモしておきます。
はじめに
参考にさせて頂いたサイトです。ほぼ記述されているままの手順で出来ました。
前提です。
- PC側(Windows)には、Android開発環境構築済み。
- 私の使用している実機には、sqlite3コマンドが入っていませんでした。導入からの作業になります。
- 実機はroot化済みです。
エミュレータから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>