java - how - ¿Cómo veo mi archivo Realm en el navegador Realm?
realm file swift (13)
Para Android (no es necesario rootear su dispositivo)
Para obtener una copia de cualquiera de las bases de datos de Realm en su dispositivo, vaya a Device File Explorer en Android Studio.
Navegue a
/data/data/your.package.name/files/
.
Allí encontrará sus archivos * .realm. Haga clic derecho, luego Guardar como . Asegúrese de sincronizar antes de guardarlos.
Use Realm Browser o cualquiera de these para ver archivos * .realm:
Acabo de descubrir Realm y quería explorarlo con más detalle, así que decidí crear una aplicación de muestra y tener un lío. Hasta aquí todo bien.
Sin embargo, una cosa que aún no he podido resolver es cómo ver mi base de datos en el navegador Realm. ¿Cómo se puede hacer esto?
Actualmente, Realm Browser no admite el acceso a bases de datos directamente en el dispositivo, por lo que debe copiar la base de datos desde el emulador / teléfono para verla. Eso se puede hacer usando ADB:
adb pull /data/data/<packagename>/files/ .
Ese comando
Realm.getInstance(new RealmConfiguration.Builder().build())
todos los archivos Realm creados usando
Realm.getInstance(new RealmConfiguration.Builder().build())
.
La base de datos predeterminada se llama
default.realm
.
Tenga en cuenta que esto solo funcionará en un emulador o si el dispositivo está rooteado.
Ahora puede acceder directamente si está utilizando un emulador.
Primero, registre la ruta donde está el archivo en el emulador como @bmunk dice:
Log.d(TAG, "path: " + realm.getPath());
Segundo búscalo y haz clic derecho en el archivo y elige "Guardar como", en el cuadro de diálogo aparecerá la ruta donde realmente está el archivo en tu sistema.
Y luego, simplemente pegue la ruta en el cuadro de diálogo "Abrir archivo local" de Realm Studio.
(He probado esto solo en Windows)
Ahora puede ver Realm DB en el navegador Chrome con Stetho , desarrollado por Facebook. De manera predeterminada, Stetho permite ver Sqlite, red, preferencias compartidas, pero con un complemento adicional aquí también permite ver Realm.
Después de configurar su clase de
Application
con las bibliotecas anteriores, mientras la aplicación se está ejecutando y conectada, abra el navegador Chrome y navegue por
chrome://inspect
para ver
Luego
Resources->Web Sql->default.realm
Aquí está mi script de shell listo para usar. Simplemente cambie el nombre del paquete y sus rutas adb, luego el script hará lo necesario.
#!/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
Más detalles en esta publicación de blog: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/
Aquí hay una concha para gente perezosa como yo :)
El archivo
.realm
se almacenará dentro de la carpeta
tmpRealm/
junto al archivo
.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 ./
O si prefiere dejar
tmpRealm/
be en la tarjeta 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" ./
Referencia:
- https://.com/a/28486297/2603230
- https://android.stackexchange.com/a/129665/179720
Aquí hay una solución que no requiere que su teléfono esté rooteado, haciendo uso del comando
run-as
presente dentro del shell de
adb
.
La única condición previa es que debe tener una versión de depuración de su aplicación instalada en el teléfono de destino.
$ 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
Tendrá una copia de la base de datos desde cualquier teléfono dentro de su directorio local, que luego puede cargar en el navegador Realm.
Hay una solución alternativa. Puede acceder directamente al archivo desde el monitor del dispositivo. Puede acceder a este directorio solo cuando está utilizando un emulador o dispositivo rooteado.
En Android Studio:
Seleccionar
Herramientas de menú → Android → Monitor de dispositivo Android → Explorador de archivos → datos → datos → (Nombre del paquete) → archivos → * db.realm
Extraiga este archivo del dispositivo:
Desde Android Studio 3 canary 1, se ha introducido Device File Explorer. Necesitas mirar el archivo del reino aquí. Luego, (seleccione su paquete) → seleccione el archivo de reino → Haga clic derecho y guarde.
Y abra el archivo en el navegador Realm. Puedes ver tus datos ahora.
Manteniéndolo simple:
/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm
Explicación:
-
Encuentre la ruta a su instalación de
adb
. Si está utilizando Android Studio, busque Archivo> Estructura del proyecto> Ubicación del SDK> Ubicación del SDK de Android y agregueplatform-tools
a esa ruta. -
Use el nombre completo de su aplicación para el argumento de
run-as
- Decide dónde quieres copiar el archivo de reino
NB: el archivo se llama default.realm porque no he cambiado su nombre al configurarlo; el tuyo puede ser diferente.
Puede acceder al archivo del reino directamente. Aquí hay una solución que he usado.
Primero puede copiar el archivo de dominio que se encuentra en ''/ data / data / packagename / files'' en 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();
}
En segundo lugar, use la herramienta ADB para extraer ese archivo de esta manera:
$ adb pull /sdcard/default.realm.
Ahora puede abrir el archivo en el navegador Realm.
Si eres flojo para obtener el archivo de base de datos del reino cada vez con adb, puedes agregar una función de exportación a tu código de Android, que te envía un correo electrónico con el archivo de la base de datos del reino como archivo adjunto.
Aquí un ejemplo:
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"));
}
No olvide agregar este permiso de usuario a su archivo de manifiesto de Android:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
También puede extraer su archivo desde cualquier dispositivo NO rooteado utilizando el shell ADB y el comando run-as.
Puede usar estos comandos para extraer del almacenamiento privado de su aplicación una base de datos llamada your_database_file_name ubicada en la carpeta de archivos:
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"
Tiene pocas opciones para ver sus archivos de reino de Android:
-
Como @Christian Melchior dijo que puede extraer su base de datos de dominio del dispositivo y abrirla en su Mac usando OSX Realm Browser
-
Puede usar el navegador de Android Realm de terceros que creé, para hacer que el desarrollo de Android con el reino sea un poco más fácil. La aplicación le mostrará todos los archivos de dominio en su dispositivo, y puede ver todos sus archivos de dominio en tiempo real mientras prueba su aplicación.
-
Puede usar el navegador Chrome Stetho La descripción completa de cómo usar Setho es proporcionada por la respuesta de @Jemshit Iskendero.