レルムブラウザでレルムファイルを表示するにはどうすればよいですか?


127

私はレルムを発見したばかりで、それをより詳細に探索したかったので、サンプルアプリケーションを作成して、いじくりまわすことにしました。ここまでは順調ですね。

ただし、まだ解決できていないことの1つは、レルムブラウザーでデータベースを表示する方法です。これはどのように行うことができますか?


簡単な方法をご希望ですか?パスログ、adbコマンド、頭痛をスキップします。@devsmashは答えを持っている:stackoverflow.com/a/49705298/483520
ノーランエイミー

回答:


131

現在、レルムブラウザーはデバイス上のデータベースへの直接アクセスをサポートしていないため、データベースを表示するには、エミュレーター/電話からデータベースをコピーする必要があります。これは、ADBを使用して実行できます。

adb pull /data/data/<packagename>/files/ .

このコマンドは、を使用して作成されたすべてのRealmファイルをプルしますRealm.getInstance(new RealmConfiguration.Builder().build())。デフォルトのデータベースはと呼ばれdefault.realmます。

これはエミュレータでのみ機能するか、デバイスがルート化されている場合にのみ機能することに注意してください。


25
Log.d( ""、 "path:" + realm.getPath());を使用して、アプリからの正確なパスを記録することもできます。
bmunk 2015

39
そのため、Mac用のRealm Browserは役に立ちません。誰がエミュレータを使用するか
Jemshit Iskenderov 2016


3
ファイルが見つからないなどのエラーが発生した場合は、レルムファイルを取得する前に、まずadb rootコマンドを実行してください。
ランディ

これはadb rootを使用した後に機能しますが、私が何をしても、レルムファイルはレルムbrowssrを使用すると暗号化されていると言います。はい、私は腐敗などについて読みましたが、何もしていません。レルムに何か変化はありましたか?
Mike Axle

104

Facebookが開発したStethoを使用して、ChromeブラウザでRealm DBを表示できるようになりました。デフォルトでは、StethoはSqlite、ネットワーク、sharedpreferencesを表示できますが、追加のプラグインがここにあります使用すると、レルムも表示できます。

Application上記のライブラリを使用してクラスを構成した後、アプリが実行され、接続されている間に、Chromeブラウザーを開いてナビゲートchrome://inspectします。


ここに画像の説明を入力してください

その後 Resources->Web Sql->default.realm


ここに画像の説明を入力してください


2
解決できませんでした:com.uphyca:stetho_realm:0.8.0誰かがこれを手伝ってくれませんか?すみません、私はMacユーザーではないので、データベースファイルを参照できるのはこの方法だけです。
Caution7j

4
https://github.com/uPhyca/stetho-realm/raw/master/maven-repoここに示されているようにurlを追加しましたかgithub.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
私のせいで、どうもありがとう!私はこれを逃しました。これで正常に機能します!
注意7j

1
他のテーブルをクリックしてテーブル "A"の変更を確認し、テーブル "A"をもう一度クリックします。@ AlexKost
Jemshit Iskenderov

1
フィールドの表示に問題がある場合は、この投稿を参照してください:github.com/uPhyca/stetho-realm/issues/45 ....フィールドは表示されますが、データが表示されません....
hmmm

56

ADBシェルとrun-asコマンドを使用して、ルート化されていないデバイスからファイルをプルすることもできます。

これらのコマンドを使用して、ファイルフォルダーにあるyour_database_file_nameという名前のデータベースをアプリのプライベートストレージから取得できます。

adb shell "run-as package.name chmod 666 /data/data/package.name/files/your_database_file_name"

// For devices running an android version lower than Android 5.0 (Lollipop)
adb pull /data/data/package.name/files/your_database_file_name

// For devices running an Android version equal or grater
// than Android 5.0 (Lollipop)
adb exec-out run-as package.name cat files/your_database_file_name > your_database_file_name
adb shell "run-as package.name chmod 600 /data/data/package.name/files/your_database_file_name"

3
同意した。アプリケーションをデバッグ可能に設定できるので、ルートなしでこれを使用してファイルをプルできます。
JoshuaTree 2017

デバッグ不可能なapkからデータベースをプルする他の方法はありますか?
JEGADEESAN S

それが可能である場合、Android OS全体が完全に安全ではなくなります。根ざしたデバイスでのみ可能である可能性がありますが、私はそれを行ったことはありません
Apperside

バグのあるrun-as実装のため、これはSamsungデバイスでは機能しない可能性があります。
SkorpEN 2018年

これを使用して、編集したレルムを元の場所にインポートできますか?adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender

52

adbで毎回レルムデータベースファイルを取得するのが面倒な場合は、レルムデータベースファイルを添付したメールを送信するエクスポート関数をAndroidコードに追加できます。

ここに例を示します:

public void exportDatabase() {

    // init realm
    Realm realm = Realm.getInstance(getActivity());

    File exportRealmFile = null;
    try {
        // get or create an "export.realm" file
        exportRealmFile = new File(getActivity().getExternalCacheDir(), "export.realm");

        // if "export.realm" already exists, delete
        exportRealmFile.delete();

        // copy current realm to "export.realm"
        realm.writeCopyTo(exportRealmFile);

    } catch (IOException e) {
        e.printStackTrace();
    }
    realm.close();

    // init email intent and add export.realm as attachment
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("plain/text");
    intent.putExtra(Intent.EXTRA_EMAIL, "YOUR MAIL");
    intent.putExtra(Intent.EXTRA_SUBJECT, "YOUR SUBJECT");
    intent.putExtra(Intent.EXTRA_TEXT, "YOUR TEXT");
    Uri u = Uri.fromFile(exportRealmFile);
    intent.putExtra(Intent.EXTRA_STREAM, u);

    // start email intent
    startActivity(Intent.createChooser(intent, "YOUR CHOOSER TITLE"));
}

このユーザー権限をAndroidマニフェストファイルに追加することを忘れないでください。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3
これは、Pushbulletを使用する場合に特に便利です。次に、メッセージをChromeブラウザにプッシュすると、ファイルがダウンロードされます。ファイルは、レルムブラウザーで開くことができます
ymerdrengene

1
Android 8.0でのクラッシュ
EGHDK 2017

42

Androidの場合(デバイスをルート化する必要はありません)

デバイス上のRealmデータベースのコピーを取得するには、Android StudioのDevice File Explorerに移動します。

に移動し/data/data/your.package.name/files/ます。

そこに* .realmファイルがあります。右クリックして[ 名前を付けて保存 ]を選択します。保存する前に必ず同期してください。

* .realmファイルを表示するには、レルムブラウザまたはこれらのいずれかを使用します。

ここに画像の説明を入力してください


2
そのような単純な解決策、これが答えになるはずです
Steven Elliott

もちろんです。これが道です。🙏–
ノーランエイミー

データを表示するには、アプリがデバッグ可能なfalseに設定されていることを確認してください。
アマンバーマ2018年

@AmanVerma開発者向けオプションのUSBデバッグです。Device File Explorerを使用するにはUSBデバッグを有効にする必要があります
krhitesh

Linuxユーザーは、realm.io / products / realm-studioを使用してrealm studioをダウンロードし、そこからrealmファイルを開くことができます
B.shruti

19

回避策があります。デバイスモニターからファイルに直接アクセスできます。このディレクトリにアクセスできるのは、エミュレータまたはルート権限を取得されたデバイスを使用している場合のみです。

Android Studioの場合:

選択する

メニューツールAndroidAndroidデバイスモニターファイルエクスプローラーデータデータ →(パッケージ名)→ ファイル →* db.realm

このファイルをデバイスからプルします。

ここに画像の説明を入力してください

Android Studio 3 Canary 1から、Device File Explorerが導入されました。ここでレルムファイルを確認する必要があります。次に、(パッケージを選択)→レルムファイルを選択→右クリックして保存します。

ここに画像の説明を入力してください

そして、ファイルをレルムブラウザで開きます。これでデータを確認できます。


ありがとう。ただし、実際のデバイスでは機能しません。エミュレータでのみ機能します
pratham kesarkar '25 / 07/25

1
@prathamkesarkar、これが私がエミュレータまたはルート化されたデバイスを作成した理由です。通常のデバイスではこれらのフォルダにアクセスできないためです。
Aveek 2017

14

レルムファイルに直接アクセスできます。これが私が使った解決策です。

最初に、「/ data / data / packagename / files」にあるレルムファイルをEnvironment.getExternalStorageDirectory()+ '/ FileName.realm'にコピーできます。

public class FileUtil {
    public static void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

Realm realm = null;
try {
    realm = Realm.getInstance(this);
        File f = new File(realm.getPath());
        if (f.exists()) {
            try {
                FileUtil.copy(f, new File(Environment.getExternalStorageDirectory()+"/default.realm"));
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
}
finally {
    if (realm != null)
        realm.close();
}

次に、ADBツールを使用して、次のようにそのファイルをプルします。

$ adb pull /sdcard/default.realm。

これで、レルムブラウザーでファイルを開くことができます。


6

これは、のシェルrun-as内にあるコマンドを利用することで、ルート権限を取得する必要がないソリューションですadb。唯一の前提条件は、対象の電話にアプリのデバッグビルドをインストールする必要があることです。

$ adb shell
$ run-as com.yourcompany.yourapp # pwd will return /data/data/com.yourcompany.yourapp
$ cp files/default.realm /sdcard
$ exit
$ exit
$ adb pull /sdcard/default.realm ~/Desktop # or wherever you want to put it

ローカルディレクトリ内の任意の電話からのDBのコピーがあり、レルムブラウザーにロードできます。


1
mac adb default path ... / Library / Android / sdk / platform-tools
Francisco Castro

3

エミュレータを使用している場合は、直接アクセスできるようになりました。

最初に、@ bmunkが言うように、ファイルがエミュレーターにあるパスを記録します。

Log.d(TAG, "path: " + realm.getPath());

2番目に検索し、ファイルを右クリックして[名前を付けて保存]を選択します。ダイアログに、ファイルが実際にシステムに存在するルートが表示されます。

ここに画像の説明を入力してください [名前を付けて保存]ダイアログからルートをコピーできます

次に、ルートをRealm Studioの[ローカルファイルを開く]ダイアログに貼り付けます。

(私はこれをWindowsでのみテストしました)


1
これが最も役立つ回答です。ありがとうございます。macOSのパスは表示されませんが、ファイルを見つけるのは簡単です。
Maria

1

これが、すぐに使えるシェルスクリプトです。パッケージ名とadbパスを変更するだけで、スクリプトが必要な処理を実行します。

#!/bin/sh
ADB_PATH="/Users/medyo/Library/Android/sdk/platform-tools"
PACKAGE_NAME="com.mobiacube.elbotola.debug"
DB_NAME="default.realm"
DESTINATION_PATH="/Users/Medyo/Desktop/"
NOT_PRESENT="List of devices attached"
ADB_FOUND=`${ADB_PATH}/adb devices | tail -2 | head -1 | cut -f 1 | sed 's/ *$//g'`
if [[ ${ADB_FOUND} == ${NOT_PRESENT} ]]; then
    echo "Make sure a device is connected"
else
    ${ADB_PATH}/adb shell "
        run-as ${PACKAGE_NAME} cp /data/data/${PACKAGE_NAME}/files/${DB_NAME} /sdcard/
        exit
    "
    ${ADB_PATH}/adb pull "/sdcard/${DB_NAME}" "${DESTINATION_PATH}"
    echo "Database exported to ${DESTINATION_PATH}${DB_NAME}"
fi

このブログ投稿の詳細:http : //medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/


1

シンプルに保つ:

/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm

説明:

  1. adbインストールへのパスを見つけます。Android Studioを使用している場合は、[ファイル]> [プロジェクト構造]> [SDKの場所]> [Android SDKの場所]を確認platform-toolsし、そのパスに追加します。
  2. run-as引数にはアプリの完全修飾名を使用してください
  3. レルムファイルのコピー先を決定します

注意:このファイルはdefault.realmと呼ばれています。構成するときに名前を変更していないためです。


1

Androidレルムファイルを表示するには、いくつかのオプションがあります。

  1. @Christian Melchiorが言ったように、デバイスからレルムデータベースをプルし、OSX Realm Browserを使用してMacでそれを開くことができます

  2. 私が作成したサードパーティのAndroid Realm Browserを使用して、レルムでのAndroid開発を少し簡単にすることができます。アプリはデバイス上のすべてのレルムファイルを表示し、アプリのテスト中にすべてのレルムファイルをリアルタイムで表示できます。

  3. あなたはChromeブラウザStethoを使用することができますSethoを使用する方法の完全な説明は@Jemshit Iskenderoの回答によって提供されます。


0

ここに私のような怠惰な人々のためのシェルがあります:)

.realmファイルは内部に格納されるtmpRealm/の隣にフォルダ.shのファイル。

#!/bin/sh
adb shell 'su -c "
cd /data/data/<packagename>/files
ls
rm -rf /data/local/tmp/tmpRealm/
mkdir /data/local/tmp/tmpRealm/
cp /data/data/com.arefly.sleep/files/* /data/local/tmp/tmpRealm
chown shell.shell /data/local/tmp/tmpRealm/*
"'
rm -rf ./tmpRealm/
adb pull /data/local/tmp/tmpRealm ./

またはtmpRealm/、SDカードに残したい場合:

#!/bin/sh
adb shell 'su -c "
cd /data/data/com.arefly.sleep/files
ls
mount -o rw,remount $EXTERNAL_STORAGE/
rm -rf $EXTERNAL_STORAGE/tmpRealm
mkdir $EXTERNAL_STORAGE/tmpRealm
cp /data/data/com.arefly.sleep/files/* $EXTERNAL_STORAGE/tmpRealm
"'
rm -rf ./tmpRealm/
# http://unix.stackexchange.com/a/225750/176808
adb pull "$(adb shell 'echo "$EXTERNAL_STORAGE"' | tr -d '\r')/tmpRealm" ./

参照:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.