Androidを使い込んでもっさもっさしてきたら、バキュームとインデックス再作成でリフレッシュ。rooted端末ならシェルスクリプトで根こそぎバキューム。
続きは以下
環境
- 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等いろいろある。自作のランチャーでもシェルスクリプトを扱えるので、パーミッションが気にならない方は是非。