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


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

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

12 107

12 ответов:

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

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

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

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

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

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


enter image description here

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


enter image description here

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

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

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

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

В Android Studio:

выберите

меню инструментыAndroid Android Монитор УстройстваFile Explorerсведениясведения → (Имя Пакета) → файлы → * db.царство

вытащить этот файл из устройства:

Enter image description here

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

Enter image description here

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

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

сначала вы можете скопировать файл области, который находится в' /data/data/packagename/files ' в среду.getExternalStorageDirectory ()+'/FileName.царство':

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.

для Android (корневой и без корней)

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

перейти к /data/data/your.package.name/files/.

там вы найдете свой *.файлы царства. Щелкните правой кнопкой мыши Сохранить Как. Убедитесь, что синхронизация перед сохранением их.

использовать Realm Browser или какой-либо из эти для просмотра *.сфера файлы:

Enter image description here

вот решение, которое не требует, чтобы ваш телефон был укоренен, используя внутри adb's оболочка. Только предварительное условие заключается в том, что вы должны иметь отладочную сборку вашего приложения, установленного на целевом телефоне.

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

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

все просто:

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

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

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

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

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

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

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

The .realm файл будет храниться внутри рядом с .

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