はじめに
自分用メモですが、備忘録として残します。
アプリ自体はNativeScript+Angularで開発、@triniwiz/nativescript-couchbase
を使用しています。
取得するファイルのパスを確認する
- 下記コマンドでEmulatorのShellにアクセスする。
adb shell
- アプリのデータディレクトリに移動する。
com.yourapp.package
にはアプリのパッケージ名を指定する。
cd /data/data/com.yourapp.package/databases/
- Couchbaseのデータファイル(
.cblite2
や.sqlite
など)があるか確認する。
ls -l
- 今回の自分の環境では下記にディレクトリが格納されていた。
/data/data/com.yourapp.package/files/sample-couch.cblite2
cd
やls -l
実行でPermission denied
エラーになる場合は、アクセス権限を取得する。
run-as com.yourapp.package
adbコマンドを使用しファイルをローカルにコピーする
ファイルをローカル環境へコピーする
adb shell 'run-as com.yourapp.package cat /data/data/com.yourapp.package/files/sample.db > /sdcard/sample.db' && adb pull /sdcard/sample.db ./sample.db
ディレクトリをローカル環境へコピーする
adb exec-out run-as com.yourapp.package tar -cf - -C /data/data/com.yourapp.package/files sample-couch.cblite2 > sample-couch.tar
tar -xf sample-couch.tar
コマンドの詳細
-
run-as com.yourapp.package
:アクセス権限を取得 -
tar -cf -
で標準出力 (stdout
) に圧縮データを送る -
adb exec-out
でそれをローカルのsample-couch.tar
にリダイレクトする -
tar -xf sample-couch.tar
で解凍する - これにより、
sample-couch.cblite2
ディレクトリがローカルに復元されます。
~/Downloads
にコピーする場合は以下コマンドを実行。
adb exec-out run-as com.yourapp.package tar -cf - -C /data/data/com.yourapp.package/files sample-couch.cblite2 > ~/Downloads/sample-couch.tar
tar -xf ~/Downloads/sample-couch.tar -C ~/Downloads/
おまけ
エクスポート処理を追加し、Jsonファイルをエクスポートして取得する方法もある
プロジェクトに下記の処理を追加する。
下記例はNativescriptのclassに処理を追加する想定。
sample.ts
import { Injectable } from '@angular/core';
import { Couchbase } from 'nativescript-couchbase-plugin';
// import { CouchBase } from '@triniwiz/nativescript-couchbase';
import { ApplicationSettings, knownFolders } from '@nativescript/core';
export class CounchbaseModule {
database = new Couchbase('sample-couch');
exportData() {
const documents = this.database.query(); // 全データを取得
const folder = knownFolders.documents(); // `/data/user/0/{package_name}/files/`
const file = folder.getFile("exported_sample-couch.json");
file.writeText(JSON.stringify(documents))
.then(() => console.log("Data exported successfully!"))
.catch((err) => console.error("Export failed", err));
}
}
格納した階層から、add pull
などで取得する。
xxx.db
からデータをファイルへ出力する
sqlite3 sample-couch.cblite2/db.sqlite3 \
"SELECT id, name, mail, order_no FROM user;" > output.txt