› Foros › Multiplataforma › Consolas alternativas
Introducción
Siguiendo con mis articulos sobre manejo de directorios en Android [CIFS&BIND], hoy voy a generar esta entrada en mi articulo por que creo que es interesante el concepto, y por que asi puedo redireccionar desde mis otros artículos a éste, que este "cambio" de la sdcard se puede hacer casi en cualquier dispositivo y no es invasivo como podría ser modificar algún fichero del sistem (vold.fstab) que podría dejar nuestro dispositivo inutilizable si no se sabe bien que se está haciendo.
Para la mayoría de los usuarios Android, tanto los que son novatos como los que ya tienen algo de experiencia, en algún momento se han topado con el problema típico de que no hay espacio para instalar aplicaciones, y que nos sugiere liberar memoria.
No son pocos los que, en un intento ingenuo, compran una microSD y la insertan en el dispositivo, con la esperanza de solucionar el problema del espacio, pero el mensaje sigue apareciendo.
Esta guía intentará dar una alternativa para solucionar este problema.
Antes de empezar
Creo que es bueno explicar brevemente por que sucede este problema.
La mayoría de los dispositivos Android actuales, vienen con una memoria incluída y que, en la mayoría de los casos, será precisamente esta memoria las que nos dará dolores de cabeza.
Para explicarlo de forma rápida, la memoria de un dispositivo android se divide en varias partes (particiones), de las cuales, y para resumir, nos centraremos en las siguientes:
- Partición del sistema operativo (donde se instala Android)
- Partición de aplicaciones (donde instalaremos aplicaciones)
- Partición Flash de almacenamiento (lo que veremos como espacio libre para copiar ficheros)
Ahora, si vemos un dispositivo Android genérico, es típico que venga con una cantidad X de Gb de memoria, pero que en general creemos que es lo que tendremos disponible... pongamos el caso de una tablet X que viene con 8GB de almacenamiento interno. Cuando inspeccionamos el dispositivo, vemos que en realidad tenemos poco mas de 5GB de almacenamiento interno, y muchos usuarios no saben que es lo que pasa con el resto.
A estas alturas ya podemos imaginar lo que ha pasado. Una parte del almacenamiento se destina a las distintas particiones que necesita Android para funcionar, y que a su vez se subdivide en las distintas particiones como las que antes he comentado.
Por tanto, lo que vemos es lo que queda disponible una vez Android ha sacado lo que necesita para poder funcionar.
¿Como se instala una aplicación?
Antes de seguir, decir que no soy experto, pero las nociones que tengo creo que son válidas para dar una explicación a nivel de usuario y que podamos entender el concepto general de como se instala una aplicación en Android.
Cuando se instala una aplicación, ya sea del market, desde la microsd, etc. Esta aplicación se copia en alguna parte del sistema para que podamos acceder a ella.
Esta aplicación (su instalación) se instala generalmente en el área o partición definida para las aplicaciones, aunque también podría ir en otros sitios, como podría ser una aplicación de sisetma (por lo que iría en las aplicaciones de sistema), etc.
Cuando Android ha particionado la memoria y ha definido los tamaños de cada parte, en ese momento ha determinado que tamaño tendrá la partición de las aplicaciones que podemos instalar. Generalmente es una partición con espacio suficiente para instalar muchas aplicaciones (por ejemplo, 1GB como en la imagen anterior).
Las aplicaciones en general pesan poco, aunque hay excepciones. Una aplicación (apk) puede desde unos kb, a varios MB, aunque todo depende de como lo haya programado el desarrollador original, puesto que también pueden existir aplicaciones que ocupen 50, o incluso mas.
En la imagen anterior podemos ver los tamaños de algunas aplicaciones, y nos encontramos que juegos como Modernc Combat 4, por ejemplo, pesa 48KB, pero evidentemente este no es su peso real, sino que es simplemente el "lanzador" de la aplicación.
Como se puede entender hasta aquí, la instalación de aplicaciones tiene su primer problema potencial de falta de espacio a la hora de instalarlas normalmente en el área destinada para ellas. Si instalamos 20 aplicacoines android que pesan 50MB cada una, ya tendremos ocupada todo el espacio destinado por Android para instalar aplicaciones.
Afortunadamente, Android nos ofrece una "solución" para liberar espacio interno. Si vamos a Ajustes de Sistema -- Aplicaciones, y revisamos la pestaña "En Tarjeta SD", veremos que están listadas las aplicaciones que hemos instalado en Android, y que podemos marcar el checkbox que tienen cada una de ellas.
Cuando marcamos esta casilla, indicamos a Android que mueva este programa (apk) a un directorio especial en la microsd, y con esto librerar espacio interno para instalar aplicaciones.
Al realizar este movimiento, Android deja un enlace a este contenido (un link, o acceso directo para que nos entendamos) que en este caso pesa muy poco, mientras que la aplicación se aloja en la carpeta /mnt/sdcard/.android_secure/".
Nota: Algunas aplicaciones no permiten moverlas a la memoria sdcard. También hay que considerar que si movemos una aplicación que tenga Widgets (como HD Widgets, o Evernote, por poner un par de ejemplos), no podremos utilizar los Widgets si la aplicación está en sdcard. (los widgets solo funcionan si la aplicación esta instalada en la partición destinada a aplicaciones para android)
Datos de aplicaciones
Las aplicaciones Android, muchas veces se dividen en 2 partes, la primera que es la aplicación propiamente tal, y la segunda, los datos que utiliza la aplicación.
Tomemos el ejemplo de Modern Combat 4 (MC4). La APK de esta aplicación, una vez instalada, sólo pesa 48kb, y es evidente que este NO puede ser el peso total de este juego. Cuando lo instalamos desde el market, o lanzamos el apk instalado, la aplicación comienza a descargar los datos asociados al juego que en este caso es mas de 1GB. Estos datos se almacenan en varias carpetas, dependiendo de como esté programado y configurada la aplicación.
En el ejemplo del MC4, el juego descargará los datos de recursos que, en principio, tiene todas las "versiones" o "calidades" en las que se puede ejecutar el juego (calidad baja, media, alta). Estos datos se descargan en una carpeta del juego que se encuentra dentro de "/mnt/sdcard/Android/obb".
Para que nos entendamos en términos simples, las carpetas dentro del directorio "/Android/obb" serán para nosotros como los Instaladores de las aplicaciones. Cuando un juego necesita obtener una textura o modelo, o cualquier recurso, lo buscará en este directorio.
Ahora, existe otra carpeta importante, que es la "/Android/data", y que para que nos entendamos, será el directorio donde tendremos instaladas las aplicaciones, donde tendremos los recursos listos para usar, además de donde se guardarán en algunos casos las configuraciones, avances, etc, de algunos juegos.
Siguiendo con el ejemplo del MC4, cuando lo instalamos desde el market, se descargan los datos del directorio "/Android/obb/CarpetadeljuegoMC4", y una vez descargados, el programa determina, dependiendo de las características de nuestro dispositivo (memoria, GPU, tamaño pantalla, etc) que recursos son los que va a utilizar, y copia los ficheros correspondientes desde "obb", hasta la carpeta "/Android/data/CarpetadeljuegoMC4".
Una vez desempaquetado y copiado estos ficheros en "data", la aplicación comienza su ejecución.
He de decir que no existe una regla estricta en cuanto a como deben ejecutarse las aplicaciones. Pueden existir aplicaciones que simplemente utilicen el directorio OBB directamente, obteniendo los recursos necesarios mientras accede a los ficheros (sin copiarlos la carpeta corresopndiente en "data").
También pueden existir aplicaciones que solo tengan una carpeta "Android/data", o aplicaciones que solo se ejecuten desde el apk instalado, o incluso otras aplicaciones que generen sus propios sistemas de carpetas y no utilicen ni "data" ni "obb", como puede ser Sygic Aura (que genera su propia carpeta /sdcard/Sygic" donde guarda todos sus datos)
Hasta aquí dejaré la explicación "resumida" sobre como se instalan y ejecutan las aplicaciones Android. La idea de esta sección simplemente es otorgar una idea general de como funciona Android para las personas que aun se están introduciendo en este sistema operativo.
Verificación de espacio
Antes de instalar una aplicación desde sdcard, Android primero intentará verificar el espacio disponible en sdcard para, a continuación, proceder con la instalación y descarga de datos asociados.
Así, si queremos instalar por ejemplo MC4, pero en la sdcard solo nos queda 1GB de datos, Android no nos permitirá seguir adelante hasta que liberemos espacio en donde poder descargar los datos de la aplicación.
Del mismo modo, antes de instalar la aplicación en el sistema, verificará que tengamos espacio disponible en la partición de aplicaciones, con lo que si no tenemos espacio suficiente para la aplicación, además de un porcentaje o umbral de espacio libre que necesita el sistema para poder trabajar, no podremos instalar la aplicación hasta que no liberemos espacio, ya sea moviendo aplicaciones a la sdcard o desinstalándolas directamente, para liberar el espacio necesario.
Este punto es importante a tener en cuenta, por que ya sea por una de estas dos razones podemos quedarnos sin espacio y, por lo tanto, no poder instalar aplicaciones en el sistema.
sdcard, la clave del espacio
En la sección anterior he explicado de manera general como y donde se instalan las aplicaciones Android, y como se puede ver, hay un punto importante a tener en consideración al respecto y es, como dice el título de esta sección, el punto de montaje "sdcard".
Android utiliza "sdcard" como su "disco duro propio". En cualquier instalación de Android, el sistema operativo cuenta con que por lo menos existe la entrada "/mnt/sdcard/" (o que también está enlazada como "/sdcard/" directamente).
Pueden haber muchos otros puntos de montaje, o incluso, múltiples microSD o SDCard insertadas (por ejemplo, un lector USB de tarjetas SD), pero cada tarjeta nueva o externa recibirá un nombre distinto, como puede ser:
- ext_sd
- external_sdcard
- external_sd
- extsd
- externalsd
- sdcard1
- extsdcard
- etc...
además, también podemos encontrarnos con que esta tarjeta externa puede estar montada en distintas partes, dependiendo de cada Android en particular:
- /mnt/ext_sd
- /mnt/sdcard/ext_sd
- /mnt/storages/ext_sd
- /mnt/sdcard/storages/ext_sd
- etc...
Por tanto, la memoria externa del sistema (generalmente, la microsd que insertamos) puede estar montada virtualmente en casi cualquier parte, y con cualquier nombre, y no existe una normalización al respecto.
El único punto fijo que si podemos tener claro es que siempre (o casi siempre) existe el punto "/mnt/sdcard" (o "/sdcard/"), y es por la misma razón que Android toma este punto de montaje como un lugar "seguro" y "fijo", y todo el sistema gira en torno a él.
Así, cuando movemos una aplicación desde la memoria interna (partición de aplicaciones) a la "Tarjeta SD", android no se plantea cual de todos los puntos es la memoria sd, sino que simplemente la mueve a "sdcard".
Muy bien, ahora que tenemos este concepto entendido, ya podemos empezar a imaginarnos donde está el problema de memoria que habitualmente recibimos al instalar aplicaciones, y es que como he dicho al comienzo de este articulo, Actualmente casi todos los dispositivos Android vienen con una memoria interna que ya está asignada a la microSD, y que en muchos casos, esta memoria queda ridículamente corta, por que, por ejemplo, una tablet que viene con 8GB de memoria, pero que realmente quedan disponibles 5, basta con instalar 3 o 4 aplicaciones o juegos "pesados", que cada una tenga un poco mas de 1GB, y ya no tendremos espacio para seguir instalando mas aplicaciones por que la "sdcard" se ha quedado sin espacio... y que tengamos o no insertada una microSD con muchos GB no hará ninguna diferencia en el sistema, por que sigue apuntando donde mismo, a la sdcard para instalar y utilizar como memoria de almacenamiento interno.
Así que, con todo lo anterior, podemos entender que el problema principal se puede resumir en uno solo: Cambiar el punto sdcard por nuestra microsd, para tener mas espacio, o lo que comunmente se entiende, en terminos de la comunidad Android, como hacer un "Swap de la memoria"
SWAP de la memoria, por la microSD
Hacer Swap de la memoria es, como dice el título, cambiar el punto de montaje donde tenemos la memoria interna, que Android casi siempre la establece como la "sdcard", por nuestra memoria externa que para nosotros es la microSD.
Generalmente, este cambio se hace en el fichero "/system/etc/vold.fstab", pero tiene sus puntos a considerar.
A continuación, pongo un ejemplo de un fichero vold.fstab de un dispositivo generico.## Vold 2.0 fstab for HTC Passion
#
## - San Mehat (san@android.com)
##
#######################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...>
## label - Label for the volume
## mount_point - Where the volume will be mounted
## part - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################
# Mounts the first usable partition of the specified device
#/devices/platform/awsmc.3/mmc_host for sdio
dev_mount extsd /mnt/extsd auto /devices/virtual/block/nandi
dev_mount sdcard /mnt/sdcard auto /devices/platform/sunxi-mmc.1/mmc_host /devices/platform/sunxi-mmc.0/mmc_host
dev_mount usbhost1 /mnt/usbhost1 auto /devices/platform/sw-ehci.1 /devices/platform/sw_hcd_host0 /devices/platform/sw-ehci.2 /devices/platform/sw-ohci.1 /devices/platform/sw-ohci.2
En el fichero anterior, he puesto en negrita los puntos de montaje corerspondientes a la sdcard (memoria interna), y la memoria externa (microSD). Para este ejemplo, la forma mas fácil de hacer el swap es cambiar los nombres de los puntos de montaje, intercambiándolos (swap) entre sí, de manera que quede algo similar a esto:
dev_mount sdcard /mnt/extsd auto /devices/virtual/block/nandi
dev_mount extsd /mnt/sdcard auto /devices/platform/sunxi-mmc.1/mmc_host /devices/platform/sunxi-mmc.0/mmc_host
Con el ejemplo anterior, simplemente hemos cambiado el nombre del punto de montaje de la memoria interna por la externa, y con esto conseguimos que la microSD (extsd) se monte como sdcard
Nota: Este método no es 100% seguro que funcione en todos los casos.
DirectoryBind
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.
Con esta herramienta, generaremos una alternativa de SWAP de memoria para evitar tener que tocar ficheros del sistema (vold.fstab), y tener un resultado similar.
Para obtener este programa, mirar la sección de descargas de esta guía.
He generado un punto de montaje en "/sdcard/ANDROIDHDD", para que sea mas fácil cambiar la configuración del fichero, modificando solo una línea (la parte que corresopnde a la ubicación de la microsd). Si no lo hago de esta manera, tendríamos que generar un fichero simiar a este:/mnt/external_sdcard/Android/data/;/sdcard/Android/data/;1/mnt/external_sdcard/Android/obb/;/sdcard/Android/obb/;1
/mnt/external_sdcard/Gameloft/;/sdcard/Gameloft/;1
/mnt/external_sdcard/DCIM/;/sdcard/DCIM/;0
/mnt/external_sdcard/Pictures/;/sdcard/Pictures/;0
Con lo que tendríamos que cambiar todos los puntos de montaje "/mnt/external_sdcard" con lo que tendríamos que cambiar todos los puntos de montaje en el fichero. Generando un segundo directorio al que apunte la estructura, solo nos basta con cambiar una línea, y todo el sistema de directorios se actualizará a dicho punto de montaje.
----BASE_MOUNT_POINTS_BY_MICROSD----;;0
/mnt/usbdrive/ANDROIDHDD/;/sdcard/ANDROIDHDD/;1
----GENERAL_BINDS----;;0
/sdcard/ANDROIDHDD/Android/data/;/sdcard/Android/data/;1
/sdcard/ANDROIDHDD/Android/obb/;/sdcard/Android/obb/;1
/sdcard/ANDROIDHDD/Gameloft/;/sdcard/Gameloft/;1
/sdcard/ANDROIDHDD/DCIM/;/sdcard/DCIM/;0
/sdcard/ANDROIDHDD/Pictures/;/sdcard/Pictures/;0
Deen0X escribió:primero ,asegúrate de que puedes leer un disco ntfs. no todos los firmwares tienen los módulos necesarios
enchufa el disco al dispositivo y mira si puedes acceder a el.
la carpeta ANDROIDHDD es una carpeta que se crea en /sdcard/ANDROIDHDD, y es donde apuntará a la carpeta fuente, que para este caso, se crea la misma carpeta ANDROIDHDD en el pendrive (en tu caso).
desde el momento de que se monte esta carpeta, cuando accedas a /sdcard/ANDROIDHDD, en realidad estás accediendo a la carpeta que está en tu pendrive (/mnt/usbdrive/ANDROIDHDD)
Luego, la sección "GENERAL BINDS" lo único que hacen es apuntar a esta carpeta montada /sdcard/ANDROIDHDD, y con esto no tienes que cambiar nada en esta parte. simplemente configura la primera línea para que el resto funcione.
resumiendo
crea en tu pendrive/hdd la carpeta ANDROIDHDD y crea los directorios que se utilizarán (Android, gameloft, DCIM, Pictures, que aunque creo que no es necesario crearlos manualmente, no esta de mas que lo hagas tu mismo), configura correctamente la primera línea de montaje del fichero (basicamente, asegúrate que tu pendrive/hdd está en /usbdrive/ANDROIDHDD) y ya deberías tener con eso.
Zalu2!
----BASE_MOUNT_POINTS_BY_MICROSD---- 0
/mnt/sdcard/UsbOtgDrives/Drive_1/ANDROIDHDD/ /sdcard/ANDROIDHDD/ 1
----GENERAL_BINDS---- 0
/sdcard/ANDROIDHDD/Android/data/ /sdcard/Android/data/ 1
/sdcard/ANDROIDHDD/Android/obb/ /sdcard/Android/obb/ 1
/sdcard/ANDROIDHDD/Gameloft/ /sdcard/Gameloft/ 1
/sdcard/ANDROIDHDD/DCIM/ /sdcard/DCIM/ 0
/sdcard/ANDROIDHDD/Pictures/ /sdcard/Pictures/ 0