如何在王国浏览器中查看我的王国文件?

我刚刚发现的王国,并希望探索它在更多的细节,所以我决定创建示例应用程序,并有一个混乱左右。目前为止还不错。

然而,有一件事我还没有能够解决的是如何在王国浏览器中查看我的数据库。这怎么可能呢?

106968 次浏览

目前,王国浏览器不支持直接访问设备上的数据库,因此您需要从模拟器/手机复制数据库来查看它。这可以通过亚洲开发银行来实现:

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

这个命令将拉出所有使用 Realm.getInstance(new RealmConfiguration.Builder().build())创建的王国文件。默认的数据库名为 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" />

您可以直接访问领域文件。

首先,您可以将位于“/data/data/packagename/files”中的领域文件复制到 Environment. getExternalStorageDirectory () +’/FileName.domain’:

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.domain.

现在您可以在王国浏览器中打开该文件。

现在你可以使用 Facebook 开发的 斯泰索浏览器在 Chrome 浏览器上查看王国数据库。默认情况下,Stetho 允许查看 Sqlite、网络、共享首选项,但是通过额外的 插头在这里也允许查看域。

使用以上库配置完 Application类之后,当应用程序运行并连接时,打开 Chrome 浏览器并导航 chrome://inspect查看


enter image description here

然后是 Resources->Web Sql->default.realm


enter image description here

您还可以使用 ADB shell 和 run-as 命令从任何非根设备中提取文件。

你可以使用这些命令从你的应用程序的私有存储器中提取一个名为 your _ database _ file _ name 的数据库,该数据库位于 files 文件夹中:

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"

这是给像我这样懒惰的人的一个外壳:)

.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" ./

参考文献:

  1. Https://stackoverflow.com/a/28486297/2603230
  2. Https://android.stackexchange.com/a/129665/179720

以下是我的即用 shell 脚本。 只需更改包名称和您的 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/

有个变通办法。您可以直接从设备监视器访问该文件。只有在使用模拟器或根设备时才能访问此目录。

在 Android Studio 中:

选择

菜单 工具仿生人Android 设备监视器文件资源管理器资料资料→(包名)→ 文件→ * db.domain

从设备中取出这个文件:

Enter image description here

从 AndroidStudio3canary 1开始,介绍了设备文件资源管理器。您需要在这里查看领域文件。然后,(选择您的软件包)→选择领域文件→右键单击并 拯救。

Enter image description here

并打开文件到王国浏览器。您现在可以看到您的数据。

保持简单:

/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.domain,因为我在配置它时没有更改它的名称——您的名称可能有所不同。

这里有一个解决方案,通过使用 adb shell 中的 run-as命令,不需要您的手机被植根。唯一的前提条件是您必须在目标手机上安装应用程序的调试版本。

$ 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

您将从本地目录中的任何电话获得数据库副本,然后可以将其加载到王国浏览器。

查看 android 领域文件的选项很少:

  1. 就像@Christian Melchior 说的,你可以从设备中拉出你的领域数据库,然后用 OSX 王国浏览器在你的 Mac 上打开它

  2. 您可以使用我创建的第三方 Android 王国浏览器,使 Android 开发领域稍微容易一点。应用程序将显示您的设备上的所有领域文件,您可以查看所有您的领域文件,同时实时测试您的应用程序。

  3. 你可以使用 Chrome 浏览器 斯泰索完整描述如何使用 Setho 由@Jemshit Iskendero 提供答案。

对于 Android (不需要根你的设备)

若要获取设备上任何王国数据库的副本,请转到 Android Studio 中的 设备文件资源管理器

导航到 /data/data/your.package.name/files/

在那里您将找到您的 * . domain 文件。右击,然后 除了 A。确保在保存它们之前进行同步。

使用 王国浏览器或任何 这些查看 * . domain 文件:

Enter image description here

现在,如果使用模拟器,您可以直接访问它。

首先 记录文件在模拟器中的路径,如@bmunk 所说:

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

第二个 搜索它,右键单击文件并选择“另存为”,在对话框中会出现文件真正在系统中的路由。

enter image description here You can copy the route from the Save As dialog

然后,将路由粘贴到 RealmentStudio 的“打开本地文件”对话框中。

(我只在 Windows 中测试过)

两年多以来,王国浏览器已经可用于每个操作系统(Mac、 Linux、 windows)。

Https://docs.realm.io/sync/realm-studio

一直往前走。

域浏览器 反对,改为使用 王国工作室

给你

查看文件路径

console.log(realm.path)

作为 root 用户登录 adb

adb root

将领域文件拉到本地目录

adb pull /data/data/{app.identifier.com}/files/default.realm .

RealmentStudio 中的结果视图

领域工作室中的结果视图