CIFS & DirectoryBind (& Sambadroid), un paquete de utilidades con utilidades muy interesantes. [CIFS&BIND]
Uso de este artículo
Se permite utilizar este articulo, ya sea copiandolo entero o partes de el, o referenciándola mediante un link, a cualquiera que lo desee, con la única condición de que se mantenga el autor y un enlace a la fuente original de este artículo, y que se encuentra en mi blog.
Para actualizaciones sobre este artículo, sugiero visitar el enlace mencionado anteriormente
Introducción
Hasta hace poco venía hablando en foros sobre el uso de algunas aplicaciones que, en mi uso diario, resultaban tan normales y "triviales", que no me habia parado a pensar que quizás existan personas que no se enteran de lo que comento, o no pueden seguirme por que no han tenido oportunidad de probar estas utilidades, o simplemente las conocen pero no ven en que pueden serles útiles.
Este pequeño articulo será para explicar algunas de las que estoy utilizando y que, en mi opinión, resultan de lo mas interesantes y prácticas, además de que intento explicar un uso un poco mas "avanzado" en términos de cómo implementar estas herramientas de manera de generar un escenario de ejecución y/o pruebas interesante en un entorno de dispositivos Android. En foros, me referiré a este sistema como Cifs&Bind, por si alguien me quiere hacer alguna pregunta al respecto.
¿Para que sirve todo esto?
Por si alguien no se aclara para que sirve todo esto, lo diré de una manera mas bien simple: Instalar y cargar juegos y aplicaciones con sus datos a una unidad de red, para no tener que utilizar la memoria de nuestro dispositivo android.
Un ejemplo práctico de uso, cuando recibo un dispositivo para probarlo y hacer una review, lo primero que verifico es si acaso tiene soporte CIFS. En caso de tenerlo, simplemente enlazo el directorio que tengo preparado y en unos pocos minutos ya tengo instalado todos los programas, juegos (con sus datos incluídos), ficheros de multimedia, etc, para probar la tablet,. En pocas palabras, en unos 10 minutos tengo el sistema totalmente instalado, con unas 100 aplicaciones instaladas, y todo listo para ejecutar en el dispositivo (Tablet, consola, android tv, móvil, etc).
¿Y para que podría ser útil para un usuario normal, que no prueba tantos dispositivos de manera tan frecuente?, pues hay una razón importante, y es que si deseas "limpiar" tu tablet y empezar de cero, ya sea flasheando o formateando la sdcard interna, o volviendo a los valores de fábrica, en pocos minutos puedes tener tu dispositivo android limpio, funcional y con las aplicaciones actualizadas, y lo mas importantes, sin descargar nada de internet. Esto significa que podrías llevarte el contenido del directorio instalado en un disco duro, pendrive, etc, y no perder Megas de tu tarifa de datos, para descargar datos de una aplicación (a excepción de que descargues una actualización), y simplemente utilizar la conexión de datos de, por ejemplo, tu movil o tablet, para verificar licencias y ese tipo de cosas.
Como ya se puede suponer, este sistema es bastante "flexible", ya que con unos pocos cambios se podría enlazar a un dispositivo USB, o a una microSD, etc. y toda la estructura seguiría siendo válida.
Todo este sistema de directorios surgió como idea base cuando estaba realizando el firmware Recustom de la JXDS7300B, y he seguido implementando la idea, extendiéndola de manera de hacerla mas práctica, pero no por eso mas complicada (que no lo es, aunque parezca lo contrario)
Para quienes tengan conocimientos avanzados de Android, estaré encantado de recibir vuestros comentarios/críticas sobre lo que expongo. Mis conocimientos están basados en mi experiencia utilizando y probando dispositivos, pero evidentemente puedo cometer errores, y por tanto agradezco cualquier correccción al respecto que se pueda hacer.
Este artículo está dedicado principalmente a los usuarios con menos conocimientos, pero con inquietudes de hacer cosas, y a los cuales intento explicarles las cosas que hago en términos que podamos entender todos. (o lo intento al menos)
Nota: La primera parte de este artículo intenta explicar de donde sale la idea y como llego a implementarla. La seguna parte comenta en pocos pasos como implementarla, asi que si quieres evitarte mi explicación, que mas que explicar incluso puede llegar a confundir, puedes saltarte directamente a la última sección de este artículo (Descargas y puesta en funcionamiento), con descargas y explicaciones breves sobre los pasos a seguir.
Nota2: Aunque intento explicar el procedimiento lo menos técnico que puedo, es posible que para algunas cosas se necesiten unos datos mínimos básicos para poder entender el procedimiento. Por favor, si es necesario usad google para buscar información en los puntos que no explico en detalle.
Nota3: Para montar Android y sus directorios (data y obb), sugiero asegurarnos de una conexión suficientemente rápida para no tener muchas demoras a la hora de cargar juegos y aplicaciones en nuestro dispositivo Android. En caso de tener una conexión mas bien baja, probad que tal os va y, discriminar en función de la velocidad que percibáis para saber que aplicaciones instalar de forma remota y cuales no.
Como guía para lo anterior, decir que en una conexión lenta pueden ir bien juegos como Mini Motor Racing, o juegos de este tipo, pero cargar un Nova3 desde una conexión lenta (18MBs, por poner un ejemplo), pueden suponer unos 5 minutos o mas de carga. Por lo mismo, es altamente recomendable utilizar el sistema mas óptimo de red para montar estos directorios. En cualquier caso, las velocidades serán suficientes para cargar otro tipo de contenidos como ROMS de MAME, música, etc, y estos siempre se podrán ejecutar sin mayores problemas en casi cualquier red.
DirectoryBind
Esta aplicación es muy "simple" en cuanto a lo que hace, y es tan simple, que cuesta imaginar para que podríamos necesitarla. Dentro de mis instalaciones en Android, resulta ser una de las aplicaciones básicas y fundamentales, por el tiempo que me ahorra a la hora de instalar aplicaciones y ejecutarlas, en distintos dispositivos, y no perder tiempo en la descarga de los ficheros, etc.
Esta aplicación genera "enlaces simbólicos", o "atajos directos". Para quienes entiendan mejor la terminología de Windows, es como poner un acceso directo de un elemento en el escritorio, pero que en realidad se encuentra en otra parte del disco.
En este caso, DirectoryBind solo hace enlaces (accesos directos) de directorios, asi, cuando el sistema accede a una carpeta que está enlazada, en realidad va a otra carpeta, y mira/actualiza su interior.
para no complicar el tema, voy a poner un ejemplo de como podríamos utilizar este programa.
Imaginemos que tenemos un dispositivo android, con un HUB USB conectado con 5 discos duros/pendrives, y en cada uno de ellos tenemos una carpeta con roms de varios sistemas.
- HDD1
- /myroms/psx
- /myroms/nes
- HDD2
- /games/emulation/mame
- /games/emulation/gba
- /games/emulation/nes
- /mydownloads/test/mameroms
- HDD3
- /roms/psx
- /roms/n64
- HDD4
- /downloading/mamesroms/emule/mame
- HDD5
- /test1/nes
- /n64/mygames/
en este ejemplo, tenemos varios sistemas repartidos por cada disco.
Si cargamos un emulador, para buscar un juego de nes, por ejemplo, tendríamos que navegar entre varios dispositivos, carpetas, para dar con la rom que queremos.
Obviando que podemos simplemente organizar los directorios, voy a utilizar DirectoryBind para generar una estructura que me sea mas fácil para acceder a estos contenidos. En mi caso, voy a generar la estructura ordenando por sistemas, de tal manera que cuando acceda a la microsd del dispositivo android, tenga carpetas de roms por sistema.
En la microsd, genero la estructura:
- /microsd/roms/nes
- hdd1
- hdd2
- hdd5
- /microsd/roms/psx
- hdd1
- hdd3
- /microsd/roms/n64
- hdd3
- /microsd/roms/gba
- hdd2
- /microsd/roms/mame
- hdd2
- hdd2b
- hdd5
luego, en directorybind, enlazo los siguientes enlaces:
- /microsd/roms/nes
- hdd1 -> /myroms/nes
- hdd2 -> /games/emulation/nes
- hdd5 -> /test1/nes
- /microsd/roms/psx
- hdd1 -> /myroms/psx
- hdd3 -> /roms/psx
- /microsd/roms/n64
- hdd3 -> /roms/n64
- /microsd/roms/gba
- hdd2 -> /games/emulation/gba
- /microsd/roms/mame
- hdd2 -> /games/emulation/mame
- hdd2b -> /mydownloads/test/mameroms
- hdd4 -> /downloading/mamesroms/emule/mame
con la estructura anterior, lo que he hecho es "ordenar" los discos que tenía sin normalizar, y me es mas fácil buscar información cuando estoy dentro de una aplicación, por que si estoy en Retroarch, y busco un juego de mame, simplemente tengo que abrir la carpeta:
- /microsd/roms/mame
y dentro solo me encontraré con los directorios de que he generado por cada disco duro/directorio:
- hdd2
- hdd2b
- hdd4
y dentro de estos directorios, solo hay roms, por lo que es mucho mas fácil buscar una rom específica, si no está en el directorio "hdd2", vuelvo atrás solo un nivel y voy al siguiente directorio "hdd2b", y lo mismo para "hdd4", en vez de estas cambiando entre "HDD2/games/emulation/mame", "HDD2/mydownloads/test/mameroms" o "HDD4/downloading/mamesroms/emule/mame".
Otra ventaja que tiene la generación de estructuras con DirectoryBind, es que si un dispositivo/directorio no está disponible, no se genera el enlace, por lo que para nosotros veriamos en nuestro caso los directorios limpios
Por poner un ejemplo, si en el mismo ejemplo anterior tenemos que el disco duro HDD4 no lo hemos conectado, entonces el directorio quedaría así:
- /microsd/roms/mame
- hdd2 -> /games/emulation/mame
- hdd2b -> /mydownloads/test/mameroms
- hdd4 -> /microsd/roms/mame/hdd4
en este caso, hdd4 no mostraría ningún fichero, por que el enlace hacia el disco duro "HDD4/downloading/mamesroms/emule/mame" no se ha realizado.
A esto le podemos sacar una ventaja y funcionalidad muy interesante, que paso a detallar.
Tener 2 (o mas) Perfiles de contenidos, segun como nos conectemos
Supongamos el siguiente escenario:
- /microsd/roms/mame -> HDDUSB/myroms/mame
tengo un directorio de roms, que se alimenta de lo que se encuentra en el disco duro conectado por USB, y en el directorio de roms especificado.
Ahora, supongamos que estoy con una tablet, con ese disco duro conectado, y tengo que salir. Evidentemente sería muy molesto tener que ir cargando con la tablet, y un disco duro conectado por USB para poder disfrutar de mis roms de mame.
Podría copiar en un directorio algunas roms (por ejemplo, street fighter), y desde el emulador cargarlas. Evidentemente es la mejor de las soluciones, pero voy a ir un poco mas allá, y la rom del street fighter, la voy a copiar en la ruta:
- /microsd/roms/mame/romstreetfighter.zip
Bien, ahora que sucede?, si tengo conectado el disco duro HDDUSB y habilito el DirectoryBind, voy a ver el contenido del disco duro dentro de la carpeta de roms de mame, pero NO voy a ver "romstreetfighter.zip", a no ser que el disco duro (la carpeta del disco) tenga esta rom, que podria ser algo como esto:
- HDDUSB/myroms/mame/psychicsoscar.zip
- HDDUSB/myroms/mame/rabiolepus.zip
- HDDUSB/myroms/mame/marvelvscapcom.zip
- HDDUSB/myroms/mame/romstreetfighter.zip
- HDDUSB/myroms/mame/ghostngoblins.zip
Pero la gracia viene cuando desconecto el disco duro y/o deshabilito el DirectoryBind, ya que no voy a ver el contenido enlazado del disco (las 5 roms anteriores), pero si el contenido real de la carpeta (1 rom), por lo que pasaré de tener todas las roms que antes veía, a solo las que tenga copiadas aquí, que en este caso es la romstreetfighter.zip
Asi, en este directorio puedo copiar varias roms que me interesa llevar "encima", para cuando no tengo el disco duro conectado. No tengo necesidad de llevarme el directorio completo de roms de mame, solo algunas, para usar mientras no estoy con el disco USB conectado a la tablet.
Por tanto, para este ejemplo, cuando tengo habilitado correctamente el DirectoryBind, tendré 5 roms (Perfil 1), y cuando esté deshabilitado, sólo 1 (Perfil 2).
De aquí en adelante, ya es cuestión de cada uno el ver la utilidad práctica de estas configuraciones, pero se pueden aplicar a todos los ámbitos: películas, música, instalación de aplicaciones, etc.
Alternativa al Swap de la microSD
Cuantas veces no he oído expresiones similares a "no tengo espacio en el teléfono, pero si acabo de instalar una microsd de 32GB que está nueva!", y claro, es normal que suceda esto, y es que el sistema android tiene configurado de forma predeterminada el uso del punto de montaje /sdcard/ como su "disco duro", y por lo general esta muchos dispositivos vienen con una unidad interna de memoria, que está asociada a ese directorio (/sdcard/).
Generalmente, esta unidad tiene muy poca capacidad, y con 2 o 3 juegos instalados, ya no tienes espacio para poder seguir instalando nada mas, y tienes que eliminar algun juego y sus datos asociados, para poder seguir instalando mas cosas. (aún cuando hayas instalado una microSD de muchos GB que esté recién formateada)
La solución general para esto es, por norma, editar el fichero vold.fstab, y realizar lo que se llama un "swap", para cambiar la memoria interna, por la microsd, y que sea ésta la que se destine para instalación de datos de programas/juegos. Pero este cambio no siempre se puede hacer, y requiere de algunos conocimientos, aunque no muy avanzados, pero si no se sabe lo que se hace, podrían dejar la tablet en un estado que no permita su uso normal.
Para este caso, una forma de solucionar el problema es generar un enlace de los directorios mas utilizados en el punto /sdcard/, y enlazarlos con otros en una microsd o el medio externo que queramos.
Los directorios que mas se utilizan en una instalación Android standard, pueden ser:
- /sdcard/android (aquí se descargan e instalan la mayoría de aplicaciones, y sobre todo juegos. esta carpeta es, por lo general, la que mas espacio ocupa dentro de la microsd y está conformada por los directorios "data" y "obb")
- /sdcard/DCIM (Directorio donde se almacenan las fotografías tomadas con el dispositivo)
- /sdcard/pictures (Directorio donde se almacenan generalmente las capturas de pantalla que realizamos en el dispositivo)
- /sdcard/gameloft (Directorio donde algunas aplicaciones y juegos mas antiguos de Gameloft, descargaban sus datos. Era un directorio que ocupaba mucho espacio generalmente)
asi, y poniendo en práctica lo que he comentado hasta ahora sobre DirectoryBind, lo que genralmente hago en mis instalaciones (tablets, smartphones, etc) es hacer el siguiente enlace.
Suponiendo que ma microsd está montada en la ruta "/mnt/external_sdcard/"
/sdcard/android --> /mnt/external_sdcard/android
/sdcard/DCIM --> /mnt/external_sdcard/DCIM
/sdcard/pictures --> /mnt/external_sdcard/pictures
/sdcard/gameloft --> /mnt/external_sdcard/gameloft
Nota: La ruta de la microsd puede variar de un dispositivo a otro. Para el ejemplo anterior he utilizado "/mnt/external_sdcard", pero algunas de las rutas frecuentes también pueden ser:
- /mnt/sdcard/ext_sd
- /mnt/ext_sd
- /mnt/sdcard1
- /mnt/microsd
otra ventaja de esto es que si tenemos 2 dispositivos (2 teléfonos por ejemplo) y nos queremos pasar de uno a otro, pero no tener que descargar los datos de las aplicaciones (aunque hay que instalar los apk, por lo menos), simplemente basta con tener los directory bind correspondientes en cada uno de ellos y quitar la microsd de un dispositivo para insertarla en el otro, y ya tendremos pasados los datos de juegos, etc, sin necesidad de descargarlos nuevamente.
CIFS
Este protocolo/módulo/capa/etc (no se muy bien como definirlo, pero para el caso nos dará igual ya que es mas importante saber como usarlo) nos permite generar enlaces a directorios compartidos en la red, de manera que podamos acceder a ellos de forma directa, como parte del sistema de ficheros de Android.
Para explicarlo mejor, sobre todo para quienes sean menos técnicos, voy a utilizar un ejemplo.
Suponiendo que tenemos un directorio compartido en nuestro PC, y dentro tenemos una película que ocupa 2GB de espacio.
En Android, existen alternativas para poder ver estas unidades de red, como puede ser ES File Explorer, que puede escanear y conectarse a estas unidades de red. Hasta aquí no vemos problemas, pero si intentamos abrir la película que tenemos en esta carpeta compartida (con el mismo es file explorer), nos daremos cuenta que muy probablemente la aplicación se "congele" y no responda por un buen rato.
Bueno, en realidad no es que tenga problemas, sino que como le he mos dicho que queremos abrir el vídeo, lo que hace el sistema es copiar el fichero entero a nuestro dispositivo para, a continuación, abrirlo, y con todo lo que supone copiar un fichero de 2GB por red, ver si tenemos espacio en la microsd para almacenar el fichero, etc.
¿Por que hace esto el sistema? básicamente, por que las aplicaciones NO tienen acceso a estas unidades de red, ya que para ellas no existe dicha unidad. Solo el ES File Explorer (o la herramienta que estemos utilizando) serán capaces de acceder a este recurso y su contenido, por lo que para dejarlo a disposición del resto de aplicaciones (para visualizar su contenido, por ejemplo), lo mejor que puede hacer ES File Explorer es copiar el contenido que el puede acceder (recurso de red) y dejarlo en alguna parte que el sistema si pueda acceder a el sin problemas (la microsd, por ejemplo)
La herramienta ES File Explorer está muy bien para algunas cosas, pero no es práctica para otras como el ejemplo que antes he comentado.
Aquí es donde vemos la principal diferencia que puede suponer el utilizar CIFS, ya que esta herramienta permite conectar una unidad compartida, pero al mismo tiempo la monta como parte de su propio sistema de ficheros, por lo que está disponible para que cualquier aplicación acceda a ella directamente. Así, en el mismo ejemplo anterior, si con ES File Explorer por ejemplo vamos a la carpeta:
- /mnt/cifs/recursocompartido
Al cargar la película, veremos que se lanzará inmediatamente el reproductor que tengamos instalado, y la reproducción empezará también. Como el sistema puede acceder directamente al contenido, no es necesario realizar una copia de la película para, posteriormente realizar su visualizado.
El mismo caso para cargar una rom o iso desde un emulador. Imagina estar en un emulador de PSX, y quieres cargar la ISO que has generado de tu Tekken3 (sin rippear, una iso completa)... y claro, son 640MB de datos... y le das a ejecutar y se toma 15 minutos en copiar el ISO correspondiente para, a continuación, ejecutarlo (y eliminar la iso temporal que ha copiado localmente, cuando hayas terminado de utilizarla).
Con CIFS, simplemente ejecutas la ISO de forma directa, y "rápida" (sin la tardanza en esperar a que empiece la emulación).
Uso extendido de CIFS
Vamos a sumar lo que he comentado hasta ahora de DirectoryBind y del Mount Manager (para CIFS)
Tambien voy a asumir que el sistema tiene soporte para CIFS (no todos los sistemas tienen soporte, esto ya es cuestión de cada rom/firmware)
Antes de seguir, debo aclarar que he decidido utilizar el programa Mount Manager, por que la alternativa mas conocida "Cifs Manager" me ha generado problemas a la hora de escribir datos en los recursos compartidos en red, pero con Mount Manager no he tenido estos problemas, basicamente por que los recursos los conecta en el modo que le indiquemos (por defecto, están en lectura/escritura, por lo que no hay que hacer nada especial). Además, este programa permite cargar módulos CIFS, sin tener necesidad de modificar scripts de arranque del dispositivo, lo que es de agradecer sobre todo para usuarios mas novatos.
Eso sí, no todos los dispositivos vienen con el módulo CIFS pre-cargado, por lo que es cuestión de cada usuario buscar información al respecto. (cada dispositivo tiene su propio módulo, por lo que no sirve cargar uno "genérico". Pero por probar, se pueden buscar módulos y tratar de cargarlos con este programa, por si alguno de ellos es "compatible")
Antes de seguir, debo aclarar que he decidido utilizar el programa Mount Manager, por que la alternativa mas conocida "Cifs Manager" me ha generado problemas a la hora de escribir datos en los recursos compartidos en red, pero con Mount Manager no he tenido estos problemas, basicamente por que los recursos los conecta en el modo que le indiquemos (por defecto, están en lectura/escritura, por lo que no hay que hacer nada especial). Además, este programa permite cargar módulos CIFS, sin tener necesidad de modificar scripts de arranque del dispositivo, lo que es de agradecer sobre todo para usuarios mas novatos.
Eso sí, no todos los dispositivos vienen con el módulo CIFS pre-cargado, por lo que es cuestión de cada usuario buscar información al respecto. (cada dispositivo tiene su propio módulo, por lo que no sirve cargar uno "genérico". Pero por probar, se pueden buscar módulos y tratar de cargarlos con este programa, por si alguno de ellos es "compatible")
Por un lado, ya sabemos como enlazar directorios para que el sistema acceda a ubicaciones que no son las que realmente cree que son.
Por otro lado, podemos generar ubicaciones remotas, pero que el sistema vea como locales, con lo que las aplicaciones acceden directamente a estos contenidos.
Y lo que viene ahora es bastante obvio creo yo, y es que podemos "generar" una "microsd"... remota.
En un PC, vamos a crear una carpeta llamada "ANDROIDHDD" (en mi caso, D:\ANDROIDHDD) y la vamos a compartir con ese mismo nombre (estoy asumiendo que estamos en windows. Si es en linux o similar, compartir el recurso de red por medio de Samba)
Dentro vamos a crear las siguientes carpetas:
D:\ANDROIDHDD\android\data_COMMON
D:\ANDROIDHDD\android\obb_COMMON
D:\ANDROIDHDD\Romsets
D:\ANDROIDHDD\Romsets\Mame
D:\ANDROIDHDD\Romsets\Mame\Mame0.37b11
D:\ANDROIDHDD\Romsets\Mame\Mame0.139
D:\ANDROIDHDD\Romsets
D:\ANDROIDHDD\Romsets\Mame
D:\ANDROIDHDD\Romsets\Mame\Mame0.37b11
D:\ANDROIDHDD\Romsets\Mame\Mame0.139
Nota: Esta es una sugerencia de estructura. He puesto el ejemplo de los Mame, para separar los romsets y así poder asignarlos mas fácilmente en el uso de emuladores, dependiendo del tipo de romset que utilizan.
Luego, en el dispositivo, vamos a abrir el Mount Manager (previamente instalado desde el market), y conectamos el recurso compartido. Para este ejemplo, pondré como IP de ejemplo una común dentro de una instalación de red normal, la 192.168.0.2, que será la de nuestro PC. En el caso de seguir este ejemplo, cambiar esta IP por la del pc que estéis usando.
Nota: El recurso DEBE estar compartido con un usuario y password, con permisos de escritura. Si no hay ninguno, crear un usuario/password específico para compartir esta carpeta. Para este ejemplo, el usuario será ANDROIDUSER y la password ANDROIDPASS. En vuestro caso, usad un usuario y password propios. Esto no afectará al resto del uso de esta guía.
Nota: El recurso DEBE estar compartido con un usuario y password, con permisos de escritura. Si no hay ninguno, crear un usuario/password específico para compartir esta carpeta. Para este ejemplo, el usuario será ANDROIDUSER y la password ANDROIDPASS. En vuestro caso, usad un usuario y password propios. Esto no afectará al resto del uso de esta guía.
recurso: 192.168.0.2/ANDROIDHDD/
punto de montaje: /mnt/cifs/ANDROIDHDD
En la pantalla, hay un botón "+" a la derecha. Hacer click en el y en la ventana siguiente seleccionar "User".
Aparecerá una nueva variable "User" y pondremos lo siguiente:
En la pantalla, hay un botón "+" a la derecha. Hacer click en el y en la ventana siguiente seleccionar "User".
Aparecerá una nueva variable "User" y pondremos lo siguiente:
User: ANDROIDUSER
Dar denuevo al botón "+" da la derecha, seleccionar "Password" y poner lo siguiente:
Pass: ANDROIDPASS
Dar al botón "Save" para volver a la ventana anterior, donde veremos el nuevo punto de montaje CIFS que hemos creado.
Una vez generado el punto de acceso, lo activamos, dando un toque sobre la línea que acabmos de crear en el Mount Manager. El icono de la derecha se pondrá en verde si hemos conectado todo correctamente. (si está en rojo, verificar los datos)
Finalmente, vamos a generar una estructura con DirectoryBind, y vamos a enlazar algunos directorios:
/mnt/sdcard/cifs/ANDROIDHDD/ -- /sdcard/ANDROIDHDD/
/sdcard/ANDROIDHDD/Android/data_COMMON/ -- /sdcard/Android/data/
/sdcard/ANDROIDHDD/Android/obb_COMMON/ -- /sdcard/Android/obb/
/sdcard/ANDROIDHDD/Romsets/ -- /sdcard/Romsets/
/sdcard/Romsets/Mame/Mame0.37b11/ -- /sdcard/ROMs/MAME4all/roms/
/sdcard/Romsets/Mame/Mame0.139/ -- /sdcard/ROMs/MAME4droid/roms/
/mnt/sdcard/cifs/ANDROIDHDD/ -- /sdcard/ANDROIDHDD/
/sdcard/ANDROIDHDD/Android/data_COMMON/ -- /sdcard/Android/data/
/sdcard/ANDROIDHDD/Android/obb_COMMON/ -- /sdcard/Android/obb/
/sdcard/ANDROIDHDD/Romsets/ -- /sdcard/Romsets/
/sdcard/Romsets/Mame/Mame0.37b11/ -- /sdcard/ROMs/MAME4all/roms/
/sdcard/Romsets/Mame/Mame0.139/ -- /sdcard/ROMs/MAME4droid/roms/
Explicación de los enlaces
ANDROIDHDD : Será un enlace interno que utilizaremos dentro del propio DirectoryBind, para ahorrarnos pasos si necesitamos cambiar la redirección de un servidor a otro.
Con este directorio, estamos generando un enlace que entenderemos como ANDROIDHDD (o el nombre que sea), y que apuntará a la dirección de red que tengamos compartida por CIFS.
Luego, cada subdirectorio que necesitamos, dependerá de este directorio principal para enlazar correctamente.
Ejemplo:
Tengo 2 discos duros. Uno está en mi casa y el otro está en la casa de un amigo.
En mi casa, el recurso compartido es:
192.168.0.2/ANDROIDHDD
En casa de mi amigo el recurso compartido es:
192.168.3.12/SHAREDATA
Para mi caso, en el Mount Manager me basta con tener ambos recursos conectados, por ejemplo, de esta manera:
192.168.0.2/ANDROIDHDD -- Este será mi recurso en casa, que llamaré HDD_HOUSE
192.168.3.12/SHAREDATA -- Este será mi recurso en casa de mi amigo Pepe, que llamaré HDD_PEPE
por lo que la estructura cifs quedará en :
/sdcard/cifs/HDD_HOUSE
/sdcard/cifs/HDD_PEPE
luego, tengo 2 alternativas para poder reconfigurar mi dispositivo:
Edito el fichero directorybind, y si estoy en casa pongo:
/mnt/sdcard/cifs/HDD_HOUSE/ -- /sdcard/ANDROIDHDD/
Edito el fichero directorybind, y si estoy en casa de Pepe pongo:
/mnt/sdcard/cifs/HDD_PEPE/ -- /sdcard/ANDROIDHDD/
el resto no debo cambiar nada, por que los directorios enlazados en DirectoryBind, están enlazados al directorio principal ANDROIDHDD, y por lo tanto no se ven afectados por el cambio.
luego, la siguiente alternativa, que es la mas práctica, es agregar las entradas correspondientes a cada conexión en el fichero directorybind_conf.csv, y activar solo la redirección que necesitemos, por ejemplo:
En este ejemplo, he puesto varios recursos compartidos para que se vea el efecto buscado.
Asimismo, he puesto un recurso compartido en blanco, para hacer una línea de división entre los enlaces principales (ANDROIDHDD) y los que dependen de el.
Activamos los enlaces con DirectoryBind, y ya tenemos nuestra microSD remota, donde se descargarán los datos de las aplicaciones y juegos que instalemos en el dispositivo.
Hay que señalar que este sistema será eficiente o no, dependiendo de la calidad de la red que nos encontremos. Recordar que una conexión USB puede tener una tasa de transferencia de 480mb/s, mientras en una red como en mi caso, puede oscilar entre 54mb/s a 11mb/s (en mi caso, tengo el PC en una posición que recibe una muy mala señal), y que por tanto estamos hablando de que en casi cualquier escenario vamos a perder mucha velocidad de transferencia (en el mejor de los casos, quizás tengamos una red standard cableada de 100mb/s, o conexiones wifi de 150mb/s o 300 mb/s, pero tomando como standard los 100mb/s, estamos hablando de una velocidad de cerca de un 25% de la que puede ofrecer un dispositivo USB)
Aún asi, la diferencia de carga de una aplicación puede ser que si antes demoraba 20 segundos en cargar, ahora se tome 50, pero en mi caso, compensa sin problemas por el ahorro de espacio que eso supone. Esta velocidad dependerá única y exclusivamente de la velocidad general de nuestra red, asi que a la hora de decidir donde montar el recurso compartido, mis recomendaciones son que sea en un equipo que tenga una cobertura excelente WIFI, una antena/receptor WIFI de alta velocidad, y en su defecto, conectarlo a la red cableada de casa, que nos dará por lo menos 100mbs de transmisión, que es menos de la cuarta parte de un dispositibo USB (480mbs), lo que implica tener que esperar 4 veces mas por que un programa arranque, pero creo que no es mucho problema, si consideramos que un juego android puede demorar 10 segundos en arrancar, pues serán 40 segundos aprox, con la ventaja de tener ahorrado el espacio de ese juego para todos los dispositivos android que conectemos.
Romsets : Este directorio lo utilizo para enlazar directamente al directorio donde tengo almacenados roms de distintos sistemas.
Así, puedo tener un directorio con roms y estar distribuído de la siguiente manera en mi PC:
Romsets : Este directorio lo utilizo para enlazar directamente al directorio donde tengo almacenados roms de distintos sistemas.
Así, puedo tener un directorio con roms y estar distribuído de la siguiente manera en mi PC:
D:\ANDROIDHDD\Romsets\ATARI
D:\ANDROIDHDD\Romsets\MAME
D:\ANDROIDHDD\Romsets\NES
D:\ANDROIDHDD\Romsets\PSP
D:\ANDROIDHDD\Romsets\PSX
Como la mayoría sabe, los emuladores MAME generalmente dependen de un romset específico para poder ejecutar correctamente dichas roms, por lo tanto lo ideal y mas conveniente, es clasificar las roms dependiendo de su romset. En mi caso, utilizo 2 romsets específicos, el 0.37b11 y el 0.139, además de un directorio con roms sueltas, que no he clasificado aún. Por lo tanto, mi estructura en realidad queda de la siguiente forma:
D:\ANDROIDHDD\Romsets\ATARI
D:\ANDROIDHDD\Romsets\MAME
D:\ANDROIDHDD\Romsets\MAME\Mame0.37b11
D:\ANDROIDHDD\Romsets\MAME\Mame0.139
D:\ANDROIDHDD\Romsets\MAME\MameX
D:\ANDROIDHDD\Romsets\PSP
D:\ANDROIDHDD\Romsets\PSX
Así, lo que resta para enlazar dentro de los emuladores es bastante sencillo.
En mi caso, utilizo los emuladores Mame4All y Mame4All Reloaded. Utilizo los directorios por defecto de estos emuladores, para especificar la localización de las roms, así los directorios por defecto de estos emuladores son:
Mame4All Reloaded : /sdcard/ROMs/MAME4all/roms/
Mame4All (Mame4Droid) : /sdcard/ROMs/MAME4droid/roms/
Ahora, en vez de estar configurando cada vez que instalo estos emuladores, la ruta de las roms, etc, simplemente tengo una entrada en directorybind que enlaza directamente los directorios de las roms correspondientes para cada emulador. de esta manera:
Mame4All (Mame4Droid) utiliza el romset 0.37b11, por lo tanto:
/sdcard/Romsets/Mame/Mame0.37b11/ -- /sdcard/ROMs/MAME4all/roms/
Mame4All Reloaded, utiliza el romset 0.139, por lo tanto:
/sdcard/Romsets/Mame/Mame0.139/ -- /sdcard/ROMs/MAME4droid/roms/
Llegados a este punto, estamos de acuerdo que esta entrada es totalmente innecesaria y opcional, pero sugiero intentar a probar esta configuración, que ahorra muchos quebraderos de cabeza sobre todo a la hora de generar los directorios necesarios para utilizar los Mame, ya que estas aplicaciones generan su propia estructura estática, y esto puede complicar a mas de un usuario a la hora de saber donde copiar sus roms.
Para el resto de emuladores, generalmente tienen una opción para especificar el path de las roms, por lo que simplemente la apuntaremos a la siguiente ruta, para que queden configurados correctamente:
Ruta de todas las roms: /sdcard/Romsets/
Ruta para roms de NES: /sdcard/Romsets/NES/
Ruta para roms de PSP: /sdcard/Romsets/PSP/
etc...
Observaciones y consideraciones
No está de mas comentar que todo lo anteriormente expuesto funcionará sólo cuando estén las condiciones para que el sistema de directorios y recursos en red se encuentren disponibles. Si estamos con nuestro dispositivo Android conectado a una unidad de red, y estamos utilizando dicho recurso para almacenar información o leer los ficheros de algún juego, y tenemos problemas de red (desconexión, baja señal, etc) o simplemente apagamos el ordenador o disco duro, tendremos un efecto inesperado en el dispositivo Android, por lo que sugiero utilizar este sistema solo para quienes tengan una forma segura de utilizarlo, con un recurso compartido fiable (que no se apagará).
También es importante recalcar que si conectamos este recurso en, por ejemplo, nuestro móvil, es muy posible que cuando salgamos del área efectiva de la cobertura de la Wifi tengamos un sistema inestable y por lo mismo sea necesario reiniciar el terminal. Para este caso tengo una sugerencia/alternativa.
En mi caso, tengo conectado el móvil, pero no tengo enlazado el directorio "data" (/sdcard/ANDROIDHDD/data_common), y dejo que los datos sean los propios que el movil almacena en la microSD.
Cuando necesito desconectar el dispositivo de la red, simplemente voy a DirectoryBind, y hago "unbind all" para que se desconecten los enlaces a las unidades de red. Si enlazo el directorio "data" (data_COMMON), es muy probable que alguna aplicación de Android tenga abierto algún fichero (el reproductor de medios, navegador, etc) y no me deje hacer unbind, y por este motivo prefiero no enblazar este directorio en dispositivos que sean móviles, para evitar problemas.
Alternativamente, para desconectar las unidades enlazadas, ya que el sistema está montado sobre la carpeta cifs, que se encuentra dentro de la microSD, se puede hacer un "Desmontar SD" para que se liberen todos los recursos que estén abiertos en la microSD, y a continuación ya podemos montarla nuevamente, pero sin activar CIFS o DirectoryBind (quitar la opción automontar de directorybind, para cuando se conecte el puerto USB).
Una vez que se ha entendido el funcionamiento, y sobre todo, las posibilidades de este "sistema", se puede ganar mucho, sobre todo en espacio y en especial para aquellas personas que tengan varios dispositivos android (Tablets, Set Top Box, Android TV, Móviles, Consolas, etc).
Asimismo, otra ventaja que se obtiene de todo esto, es que si actualizo los datos de una aplicación, por ejemplo, de un juego, solo los tengo que descargar una vez en un dispositivo, y el resto de dispositivos simplemente bastará con actualizar el APK de la aplicación o juego correspondiente, sin necesidad de descargar los datos asociados.
Otra cosa a considerar es que asumo que todos los ficheros del directorio /sdcard/Android/data y /sdcard/Android/obb, son comunes para todos los dispositivos. Esto significa que cuando se modifica uno, se modificará en todos.
Si queremos separar directorios por dispositivo para, por ejemplo, tener distintas partidas guardadas del mismo juego, habrá que duplicar la carpeta data y enlazar con DirectoryBind a la nueva carpeta.
Por ejemplo, si en la misma instalación del hogar, tenemos un directorio para DEEN0X, otro para PEPE y otro para SKELTON, podemos hacer lo siguiente:
PEPE enlazará a:
/sdcard/ANDROIDHDD/Android/data_PEPE/ -- /sdcard/Android/data/
SKELTON enlazará a:
/sdcard/ANDROIDHDD/Android/data_SKELTON/ -- /sdcard/Android/data/
Deen0X enlazará a:
/sdcard/ANDROIDHDD/Android/data_DEEN0X/ -- /sdcard/Android/data/
En la siguiente sección, dejaré los ficheros necesarios para poder configurar una pequeña red con todo este sistema, pero antes voy a comentar una utilidad mas que podria utilizarse con este sistema.
el directorio obb se mantiene común para todos los dispositivos
/sdcard/ANDROIDHDD/Android/obb_COMMON/ -- /sdcard/Android/obb/
y con esto cada uno podría tener su partida del mismo juego, guardada por separado.
Y Sambadroid, ¿para que me puede servir?
En la store de google existen varias aplicaciones con las que podemos compartir una carpeta de nuestro dispositivo, utilizando el protocolo de red SAMBA, que es el utilizado entre otros por Windows. Con este tipo de herramientas, podemos compartir una carpeta y verla directamente como un recurso compartido desde nuestro PC, sin tener necesidad de instalar gestores de ficheros, ni un cable MicroUSB.
Entre las opciones existentes, he estado utilizando varias para probar que tal van, y aunque la mas popular del momento puede ser Samba Filesharing, lo cierto es que esta utilidad es bastante limitada y, sobre todo, inestable a la hora de implementar un sistema de recursos compartidos estable.
Probando, he llegado a la conclusión de que la herramienta que cumple con mis necesidades y que hasta el momento tiene un buen desempeño, es una aplicación llamada SambaDroid, que tiene una versión gratuíta que no permite cambiar el nombre del recurso compartido, ni del nombre NetBIOS (de la máquina), ni incorporar sistema de protección con password por usuario, vamos, que es bastante "limitado" en cuanto a opciones para configurar el programa, pero la versión PRO (licencia comprada desde la propia apliación), permite hacer todo este tipo de configuraciones, y funciona muy bien.
Ya sea la versión Free o la Pro, este programa también se puede utilizar para implementar us sistema de ficheros compartidos, utilizando como servidor un dispositivo Android para compartir el recurso de red que, en este caso, lo mas práctico es que sea la propia /SDCARD.
Montar los recursos en un sistema así, mas que práctico, es curioso, por que la velocidad de transferencia de este modo es bastante baja, y no resulta práctico para utilizar de manera habitual.
Aún así, algunos contenidos si se pueden compartir y disfrutar correctamente utilizando este sistema. Roms, Música, Vídeo, etc, este tipo de ficheros se pueden compartir sin mayores problemas por medio de una red WIFI local generada entre 2 dispositivos Android. Intentar cargar un juego tipo Nova3 o similares, podrían suponer que tomen un tiempo considerable en la carga, además de la batería que el proceso se consumiría.
Me ha parecido adecuado comentar la facilidad de uso de este programa, ya que estoy hablando de un tema que tiene relación. Ahí lo dejo por si alguien lo quiere probar.
Descargas y puesta en funcionamiento
Esta sección es para poner en práctica todo lo comentado anteriormente.
Ficheros necesarios:
DirectoryBind (de los foros XDA)
Mount Manager (versión gratuíta de la store de google play)
directorybind_conf.csv (crear un fichero con la información que hay a continuación)
Como el fichero directorybind_conf.csv no tiene mayor complicación para editar, voy a dejar aquí el contenido del mismo para poder copiarlo y pegarlo en un editor de textos (sugerencia: notepad++), y asi realizar las modificaciones oportunas para cada necesidad.
CONTENIDO FICHERO DE CONFIGURACION DE DIRECTORYBIND (directorybind_conf.csv)
----BASE_MOUNT_POINTS_BY_NET-----;;0
/mnt/sdcard/cifs/ANDROIDHDD/;/sdcard/ANDROIDHDD/;1
/mnt/sdcard/cifs/MUSICHDD/;/sdcard/MUSICHDD/;1
/mnt/sdcard/cifs/VIDEOHDD/;/sdcard/VIDEOHDD/;1
----BASE_MOUNT_POINTS_BY_USB----;;0
/mnt/usb/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/usb/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/usb/VIDEOHDD/;/sdcard/VIDEOHDD/;0
----BASE_MOUNT_POINTS_BY_EXTERNAL_SDCARD----;;0
/mnt/external_sdcard/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/external_sdcard/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/external_sdcard/VIDEOHDD/;/sdcard/VIDEOHDD/;0
----GENERAL_BINDS----;;0
/sdcard/ANDROIDHDD/Android/data_COMMON/;/sdcard/Android/data/;1
/sdcard/ANDROIDHDD/Android/obb_COMMON/;/sdcard/Android/obb/;1
/sdcard/ANDROIDHDD/Gameloft/;/sdcard/Gameloft/;1
/sdcard/ANDROIDHDD/Romsets/;/sdcard/Romsets/;1
/sdcard/Romsets/Mame/Mame0.37b11/;/sdcard/ROMs/MAME4all/roms/;1
/sdcard/Romsets/Mame/Mame0.139/;/sdcard/ROMs/MAME4droid/roms/;1
/sdcard/ANDROIDHDD/Pictures/;/sdcard/Pictures/;0
/sdcard/ANDROIDHDD/backups/;/sdcard/backups/;0
/sdcard/ANDROIDHDD/DCIM/;/sdcard/DCIM/;0
/sdcard/ANDROIDHDD/TitaniumBackup/;/sdcard/TitaniumBackup/;0
----MEDIA_BINDS----;;0
/sdcard/MUSICHDD/;/sdcard/Music/MUSICHDD/;0
/sdcard/MUSICHDD/;/sdcard/Media/MUSICHDD/;0
/sdcard/MEDIAHDD/;/sdcard/Video/VIDEOHDD/;0
/sdcard/MEDIAHDD/;/sdcard/Media/VIDEOHDD/;0
Nota2: El fichero que está para descargar tiene menos opciones que las de las líneas que he puesto aquí, por que lo he ido editando para agregar mas opciones
Importante: El nombre del punto de montaje de la microsd externa, puede variar de un dispositivo a otro.
Hay que establecer el nombre correcto en el fichero directorybind_conf.csv, para que el sistema esté correctamente configurado. Para esto, se puede hacer de muchas formas, y la mas fácil es ir con algún explorador de ficheros que permita navegar en /mnt/, y verificar el nombre de la microsd externa.
La microsd interna, en caso de que el dispositivo tenga memoria interna (un disco interno) se llamará "sdcard", por lo que tendremos que buscar otro punto de montaje que corresponda a la microsd que tenemos insertada en el dispositivo.
Los nombres de la memoria externa pueden ser múltiples, y estos son sólo algunos ejemplos:
/mnt/sdcard1
/mnt/ext_sd
/mnt/external_sd
/mnt/external_sdcard
/mnt/extsd
/mnt/sdcard/sdcard1
/mnt/sdcard/ext_sd
/mnt/sdcard/external_sd
/mnt/sdcard/external_sdcard
/mnt/sdcard/extsd
etc...
Nota: la sdcard externa (microsd), también puede estar montada dentro de la propia memoria interna sdcard, en forma de carpeta (como /mnt/sdcard/external_sdcard). Esto es común en varios dispositivos/fabricantes que lo montan de esta manera.
Una vez identificado el nombre, editar el fichero directorybind_conf.csv y cambiar las siguientes entradas, reemplazando "external_sdcard" por el nombre correspondiente al dispositivo.
.../mnt/external_sdcard/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0/mnt/external_sdcard/MUSICHDD/;/sdcard/MUSICHDD/;0/mnt/external_sdcard/VIDEOHDD/;/sdcard/VIDEOHDD/;0...
Siguiendo con el tema, la forma de entender el fichero directorybind_conf.csv es muy simple:
[Ruta_donde_están_los_ficheros/Source];[Ruta_que_reemplaza/Target];[0-deshabilitado/1-habilitado]Editar (crear) el fichero con los datos anteriores (contenido de directorybind_conf.csv + modificación del nombre del punto de montaje de la microsd), y guardarlos en la raíz de la sdcard del dispositivo Android, con el nombre directorybind_conf.csv (debe quedar en /mnt/sdcard/directorybind_conf.csv). Si no estás seguro cual de las unidades del dispositivo android es /sdcard, guardalo en todas las unidades del dispositivo, en el directorio raiz.
Dentro de esta estructura, están incluídos enlaces para conectar un "servidor" de música y otro de vídeos.
en la microSD, estos se verán como
/sdcard
----/Music
--------/MUSICHDD
----/Video
--------/VIDEOHDD
----/Media
--------/MUSICHDD
--------/VIDEOHDD
También he incluído otros directorios que pueden resultar interesantes:
Romsets -- Para roms
DCIM -- Para sacar fotos con el dispositivo directamente a la unidad de red
Pictures -- Para capturar pantallas directamente a la unidad de red
Backups -- Si utilizo un programa como ES File Explorer, y guardar los APK que tengo instalados en la unidad de red
TitaniumBackup -- Para hacer/recuperar backups de titanium, directamente de la unidad de red
Ya es cuestión de cada uno agregar o modificar estos enlaces de acuerdo a sus preferencias y necesidades.
Para Mount Manager, vamos a compartir los siguientes recursos en nuestro PC o HDD de red
Creamos una carpeta llamada ANDROIDHDD (o como queráis llamarla), asumiré que estamos trabajando en el disco D:\ del pc, por tanto, generar la siguiente estructura:
D:\ANDROIDHDD
----\Android
--------\data_COMMON
--------\obb_COMMON
----\Romsets
--------\Mame
------------\Mame0.37b11
------------\Mame0.139
----\DCIM
----\Pictures
----\Backups
----\TitaniumBackup
----\Gameloft
Nota: Si se utliza un disco duro USB conectado al PC, sugiero crear la misma carpeta dentro del disco, y compartir la carpeta, no la unidad completa.
A continuación, compartimos la carpeta ANDROIDHDD, con privilegios totales (Lectura/Escritura) sobre esta carpeta.
Como sugerencia, poner una IP estática a vuestro PC, para poder conectarlo sin problemas.
Nos quedamos con la IP del PC, que la vamos a utilizar en el dispositivo Android
Tip: Inicio->ejecutar->cmd.exe, y a continuación poner lo siguiente:
ipconfig
La ip será la que tenga un formato xxx.xxx.xxx.xxx, y que generalmente puede empezar por 192.168.xxx.xxx, que para este caso asumiremos que es 192.168.0.2
Luego, en Android, cargamos Mount Manager, damos a "Add Mount" (el segundo icono de la barra de herramientas, el que tiene la cruz azul), y poner los datos necesarios
Share Path = 192.168.0.2/ANDROIDHDD
Mount Point = (se llenará automáticamente)
Agregar la opción Username
Username = ANDROIDUSER
Agregar la opción Password
Password = ANDROIDPASS
Nota: ANDROIDUSER y ANDROIDPASS son usuarios definidos en el pc, y pueden ser cualquier usuario. estos son solo un ejemplo.
Dar al botón Aceptar (Accept/Save) y volver a la ventana anterior.
Activar el punto de montaje CIFS, tocando la opción recién creada.
Si no se monta correctamente, verificar los datos y verificar los módulos, si está ejecutando el CIFS.
Hacer lo mismo por los puntos de montaje para MUSICHDD y VIDEOHDD (si es que se van a utilizar)
Cargar DirectoryBind, dar a Options -- More -- Restore database (si pregunta, responder que Si quieres sobreescribir)
Aparecerán las entradas que hemos editado anteriormente (o que hemos descargado el fichero directamente). Marcar o desmarcar las casillas, de acuerdo con las preferencias de cada uno, y finalmente dar Options -- Bind Checked
Si todo está bien configurado, veremos que los iconos de cada opción que está seleccionada se pondrán verdes.
En caso de que alguna se ponga en azul, quiere decir que existe algún problema que posiblemente lo podemos solucionar. Daremos a Options -- Unbind all, y seleccionamos y mantenemos presionado sobre la opción, nos abrirá una ventana que nos permite configurar el enlace.
Mantenemos presionado sobre la primera caja de texto (Source data path), y verificamos que esté apuntando correctamente donde queremos que apunte, y le damos a "Select"
Repetimos la operación con la segunda caja de texto (Mount target path)
Guardamos la configuración, volvermos a la ventana anterior y le damos a Options -- Bind Checked.
Repetir por cada opción que necesite que la verifiquen. En caso de las opciones en rojo, es que algun directorio o punto de montaje no se encuentra correctamente configurado.
Verificar que en la microSD existan los directorios Destino (Targets). Si estamos montando "Picture", pero en la microsd no existe esta carpeta, entonces dará error al intentar montarla (aunque generalmente el propio DirectoryBind genera estas carpetas de forma automática)
Ya podemos utilizar estos directorios de manera directa dentro de nuestras aplicaciones.
- Abrir cualquier emulador, y a la hora de buscar roms, ir a /sdcard/Romsets/ , para encontrar los directorios correspondientes a cada sistema.
- Para escuchar música, vamos a /sdcard/Music/MUSICHDD, para tener nuestra biblioteca de música, además de la existente en la propia MicroSD
- Para instalar un juego Android, basta con instalarlo normalmente desde Google Play Store. Tanto los datsod del directorio obb como los del directorio data, se guardarán directamente en la unidad de red asociada.
- Si tenemos asociado el directorio DCIM, podemos sacar una foto con nuestro dispositivo, y ésta se almacenará directamente en nuestro ordenador.
En fin, las posibilidades son muy variadas, y cada uno puede encontrar el uso que mejor le parezca a este sistema.
Cambiar entre distintas "fuentes" de soporte para datos
Todo lo explicado hasta aquí toma como referencia la utilización de una unidad de red para almacenar los datos, pero también se podría cambiar que el sistema se "alimente" de una unidad USB (disco duro, pendrive, etc), o una SDCard instalada en el dispositivo Android.
Para esto, simplemente hay que cambiar las entradas base del fichero del Directory Bind.
Vamos a suponer que nuestro directorio original ANDROIDHDD en realidad es un disco duro USB que tenemos compartido en el PC.
Nos vamos de viaje, y queremos llevarnos este disco duro para conectar nuestro Set Top Box (Android TV, Pincho Android, etc) en nuestra casa en la playa.
Asumiendo que tenemos soporte para conectar un disco duro o pendrive en nuestro dispositivo, vamos a conectar el disco y verificamos que tengamos acceso a el.
Lo mas probable, es que lo veamos en la siguiente ruta:
/mnt/usb
Suponiendo que en el disco duro, nuestra carpeta para android se llame "ANDROIDHDD" (y que era la que teníamos compartida como "ANDROIDHDD"), entonces en nuestro dispositivo la veríamos en la siguiente ruta, y con los siguientes directorios:
/mnt/usb/ANDROIDHDD
----/Android
--------/data_COMMON
--------/obb_COMMON
----/backups
----/Gameloft
...etc
Nota: Si vuestra instalación del disco duro o pendrive se encuentra en otra posición, editar la entrada correspondiente en el fichero directorybind_conf.csv para que el directorio USB apunte correctamente donde se encuentra el dispositivo conectado.
Si se ha copiado el contenido del directorybind_conf.csv, para agregar las líneas que he puesto en esta guía, existe una sección con entradas base para NET y otras para USB
...
----BASE MOUNT POINTS BY NET--------------------------------;;0
/mnt/sdcard/cifs/ANDROIDHDD/;/sdcard/ANDROIDHDD/;1
/mnt/sdcard/cifs/MUSICHDD/;/sdcard/MUSICHDD/;1
/mnt/sdcard/cifs/VIDEOHDD/;/sdcard/VIDEOHDD/;1
----BASE MOUNT POINTS BY USB--------------------------------;;
0/mnt/usb/ANDROIDHDD/;/sdcard/ANDROIDHDD/;0
/mnt/usb/MUSICHDD/;/sdcard/MUSICHDD/;0
/mnt/usb/VIDEOHDD/;/sdcard/VIDEOHDD/;0
...
Desactivar las entradas correspondientes a NET (Recurso de red), y activar las de USB (dispositivo conectado por USB)
y con este cambio, ya podemos acceder al mismo contenido que teníamos por red, pero ahora por el disco duro o pendrive directamente conectado por USB
Si por otra parte tenemos una microSD, y copiamos el contenido de la carpeta ANDROIDHDD (o parte del contenido), y queremos acceder a el desde android, el cambio es similar al anterior, aunque esta vez hay que verificar el nombre que android da a nuestra microSD externa.
como ya hemos editado el fichero directorybind_conf.csv y tenemos el nombre correcto de nuestra microSD, simplemente nos basta con desactivar y activar las opciones correspondientes a la microsd para que el sistema funcione con estos directorios enlazados.
Y de esta manera tenemos un sistema "dinámico" que nos permite direccionar de manera rápida y cómoda los contenidos para nuestro dispositivo, dependiendo de donde tengamos almacenada la información del mismo.
Script CIFS&BIND
Bueno, si alguien ha leído todo lo que he puesto hasta aquí, supongo que ya tendrá una idea general de como va montado todo este sistema de directorios y redirecciones.
Para facilitar el proceso, he generado un script que ayuda a generar los directorios y guía paso a paso para poder conectar un dispositivo android con CIFS habilitado a una carpeta compartida por la red, y utilizar la misma como "sdcard"
REQUISITOS
- Dispositivo ANDROID con módulo CIFS habilitado (la mayoría de los android TV, muchas consolas android y algunas tablets vienen con estos módulos incorporados)
- Windows, donde ejecutaremos el script y compartiremos la carpeta para conectar desde Android
- Script CIFS&BIND
Descargamos el script, y descomprimimos el fichero CIFS&BIND.cmd en la raíz del disco donde generaremos la estructura para compartir. (también se aplica a un disco duro USB)
Que hace este script?
- Generar carpeta ANDRIODHDD
- Generar estructura standard dentro de la carpeta ANDROIDHDD (directorios Android, Gameloft, DCIM, Pictures, Romsets, etc)
- Compartir la carpeta ANDROIDHDD en modo escritura, para todos los usuarios de windows (nombre del recurso: ANDROIDHDD)
- Generar fichero de configuración base para DirectoryBind, con los direccionamientos necesarios para montar android por el recurso de red ANDROIDHDD que conectarmos por CIFS
- Descargar la app DirectoryBind desde el foro de XDA (es necesario guardarlo en la propia ruta generada)
- Obtener los datos necesarios para informar al usuario y guiarlo a la hora de conectar el dispositivo android al recurso compartido, por medio de Mount Manager
- Guiar en los pasos necesarios para conectar y activar el recurso compartido, como punto de montaje CIFS.
- Guiar al usuario para instalar la aplicación DirectoryBind en su dispositivo android, y cargar la configuración generada para enlazar los directorios.
- Guiar al usuario para habilitar los enlaces generados, y con esto activar la redirección de las carpetas importantes de Android para que sean almacenadas y accedidas desde el recurso de red
He intentado hacerlo lo mas simple posible. Es posible que en alguna instalación de windows, el script no logre obtener correctamente la IP del pc. Para esos casos, es bueno que el usuario sepa de antemano cual es la ip y que, cuando corresponda, la ingrese correctamente.
Para obtener la ip del pc, ir a inicio->ejecutar->cmd [enter]. Luego en la ventana de comandos, ingresar lo siguiente
¿Como deshabilitar CIFS&BIND?
Muy sencillo. Simplemente vamos al CIFS manager y tocamos el recurso de red, para que se deshabilite (se pone en rojo el icono), y luego al DirectoryBind, y le damos a "UnBind All". Si algun recurso no se puede liberar por que se encuentra "abierto" por algún programa, sugiero reiniciar el dispositivo android y ya tendremos desvinculado el directorio.
Sugiero no utilizar la opción de automount o de autobind en de sus respectivos programas, para así poder controlar cuando queremos enlazar a nuestra carpeta compartida. cuando queramos habilitar el CIFS&BIND, activamos el recurso en CIFS (con el mount manager), y luego le damos a "Bind Checked" (con DirectoryBind).
ipconfig
Con esto tendremos la ip correspondiente a nuestro pc.
Apenas tenga tiempo, sacaré una versión en español del propio script, aunque entinendo que es muy simple de seguir y no es necesario mucho conocimiento de inglés.
Descargas:
Palabras finales
Hasta aquí este manual introductorio sobre como utilizar DirectoryBind y Cifs de una manera un tanto "alternativa", que espero que sea del interés de algunas personas que seguramente vean mas utilidades que yo a estas herramientas.
He querido compartir este artículo, por que es algo que hago de forma normal en mis instalaciones, pero que posiblemente exista alguna persona interesada en sacar ideas de esto mismo para implementar en sus propias instalaciones, y que estaría encantado de conocer si me dejáis algún comentario al respecto, para sacar mas ideas aún para poder seguir probando.
Disculpad si en algún punto no he sido lo suficientemente claro. He escrito esto un poco de manera rápida, por que he tenido un momento libre para hacerlo, y no quería desaprovechar la oportunidad.
Zalu2!
Deen0X
Clarísima la exposición y muy instructiva, incluso para un neófito como yo. Me resultará muy útil.
ResponderEliminarMuchísimas gracias por compartir.
Hay otro uso que no he explicado, pero que voy a editar para comentar.
ResponderEliminarcon este sistema, me ahorro mucho tiempo en instalación de un dispositivo, por que me genero un fichero batch y pongo todos los apk que quiero instalar, y simplemente los envio a la ip (por adb) o por usb (adb también), y asi instalo todo en pocos minutos.
Y la otra ventaja importante... Al no escribir casi nada en la memoria interna (sdcard propia del dispositivo), la vida últil de la misma se extiende y por tanto nos debería durar mas nuestro Android. (que recordemos que genralmente cuando muere la nand, significa que se muere el dispositivo también)
Zalu2!
Excelente post. Me gustaria implmentarlo en OUYA. Entiendo que es necesario se root no?
ResponderEliminarSi, es necesario ser root.
ResponderEliminarAhora mismo estoy implementando una variante, y si las pruebas salen bien, lo publicaré aquí.
la variante es muy simple. Utilizar la propia OUYA como servidor de ficheros (como un NAS), para que los demás dispositivos se conecten a ella y puedan cargar las aplicaciones, roms, etc.
esto lo hago por que, considerando que OUYA viene con wifi 802.11b/g/n, por lo que aprovecho que tiene una buena señal para crear un punto de acceso en ella, y con esto mejorar en velocidad.
actualmente, en mi casa tengo un router (el que me da internet) que va a 54MBs, y que me genera el cuello de botella en los dispositivos conectados por wifi, así que he pensado que es mejor tener la OUYA (o cualquier pincho android) que haga de servidor de ficheros, así me ahorro tener un ordenador encendido, y gano en que el propio dispositivo (OUYA) tiene acceso directo a los ficheros, por lo tanto, un acceso mas rápido.
mañana terminaré las pruebas, y de ir bien, ya publico la nueva actualización a la guía.
Zalu2!
La verdad es que me gustaria hacerlo pero lo veo un poco lioso xD. Lo primero es hacer root y/o instalar la rom stock/plus y me da un poco de reparo dejarla brickeada. Ademas que no estoy muy puesto en esto de android (sdk, recoverys ...) Me podre a leer todo lo que pueda y lo iré haciendo poco a poco, no queda otra.
ResponderEliminarHola DeenOX, llego casi 5 años tarde a las preguntas que me llevaron a este artículo.tengo mí celular rooteado básicamente para usar drivedroid, y me gustaría acceder a las ISO's de mí PC, como si estuvieran en la tarjeta SD. Lo creo bastante posible con tu artículo, aunque me hubiera gustado ver ese muy interesante script (llegué muy tarde, y ya no está disponible). Gracias por compartir esta información, muy valiosa y explicada con tanto esmero.
ResponderEliminar