如何查看Realm浏览器中的Realm文件?
我刚刚发现领域,并希望更详细地探索它,所以我决定创build示例应用程序,并与它混乱。 到目前为止这么好,但是我还没有能够解决的一件事是如何在Realm浏览器中查看我的数据库。 任何人都可以让我了解如何做到这一点? 任何意见将不胜感激!
提前致谢。
目前,Realm浏览器不支持在设备上直接访问数据库,所以您需要从模拟器/手机复制数据库来查看它。 这可以通过使用亚行来完成:
adb pull /data/data/<packagename>/files/ .
这个命令会把所有使用Realm.getInstance(new RealmConfiguration.Builder().build())
创build的Realm文件拉出来。 默认数据库被称为default.realm
。
请注意,这只能在仿真器上工作,或者如果设备是根源的。
现在,您可以使用由Facebook开发的Stetho在Chrome浏览器上查看Realm DB。 默认情况下,Stetho允许查看Sqlite,networking,共享首选项,但是通过额外的插件也可以查看Realm。
在使用上述库configurationApplication
类之后,当应用程序正在运行并连接时,请打开Chrome浏览器并导航chrome://inspect
以查看
然后Resources->Web Sql->default.realm
如果你懒得每次都用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 Manifest文件中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
您还可以使用adb shell和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 lollipop adb pull /data/data/package.name/files/your_database_file_name //for devices running an android version equal or grater than 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"
你可以直接访问领域文件。 这是我用过的解决scheme。
首先,您可以将位于'/ 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。
现在你可以打开文件为Realm Browser。
有一个解决方法。 您可以直接从设备监视器访问该文件。 只有在使用模拟器或根设备时才能访问此目录。
在Android Studio中:
select
工具> Android> Android设备监视器>文件资源pipe理器>数据>数据>(您的软件包名称)>文件> db.realm
从设备中拉出这个文件
并打开文件到Realm浏览器。 你可以看到你的数据。
这是我准备使用的shell脚本。 只需更改软件包名称和adbpath,脚本就可以完成必要的工作。
#!/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/
这是一个像我这样的懒惰的人的壳:)
.realm
文件将存储在.sh
文件旁边的tmpRealm/
文件夹中。
#!/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" ./
参考:
保持简单:
/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm
说明:
- find你的
adb
安装path。 如果您使用的是Android Studio,请查看文件>项目结构> SDK位置> Android SDK位置,并将platform-tools
附加到该path。 - 使用您的应用程序的完全限定名称的
run-as
参数 - 确定要将领域文件复制到的位置
注意:这个文件名为default.realm,因为在configuration文件时我没有改变它的名字 – 你可能会有所不同。
这里有一个解决scheme,不需要你的手机根植在adb
的shell里面,使用run-as
命令。 只有先决条件是您必须在目标手机上安装应用程序的debugging版本。
$ 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
您将从本地目录中的任何电话获得数据库副本,然后将其加载到Realm浏览器中。
你有几个选项来查看你的Android领域的文件:
-
就像@Christian Melchior说的,你可以从设备上取得你的领域数据库,并使用OSX Realm Browser在Mac上打开它
-
你可以使用我创build的第三方Android Realm Browser ,让android开发领域变得容易一点。 应用程序将向您显示设备上的所有领域文件,并且您可以在testing应用程序的同时实时查看所有领域文件。
-
您可以使用Chrome浏览器Stetho完整说明如何使用Setho是由@Jemshit Iskendero提供的答案。