stylesheet

2013-05-18

sqlite3データベースの一括 vacuum & reindex シェルスクリプト

Androidを使い込んでもっさもっさしてきたら、バキュームとインデックス再作成でリフレッシュ。rooted端末ならシェルスクリプトで根こそぎバキューム。

続きは以下



  1. sqlite3コマンドのインストール
  2. 一括vaccumスクリプトのインストールと実行

環境

  • Android SDK
  • rooted端末

1. sqlite3コマンドのインストール

sqlite3コマンドがインストールされていない場合はインストールが必要。 エミュレータから拝借するのが手っ取り早い。

CPUアーキテクチャとAndroidバージョンを調べる

端末を接続して以下のコマンドで調べる。CPUアーキテクチャはARMv7等。

adb shell cat /proc/cpuinfo
adb shell getprop | grep ro.build.version

エミュレータからsqlite3コマンドを抜き出す

CPUアーキテクチャとAndroidバージョンを合わせた仮想デバイスを作成する。CPU/ABIとTargetをそれぞれ指定。

作成した仮想デバイスを起動して、ファイルを抜き出す。adbコマンドのオプション指定が面倒なので実機は切断しておく。

adb pull /system/xbin/sqlite3 sqlite3

無事pullできたら、もう先ほどの仮想デバイスは不要なので終了。

実機へ転送してパーミッション変更

端末を再度接続してsqlite3コマンドを転送する。

adb remount
adb push sqlite3 /system/xbin/sqlite3
adb shell chown root:shell /system/xbin/sqlite3
adb shell chmod 755 /system/xbin/sqlite3

以上、sqlite3コマンドのインストール終わり。

2. 一括vaccumスクリプトのインストールと実行

一括vacuumスクリプトのダウンロード、転送

スクリプトをダウンロードして、端末へ転送する。wgetがつかえないなら手動でこちらから。

wget https://sites.google.com/site/yamorijp/sqlite3-vacuum.sh?attredirects=0&d=1
adb push sqlite3-vacuum.sh /sdcard/scripts/sqlite3-vacuum.sh
sqlite3-vacuum.sh
#!/system/bin/sh

exec="/system/xbin/sqlite3"
find_dirs="/data/data\n/sdcard"

for d in `echo -e ${find_dirs}`; do
 for f in `find ${d} -type f | grep -E "\.(db|sqlite)$"`; do
  (set -x; `${exec} ${f} vacuum`; `${exec} ${f} reindex`)
 done
done

暗号化されているデータベースは非対応。

一括vaccum実行

以下のコマンドを実行。

adb shell sh sqlite3-vacuum.sh

端末から実行する場合は、Android Terminal EmulatorとかGScript Lite等いろいろある。自作のランチャーでもシェルスクリプトを扱えるので、パーミッションが気にならない方は是非。