how java android realm

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:

  1. https://.com/a/28486297/2603230
  2. 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:

  1. 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 agregue platform-tools a esa ruta.
  2. Use el nombre completo de su aplicación para el argumento de run-as
  3. 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:

  1. Como @Christian Melchior dijo que puede extraer su base de datos de dominio del dispositivo y abrirla en su Mac usando OSX Realm Browser

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

  3. Puede usar el navegador Chrome Stetho La descripción completa de cómo usar Setho es proporcionada por la respuesta de @Jemshit Iskendero.