Как я могу просмотреть свой файл 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:
Выбрать
Инструменты меню → Android → Android 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:
Как @Christian Melchior сказал, что вы можете извлечь свою базу данных областей с устройства и открыть ее на своем Mac с помощью браузера OSX Realm.
Вы можете использовать сторонний Android Realm Browser, который я создал, чтобы немного облегчить разработку Android с помощью Realm. Приложение покажет вам все файлы областей на вашем устройстве, и вы сможете просматривать все файлы областей в режиме реального времени во время тестирования приложения.
Вы можете использовать браузер 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
Объяснение:
- Найдите путь к вашему
adb
установить. Если вы используете Android Studio, посмотрите Файл> Структура проекта> Расположение SDK> Расположение Android SDK и добавьтеplatform-tools
на этот путь. - Используйте полное имя вашего приложения для
run-as
аргумент - Решите, куда вы хотите скопировать файл области
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
Вот мой готовый скрипт оболочки. Просто измените имя пакета и ваши пути 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" ./
Ссылка: