Как я могу просмотреть свой файл Realm в браузере Realm?

Я только что открыл Realm и хотел изучить его более подробно, поэтому я решил создать пример приложения и возиться с ним. Все идет нормально.

Тем не менее, одна вещь, которую я пока не смог понять, это как просмотреть мою базу данных в браузере Realm. Как это может быть сделано?

15 ответов

Решение

В настоящее время браузер Realm не поддерживает доступ к базам данных непосредственно на устройстве, поэтому вам необходимо скопировать базу данных из эмулятора / телефона, чтобы просмотреть ее. Это можно сделать с помощью ADB:

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

Эта команда извлечет все файлы Realm, созданные с использованием Realm.getInstance(new RealmConfiguration.Builder().build()), База данных по умолчанию называется default.realm,

Обратите внимание, что это будет работать только на эмуляторе или если устройство рутировано.

Теперь вы можете просматривать Realm DB в браузере Chrome с помощью Stetho, разработанного Facebook. По умолчанию Stetho позволяет просматривать Sqlite, сеть, общие предпочтения, но с дополнительным плагином здесь также можно просматривать Realm.

После настройки вашего Application класс с вышеуказанными библиотеками, пока приложение работает и подключено, откройте браузер Chrome и перейдите chrome://inspect видеть


введите описание изображения здесь

затем Resources->Web Sql->default.realm


введите описание изображения здесь

Вы также можете извлечь файл с любого нерутированного устройства, используя оболочку ADB и команду 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"

Если вам лень каждый раз получать файл базы данных области с помощью 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" />

Для Android (с рутом и без рута)

Чтобы получить копию любой базы данных Realm на своем устройстве, перейдите в Device File Explorer в Android Studio.

Перейдите к /data/data/your.package.name/files/,

Там вы найдете ваши *.realm файлы. Щелкните правой кнопкой мыши, затем " Сохранить как". Обязательно синхронизируйте, прежде чем сохранять их.

Используйте Realm Browser или любой из них для просмотра файлов *.realm:

Есть обходной путь. Вы можете напрямую получить доступ к файлу с монитора устройства. Вы можете получить доступ к этому каталогу, только если вы используете эмулятор или рутированное устройство.

В Android Studio:

Выбрать

Инструменты меню → AndroidAndroid Device MonitorПроводникДанныеДанные → (Имя вашего пакета) → Файлы → * db.realm

Вытащите этот файл с устройства:

Из Android Studio 3 canary 1 был представлен Обозреватель файлов устройств. Вам нужно посмотреть файл области здесь. Затем (выберите ваш пакет) → выберите файл области → Щелкните правой кнопкой мыши и сохраните.

И откройте файл в браузере областей. Вы можете увидеть свои данные сейчас.

Вы можете получить доступ к файлу области напрямую. Вот решение, которое я использовал.

Сначала вы можете скопировать файл области, который находится в "/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.

Вот решение, которое не требует, чтобы ваш телефон был рутирован, используя 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

У вас будет копия БД с любого телефона в вашем локальном каталоге, которую вы затем сможете загрузить в браузер Realm.

Уже более двух лет Realm Browser доступен для всех операционных систем (Mac, Linux, Windows).

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

Работает прямо.

Теперь вы можете получить к нему доступ напрямую, если используете эмулятор.

Сначала запишите путь, по которому файл находится в эмуляторе, как @bmunk говорит:

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

Второй Поиск и сделайте правый клик на файле и выберите "Сохранить как", в диалоговом окне появится маршрут, где файл действительно находится в вашей системе.

А затем просто вставьте маршрут в диалоговое окно "Открыть локальный файл" Realm Studio.

(Я проверял это только в Windows)

У вас есть несколько вариантов просмотра файлов области Android:

  1. Как @Christian Melchior сказал, что вы можете извлечь свою базу данных областей с устройства и открыть ее на своем Mac с помощью браузера OSX Realm.

  2. Вы можете использовать сторонний Android Realm Browser, который я создал, чтобы немного облегчить разработку Android с помощью Realm. Приложение покажет вам все файлы областей на вашем устройстве, и вы сможете просматривать все файлы областей в режиме реального времени во время тестирования приложения.

  3. Вы можете использовать браузер Chrome Stetho. Полное описание того, как использовать Setho, предоставлено ответом @Jemshit Iskendero.

Сохраняя это простым:

/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. Решите, куда вы хотите скопировать файл области

NB: файл называется default.realm, потому что я не менял его имя при настройке - ваше может отличаться.

Realm Browser является Устаревшее , используйте Realm студии вместо этого.

ЗДЕСЬ

Просмотр пути к файлу

      console.log(realm.path)

Войдите в adb как root

      adb root

Вытащить файл области в локальный каталог

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

Просмотр результатов в Realm Studio

Просмотр результатов в Realm studio

Вот мой готовый скрипт оболочки. Просто измените имя пакета и ваши пути 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/

Вот оболочка для таких ленивых как я:)

.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. /questions/31767681/kak-ya-mogu-prosmotret-svoj-fajl-realm-v-brauzere-realm/31767694#31767694
  2. https://android.stackexchange.com/a/129665/179720
Другие вопросы по тегам