Як переглянути файл Realm у браузері Realm?


127

Я щойно відкрив Царство і хотів його детальніше вивчити, тому я вирішив створити зразок програми та зіткнутися з ним. Все йде нормально.

Однак одне, що мені ще не вдалося розробити, - це перегляд моєї бази даних у браузері Realm. Як це можна зробити?


ХОЧЕТЕ ЛЕГИЙ ШЛЯХ? Пропустіть реєстрацію шляху, команди adb та головний біль. У @devsmash є відповідь: stackoverflow.com/a/49705298/483520
Нолан Емі

Відповіді:


131

Наразі браузер Realm не підтримує доступ до баз даних безпосередньо на пристрої, тому для його перегляду потрібно скопіювати базу даних з емулятора / телефону. Це можна зробити за допомогою ADB:

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

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

Зауважте, що це буде працювати лише на емуляторі або якщо пристрій вкорінено.


25
Ви також можете записати точний шлях у своєму додатку за допомогою: Log.d ("", "path:" + realm.getPath ());
бомба

39
Тому браузер Realm для Mac марний. Хто використовує емулятор
Джемшит Іскендеров

10
Для не вкорінених пристроїв цей сценарій працює: gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39
jmartinalonso

3
якщо ви отримаєте помилку, як файл не знайдений, виконайте команду adb root команду спочатку, перш ніж витягнути файл realm
ранді

Це працює після використання кореня adb, але незалежно від того, що я роблю, файл realm каже, що він зашифрований при використанні realm browssr. Так, я читав про корупцію і таке, але нічого, що намагаюся, взагалі працює. Чи щось змінилося у царині?
Майк Вісь

104

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

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


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

Тоді Resources->Web Sql->default.realm


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


2
Не вдалося вирішити: com.uphyca: stetho_realm: 0.8.0 Може хтось мені допоможе в цьому? Вибачте, я не користувач Mac, тому виглядає, що таким чином я єдиний, з якого я можу переглядати файл своєї бази даних.
внимательно7j

4
Ви додали URL-адресу, https://github.com/uPhyca/stetho-realm/raw/master/maven-repoяк показано тут github.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
Моя провина, дуже дякую! Я пропустив це. Тепер він працює як слід!
уважно7j

1
Я спостерігаю за змінами таблиці "А", натискаючи якусь іншу таблицю, а потім знову натискаючи таблицю "А" @AlexKost
Jemshit Iskenderov

1
дивіться цю публікацію, якщо хтось має проблеми із побаченням полів: github.com/uPhyca/stetho-realm/isissue/45 .... Я бачу свої поля, але немає даних .... hmmm
Mike6679

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

чи є якийсь інший спосіб витягнути базу даних з невідладного apk?
JEGADEESAN S

якби це було можливо, вся ОС Android була б абсолютно небезпечною, є ймовірність, що це стане можливим лише на кореневих пристроях, але я цього ніколи не робив
Apperside

Це може не працювати на пристроях Samsung через їхні помилкові виконання.
SkorpEN

Отже, ми можемо скористатись цим, щоб імпортувати нашу відредаговану сферу на її місце? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ендер

52

Якщо ви ледачі отримувати файл бази даних realm щоразу за допомогою adb, ви можете додати функцію експорту до свого андроїд-коду, яка надсилатиме вам електронний лист із файлом бази даних realm як додаток.

Ось приклад:

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

3
Це особливо добре, якщо ви використовуєте Pushbullet . Потім ви можете натиснути повідомлення на ваш браузер Chrome, і воно завантажить файл. Потім файл можна відкрити в браузері Realm
ymerdrengene


42

Для Android (Не потрібно викорінювати свій пристрій)

Щоб отримати копію будь-якої бази даних Realm на своєму пристрої, перейдіть до Провідника файлів пристроїв в Android Studio.

Перейдіть до /data/data/your.package.name/files/.

Там ви знайдете свої файли * .realm. Клацніть правою кнопкою миші, а потім Зберегти як . Обов’язково синхронізуйте, перш ніж зберегти їх.

Використовуйте браузер Realm або будь-який із них для перегляду * .realm файлів:

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


2
Таке просте рішення, на це тепер має бути відповідь
Стівен Елліотт

Абсолютно. Це шлях. 🙏
Нолан Емі

Переконайтеся, що для вашої програми встановлено налагоджувальну помилку для перегляду даних.
Аман Верма

@AmanVerma Це налагодження через USB в параметрах розробника. Налагодження USB повинно бути включено, щоб використовувати Провідник файлів пристроїв
krhitesh

Користувач Linux може завантажити студію realm, використовуючи realm.io/products/realm-studio та відкрити звідти файл realm
B.shruti

19

Існує рішення. Ви можете безпосередньо отримати доступ до файлу з монітора пристрою. Ви можете отримати доступ до цього каталогу лише тоді, коли ви використовуєте емулятор або вкорінений пристрій.

В Android Studio:

Виберіть

Інструменти меню → AndroidМонітор пристроїв AndroidПровідник файлівДанідані → (Ім'я вашого пакета) → файли → * db.realm

Витягніть цей файл із пристрою:

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

З Android Studio 3 canary 1 було представлено Провідник файлів пристроїв. Тут потрібно подивитися файл царства. Потім ((виберіть пакет) → виберіть файл сфери → Клацніть правою кнопкою миші та збережіть.

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

І відкрийте файл у браузері Realm. Ви можете переглянути свої дані зараз.


Дякую. однак він не працює з реальним
пристроєм. Він

1
@prathamkesarkar, тому я написав емулятор або вкорінений пристрій, оскільки ви не можете отримати доступ до цих папок у звичайному пристрої.
Aveek

14

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

Спочатку ви можете скопіювати файл realm, який знаходиться в '/ 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.


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

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


1
mac adb за замовчуванням ... / Бібліотека / Android / sdk / platform-tools
Франциско Кастро

3

Тепер ви можете отримати доступ до нього безпосередньо, якщо використовуєте емулятор.

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

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

По-друге, знайдіть його і зробіть правою кнопкою миші файл та виберіть "Зберегти як", у діалоговому вікні з'явиться маршрут, де файл насправді є у вашій системі.

введіть тут опис зображення Ви можете скопіювати маршрут із діалогового вікна «Зберегти як»

А потім просто вставте маршрут у діалогове вікно «Відкрити локальний файл» програми Realm Studio.

(Я тестував це лише в Windows)


1
Це найкорисніша відповідь, дякую! Не відображає шлях для macOS, але все одно легко знайти файл.
Марія

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> Місце розташування SDK для Android та додайтеplatform-tools цей шлях.
  2. Використовуйте повне кваліфіковане ім’я програми для run-as аргументу
  3. Вирішіть, куди потрібно скопіювати файл realm

Примітка: файл називається default.realm, оскільки я не змінив його ім'я під час його налаштування - ваше може бути іншим.


1

У вас є кілька варіантів перегляду ваших андроїд-файлів:

  1. Як @Christian Melchior сказав, що ви можете витягнути свою базу даних із пристрою та відкрити її на своєму mac за допомогою браузера OSX Realm

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

  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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.