Как просмотреть файл Realm в браузере Realm?
Я только что открыл Realm и хотел изучить его более подробно, поэтому я решил создать образец приложения и иметь беспорядок с ним. Пока все хорошо.
тем не менее, одна вещь, которую я еще не смог решить, - это просмотр моей базы данных в браузере Realm. Как это можно сделать?
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
посмотреть
затем
Resources->Web Sql->default.realm
Если вы ленивы, чтобы получить файл базы данных 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.царство
вытащить этот файл из устройства:
из Android Studio 3 canary 1 был представлен проводник файлов устройств. Вам нужно посмотреть файл realm здесь. Затем (выберите свой пакет) → выберите файл realm → щелкните правой кнопкой мыши и спасать.
и откройте файл в браузере 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 или какой-либо из эти для просмотра *.сфера файлы:
вот решение, которое не требует, чтобы ваш телефон был укоренен, используя внутри
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
объяснение:
- найти путь к вашей
adb
установить. Если вы используете Android Studio, то посмотрите на файл > структура проекта > расположение SDK > расположение Android SDK и добавьтеplatform-tools
на этот путь.- используйте полное имя вашего приложения для
run-as
аргумент- решите, куда вы хотите скопировать файл realm в
NB: файл называется default.царство, потому что я не меняли его имя при настройке - ваше может быть другим.
У вас есть несколько вариантов для просмотра файлов Android область:
как @Christian Melchior сказал, что вы можете вытащить свою базу данных realm с устройства и открыть ее на своем mac с помощью OSX Realm Browser
вы можете использовать третью сторону Android Realm Browser Я создал, чтобы сделать разработку android с realm немного проще. Приложение покажет вам все файлы realm на вашем устройстве, и вы можете просматривать все ваши файлы realm в реальном времени время тестирования вашего приложения.
вы можете использовать браузер 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" ./
ссылки: