回答:
現在、レルムブラウザーはデバイス上のデータベースへの直接アクセスをサポートしていないため、データベースを表示するには、エミュレーター/電話からデータベースをコピーする必要があります。これは、ADBを使用して実行できます。
adb pull /data/data/<packagename>/files/ .
このコマンドは、を使用して作成されたすべてのRealmファイルをプルしますRealm.getInstance(new RealmConfiguration.Builder().build())
。デフォルトのデータベースはと呼ばれdefault.realm
ます。
これはエミュレータでのみ機能するか、デバイスがルート化されている場合にのみ機能することに注意してください。
Facebookが開発したStethoを使用して、ChromeブラウザでRealm DBを表示できるようになりました。デフォルトでは、StethoはSqlite、ネットワーク、sharedpreferencesを表示できますが、追加のプラグインがここにあります使用すると、レルムも表示できます。
Application
上記のライブラリを使用してクラスを構成した後、アプリが実行され、接続されている間に、Chromeブラウザーを開いてナビゲートchrome://inspect
します。
その後 Resources->Web Sql->default.realm
https://github.com/uPhyca/stetho-realm/raw/master/maven-repo
ここに示されているようにurlを追加しましたかgithub.com/uPhyca/stetho-realm
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"
adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
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" />
デバイス上のRealmデータベースのコピーを取得するには、Android StudioのDevice File Explorerに移動します。
に移動し/data/data/your.package.name/files/
ます。
そこに* .realmファイルがあります。右クリックして[ 名前を付けて保存 ]を選択します。保存する前に必ず同期してください。
回避策があります。デバイスモニターからファイルに直接アクセスできます。このディレクトリにアクセスできるのは、エミュレータまたはルート権限を取得されたデバイスを使用している場合のみです。
Android Studioの場合:
選択する
メニューツール → Android → Androidデバイスモニター → ファイルエクスプローラー → データ → データ →(パッケージ名)→ ファイル →* db.realm
このファイルをデバイスからプルします。
Android Studio 3 Canary 1から、Device File Explorerが導入されました。ここでレルムファイルを確認する必要があります。次に、(パッケージを選択)→レルムファイルを選択→右クリックして保存します。
そして、ファイルをレルムブラウザで開きます。これでデータを確認できます。
レルムファイルに直接アクセスできます。これが私が使った解決策です。
最初に、「/ 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。
これで、レルムブラウザーでファイルを開くことができます。
これは、のシェル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のコピーがあり、レルムブラウザーにロードできます。
エミュレータを使用している場合は、直接アクセスできるようになりました。
最初に、@ bmunkが言うように、ファイルがエミュレーターにあるパスを記録します。
Log.d(TAG, "path: " + realm.getPath());
2番目に検索し、ファイルを右クリックして[名前を付けて保存]を選択します。ダイアログに、ファイルが実際にシステムに存在するルートが表示されます。
次に、ルートをRealm Studioの[ローカルファイルを開く]ダイアログに貼り付けます。
(私はこれをWindowsでのみテストしました)
これが、すぐに使えるシェルスクリプトです。パッケージ名と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/
シンプルに保つ:
/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm
説明:
adb
インストールへのパスを見つけます。Android Studioを使用している場合は、[ファイル]> [プロジェクト構造]> [SDKの場所]> [Android SDKの場所]を確認platform-tools
し、そのパスに追加します。run-as
引数にはアプリの完全修飾名を使用してください注意:このファイルはdefault.realmと呼ばれています。構成するときに名前を変更していないためです。
Androidレルムファイルを表示するには、いくつかのオプションがあります。
@Christian Melchiorが言ったように、デバイスからレルムデータベースをプルし、OSX Realm Browserを使用してMacでそれを開くことができます
私が作成したサードパーティのAndroid Realm Browserを使用して、レルムでのAndroid開発を少し簡単にすることができます。アプリはデバイス上のすべてのレルムファイルを表示し、アプリのテスト中にすべてのレルムファイルをリアルタイムで表示できます。
あなたはChromeブラウザStethoを使用することができますSethoを使用する方法の完全な説明は@Jemshit Iskenderoの回答によって提供されます。
ここに私のような怠惰な人々のためのシェルがあります:)
.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" ./
参照: