0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Androidエミュレータ内のCouchbaseデータファイルをローカルにコピーする

Posted at

はじめに

自分用メモですが、備忘録として残します。

アプリ自体は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

cdls -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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?