脱獄していない端末から、開発中アプリのデータベースファイルを引っこ抜く
ワンライナーでいけることがわかった。
パッケージ名が your.app.package、データベースファイル名が sql.db として、:
adb shell run-as your.app.package cat databases/sql.db\ |sed s/\\r$// > sql.db
まず run-as コマンドでパッケージ内のファイルをコンソールに出力する。
これを開発環境側で受けるんだけれど、 adb shell の出力は LF (\n) を CRLF (\r\n) に変更してしまうそう。そこでパイプで sed に流し込み、行末直前の \r を削除する。
あとは結果をリダイレクトして完了。
注: run-as のために your.app.package を debuggable=true にしておくこと。
sed がない Windows 環境だと、どうするのがいいのかな? とりあえず Cygwin?
sed 's/\r$//' を C コードで書けばこんな感じか?:
#include <stdio.h> #define LF 0x0A #define CR 0x0D int main() { int c; while ((c = getchar()) != EOF) { if (c == CR) { const int c2 = getchar(); switch (c2) { case EOF: putchar(c); return 0; case LF: putchar(LF); break; default: ungetc(c2, stdin); putchar(c); break; } } else { putchar(c); } } return 0; }
であればこれを Windows 用にコンパイルして… って、 Windows に開発環境入れるの大変だろうしなあ。 Android 開発している人向けと考えるなら Java のほうがいい?