Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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


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

Тогда Resources->Web Sql->default.realm


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

Ответ 3

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

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ответ 4

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

Ответ 5

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

В Android Studio:

Выбрать

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

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

Enter image description here

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

Enter image description here

И откройте файл в Realm Browser. Теперь вы можете видеть свои данные.

Ответ 6

Для Android (не нужно рутировать ваше устройство)

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

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

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

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

Enter image description here

Ответ 7

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

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

Ответ 8

Здесь решение, которое не требует, чтобы ваш телефон был внедрен, с помощью команды 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.

Ответ 9

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

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

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

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

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

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

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

Ответ 10

Вот моя готовая к использованию оболочка script. Просто измените имя пакета и ваши пути adb, затем script сделает необходимые.

#!/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/

Ответ 11

Сохранение простоты:

/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, посмотрите на File > Project Structure > SDK Location > Android SDK Location и добавьте platform-tools к этому пути.
  • Используйте полное имя приложения для аргумента run-as
  • Решите, где вы хотите скопировать файл области в

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

Ответ 12

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

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

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

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

Ответ 13

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

Файл .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. fooobar.com/info/38050/...
  2. https://android.stackexchange.com/a/129665/179720