SQLite のデータをコマンドプロンプトから参照する
概要
Android で SQLite を使う際に、コマンドプロンプトから SQL 文を実行してデータを確認したい場合があります。 実機に sqlite3 がインストールされていない場合の実行方法について書きます。 但し、実機で base64 コマンドを実行できる場合の方法です。
確認環境
- Android Studio 2.1.2
- 実行環境 Sony SOV32 (Xperia Z5)
参考情報
- [Android]実機のSQLiteへアクセスできないときの暫定回避策 | Developers.IO
- SD カードにコピーする方法
解説
Android で SQLite を使っていれば、コマンドプロンプトから SQL 文を実行してデータを確認したくなるもの。 しかし、実機に sqlite3 コマンドがインストールされていない。 sqlite3 を実機にインストールするには root 権限が必要だが、root 取得はしたくない。 その場合には、データベースファイルを PC にコピーする。
コピーをするために下記のコマンドを実行する。
$ adb shell run-as <アプリのパッケージ名> toybox base64 databases/<データベースファイル名> | base64 -D > <データベースファイル名>
adb shell
コマンドで、実機において shell を実行する。実行するコマンドはrun-as <アプリのパッケージ名> toybox base64 databases/<データベースファイル名>
run-as
コマンドは、アプリのユーザーとしてコマンドを実行する。デバッグモードでのみ機能するらしい。toybox
は様々なコマンドを集約したバイナリ。toybox
に含まれる様々なコマンドの一つとしてbase64
コマンドがある。base64
コマンドはバイナリデータを文字データに変換する。run-as
から|
(パイプ) の前までが実機側で実行され、|
(パイプ) 以降は PC 側で実行される。|
(パイプ) によりデータを受け渡す。base64 -D
により、文字データを再びバイナリデータに変換する。> <データベースファイル名>
により、ファイルに保存する。
データベースファイルを取得した後は PC で操作する。
$ sqlite3 <データベースファイル名> sqlite> .table ...
toybox base64
を試す前に cat
で試したが、データが一部変わってしまったので文字データに変換する方法を探したところ、
Xperia Z5 には toybox
がインストールされていたので問題を解決できた。