Publicado en Internet, Tecnología

Validar IBAN en JavaScript

IBAN

Si a estas alturas no has adaptado todavía tus aplicaciones web a la nueva normativa es porque te ha pillado el toro, sin discusión. Pero más allá de este pequeño detalle, si necesitas comprobar el IBAN con JavaScript y no logras dar con la tecla, no te preocupes, intentar dividir un número de 26 cifras en JavaScript es una tarea bastante compleja, como ya habrás descubierto si has caído aquí. Por suerte hay una forma diferente de calcular el módulo que con el operador ‘%’. Vamos allá.

// Función que devuelve los números correspondientes a cada letra
function getNumIBAN(letra){
   var letras = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   return letras.search(letra) + 10;
}

// Función que calcula el módulo sin hacer ninguna división
function mod(dividendo, divisor){
   var cDividendo = '';
   var cResto = '';
   
   for (var i in dividendo){
      var cChar = dividendo[i];
      var cOperador = cResto + '' + cDividendo + '' + cChar;
     
      if (cOperador < parseInt(divisor)){
         cDividendo += '' + cChar;
      }else{
         cResto = cOperador % divisor;
         if (cResto == 0){
            cResto = '';
         }
         cDividendo = '';
      }
   }
   cResto += '' + cDividendo;
   if (cResto == ''){
      cResto = 0;
   }
   return cResto;
}

// El típico trim que inexplicamente JavaScript no trae implementado
function trim(texto){
   return texto.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

// Función que comprueba el IBAN
function validaIBAN(IBAN){
   IBAN = IBAN.toUpperCase();
   IBAN = trim(IBAN); // Quita espacios al principio y al final
   IBAN = IBAN.replace(/\s/g, ""); // Quita espacios del medio
   var num1,num2;
   var isbanaux;
   if (IBAN.length != 24){ // En España el IBAN son 24 caracteres
      return false;
   }else{
      num1 = getNumIBAN(IBAN.substring(0, 1));
      num2 = getNumIBAN(IBAN.substring(1, 2));
      isbanaux = IBAN.substr(4) + String(num1) + String(num2) + IBAN.substr(2,2);
      resto = mod(isbanaux,97);
      return (resto==1);
   }
}

Con esto deberías tener suficiente, siempre se pueden hacer más comprobaciones para afinar un poco, como validar que los dos primeros caracteres sean letras y el resto números, o adaptar comprobaciones de longitud y posición para cada país, pero eso ya se lo dejo a cada uno, que aquí lo complicado es lo del módulo.

Para terminar, voy a dejar la explicación de la normativa, supongo que ya la conoceréis de sobra pero nunca está demás leerlo sin parafernalia lingüística:

El IBAN está compuesto por 2 letras que son el código del país, 2 números que hacen de dígitos de control y hasta un máximo de 30 posiciones más para la cuenta, la cantidad exacta depende del país. En España son 20 dígitos para la cuenta, así que tendremos los IBAN de 24 caracteres en total.

La manera de comprobar que un IBAN es correcto es siguiendo los siguientes pasos (ejemplo: ES38 0081 0283 4100 0111 1416):

  • Transformar las letras en números según la siguiente serie: A = 10, B = 11, C = 12, etc. Por lo tanto para España sería E = 14 y S = 28
  • Pasar tanto los códigos de las letras del país como los dígitos de control al final de la numeración, quedando así: 0081 0283 4100 0111 1416 142838
  • Obtener el resto de dividir éste último número entre 97 (mod 97)
  • Si el resto es 1, el IBAN es correcto, en otro caso no lo es

Espero que os sirva y ante cualquier duda ya sabéis, comentarios aquí abajo.

Publicado en Tecnología

Modo almacenamiento masivo (UMS) en Galaxy S3

Para los que venimos de terminales Android sin restricciones (Nexus mayormente) nos sorprende y decepciona que Samsung (entre otras) haya eliminado el modo «almacenamiento masivo» de algunos de sus terminales, a partir de Android 4.0, como por ejemplo del Galaxy S III. A cambio te ofrecen dos sistemas: MTP (Media Transfer Protocol) y PTP (Picture Transfer Protocol). Es decir, que cuando conectamos el termial por USB, ya no podemos transferir ficheros como si de un pendrive se tratase, sino que nos ofrece unos protocolos de transferencia similares, pero solamente de ficheros multimedia, que al fin y al cabo es lo que solemos transferir con mayor asiduidad. Pero veamos los pros y los contras del MTP frente al UMS (USB Mass Storage):

Pros

  • Podemos seguir utilizando el teléfono a pleno rendimiento ya que no desmonta la tarjeta SD para poder acceder a ella (siguen funcionando las apps instaladas en la SD)
  • Mayor seguridad en la transferencia de ficheros ya que comprueba cada operación que realiza evitando datos corruptos
  • Es prácticamente imposible romper nada

Contras

  • Sólo podemos transferir ficheros multimedia (vídeo, audio, imagen) y sólo de los formatos soportados por el protocolo (MKV no está soportado, por ejemplo)
  • No podemos ver todo el sistema, sólo las carpetas y ficheros multimedia
  • Es bastante más lento al hacer las comprobaciones antes mencionadas
  • Ni mucho menos es estándar por lo que muchos dispositivos no leerán el contenido del teléfono (equipos de audio, coche, TV…)
  • Sólo Windows lo implementa de forma navita, para utilizarlo con un Mac necesitas XNJB y en Linux necesitas libmtp
  • Es de Microsoft

Con este panorama, es lógico que mucha gente quiera volver a utilizar el teléfono en modo UMS. Por suerte y, como siempre, al ser Android un sistema tan abierto y accesible, podemos conseguirlo.

Requisitos

  1. Ser root (si no lo eres o no sabes si lo eres, deja de leer, esto no te vale)
  2. Tener instalado BusyBox
  3. Instalar Easy UMS

BusyBox

Para quien no lo sepa, BusyBox es un conjunto de comandos que se utilizan en Linux. Nuestros Android implementan varios comandos nativamente, pero necesitamos unos cuantos más para que Easy UMS funcione. Instalando BusyBox además conseguimos más armas para trastear con nuestro teléfono en modo consola, pero eso ya cada uno a su gusto.

Instala y ejecuta BusyBox desde Google Play. Tras un rato haciendo comprobaciones te permitirá darle al botón «Install», hay dos opciones, elegir la instalación pequeña o la normal, yo aconsejo la normal, pero si te queda poco espacio utiliza la pequeña.

Easy UMS

Esta es la clave de todo, es un programita desarrollado por la gente de XDA-Developers y que puedes obtener desde aquí. Descarga la última versión y guarda el APK en tu dispositivo. Ejecútalo para instalarlo. La utilización es bien sencilla, sólo hay 3 botones que paso a explicar:

UMS Mode

Tras pulsar este botón, la tarjeta SD se desmonta del móvil (no físicamente, claro) y es totalmente accesible por cualquier ordenador o dispositivo de lectura, excepto por el propio móvil, obviamente, tal y como hacía el viejo «modo de almacenamiento masivo». Cuando terminemos con nuestro propósito, debemos volver a montar la SD si queremos que la lea el teléfono.

Mount card

Si con UMS Mode desmontamos la tarjeta SD para «transformarla» en un pendrive, con este botón hacemos justo lo contrario, la montamos para que el teléfono la pueda seguir utilizando. Si no pulsas este botón, es como si la tarjeta no estuviera metida en el móvil.

MTP

Si conectamos el teléfono al PC con la tarjeta montada pero sin pulsar el botón MTP, el pobre ordenador no será capaz de leer la SD porque está montada en el teléfono y no tiene ningún protocolo de transferencia activo. Al pulsar MTP, podemos tener la SD montada y accesible por el teléfono y, a la vez, poder transferir ficheros multimedia desde el PC, es decir, tal y como viene de fábrica con el sistema original.

En resumen, si vas a transferir ficheros multimedia, dejarlo en MTP puede ser una buena opción. Si vas a transferir otro tipo de ficheros, quieres más velocidad o el receptor/emisor de los ficheros no es compatible con MTP, entonces enchufa el teléfono por USB, activa UMS Mode, transfiere, desenchufa y Mount card. Y cuando necesites transferir más cosas, enchufar, UMS Mode, desenchufar y Mount card.

Publicado en Tecnología

Quitar el sonido de la cámara en Android

Parece ser que en España está prohibido hacer fotos sin el característico sonido de la cámara, así que muchos terminales Android han desactivado la opción de poder quitarlo, pero todos sabemos que hay momentos en la vida de todo hombre, en los que es totalmente necesario tener esta posibilidad… Perfecto, no hay problema, si te responsabilizas del uso que vayas a darle, yo te explico ahora mismo la forma de hacerlo.

Hay dos métodos. Uno elegante y otro chapucero. El primero es en el que me voy a extender, el segundo es borrar los sonidos de la cámara (necesario ser root), obviamente, sin los ficheros de audio, no suena. Están en /system/media/audio/ui y son Shutter_01.ogg para el disparo (puede haber más si tu teléfono tiene varios sonidos de disparo) y Cam_Start.ogg y Cam_Stop.ogg para iniciar y parar la grabación. Puedes borrarlos o renombrarlos, hace el mismo efecto: no suena.

Pero como ya he dicho antes, la solución elegante, fina y profesional es otra. Vamos a agregar al menú de la cámara la opción de poder poner o quitar el sonido del obturador. Así no tendremos que renombrar los ficheros cada vez que queramos que suene o que no suene la cámara.

Requisitos

  1. Ser root
  2. Tener un gestor de ficheros root (yo utilizo File Manager)

Modificar fichero de configuración de la cámara

Con el gestor de ficheros navegamos hasta /system/csc y abrimos el fichero others.xml. La penúltima línea de este fichero es </FeatureSet>, pues justo encima tenemos que poner:

<CscFeature_Camera_ShutterSoundMenu>true</CscFeature_Camera_ShutterSoundMenu>

Teniendo especial cuidado en respetar las mayúsculas y minúsculas. Guarda el fichero y sal del gestor de ficheros. Reinicia el teléfono y listo, cuando vayas a la cámara verás una nueva opción que te permite desactivar el sonido del obturador. Así es como se ve en mi Samsung Galaxy S3:

Dudas, sugerencias, erratas, etc., como siempre, en los comentarios.

Publicado en Tecnología

Desactivar la descarga automática de imágenes en Whatsapp

Los que acaban de comprarse un Android nuevo y se han instalado Whatsapp, habrán notado que no es posible desactivar la opción de auto-descargar imágenes, y lo cierto es que no siempre deseas descargar todo lo que te mandan, especialmente en grupos (if you know what I mean). No sé a qué viene que hayan hecho desaparecer esta opción, pero si vienes actualizando de versiones anteriores no tienes este problema. Por suerte, y gracias a que Android es un sistema Linux, tenemos una solución, y de paso, un tirón de orejas para los desarrolladores de Whatsapp.

Requisitos

  1. Ser root. No es objeto de este artículo explicar nada al respecto, si no lo eres o si ni siquiera sabes lo que es esto, no sigas.
  2. Instalar un gestor de ficheros con permisos root. Yo he utilizado File Manager, especialmente porque es el que me parece más completo y puedes configurarlo como root y como no, que los teléfonos pasan por muchas manos.

Configurar File Manager

  1. Abre File Manager
  2. Menú > Configuración > Root Explorer
  3. Menú > Configuración > Mount System Folder
  4. Cuando termines todo el proceso, desmarca estas dos opciones

Modificar fichero de configuración de Whatsapp

  1. En File Manager pulsa el botón «Arriba» hasta que se deshabilite y entonces empieza a navegar hasta:
    /data/data/com.whatsapp/shared_prefs
  2. Mantén pulsado el fichero com.whatsapp_preferences.xml y pulsa «Permisos»
  3. En «Others» marca los dos primeros checkbox, «Read» y «Write»
  4. Pulsa de nuevo sobre el fichero com.whatsapp_preferences.xml y ábrelo con el editor de texto
  5. La última línea del fichero es </map>, justo encima escribe:
    <boolean name="autodownload_images" value="false" />
  6. Menú > Guardar
  7. Desmarca los dos checkbox que marcaste antes en «Others»
  8. Salir de File Manager

Si ahora entras en tu Whatsapp y te vas a Menú > Configuración > Configuración de chat, verás la opción «Auto-descarga fotos» que podrás marcar o desmarcar según lo que desees.

Resumen

  1. Ser root
  2. Instalar un gestor de ficheros con permisos root
  3. Editar el fichero:
    /data/data/com.whatsapp/shared_prefs/com.whatsapp_preferences.xml
  4. Al final, antes de </map> insertar la línea:
    <boolean name="autodownload_images" value="false" />
Publicado en Internet, Microsoft, Tecnología

Instalar aspSmartUpload en Windows Server 2008

Se podría decir que aspSmartUpload es un componente obsoleto, deberías echarle un vistazo a XelUpload (sube ficheros con ASP sin instalar componente alguno), pero me consta que todavía hay gente que lo utiliza y me han pedido que explique como instalarlo ya que da bastantes problemas y la documentación es muy pobre, además contactar con los creadores es prácticamente imposible, así que allá va, es fácil, pero hay que seguir bien los pasos, si no, efectivamente, no funciona.

Doy por hecho que tienes las dos dll que dan vida al componente: aspSmartUpload.dll y aspSmartUploadUtil.dll.

Instalación

  1. aspSmartUpload.dll debe estar en una carpeta que no cuelgue de C:\Windows
  2. aspSmartUploadUtil.dll debe estar en la carpeta C:\Windows\SysWOW64
  3. Abre la línea de comandos en modo administrador
  4. Ve al directorio donde está aspSmartUpload.dll, por ejemplo: C:\Users\Administrador\aspsmartupload_3
  5. Ejecuta: regsvr32 aspSmartUpload.dll
  6. Te aparecerá una ventana por el trabajo bien hecho.

Errores conocidos

Si aparecen los mensajes «Module cannot be loaded» o «Specific module could not be found», es que no has hecho caso a los dos primeros puntos de este tutorial.

Si aparece el mensaje «The Call to DllRegisterServer Failed with Error Code 0×80004005» es que no has abierto la línea de comandos en modo administrador.

Creo que no se me olvida nada. Si siguiendo estos pasos a rajatabla no te funciona, probablemente tengas un error en el código (pégalo en los comentarios y lo debatimos) o la versión del aspSmartUpload no es la 3 (que es la última y la que yo he probado).

Publicado en Tecnología

ReplaceAll en JavaScript

En todo lenguaje de programación es necesario un método para reemplazar caracteres por otros. En JavaScript tenemos replace() que funciona de la siguiente manera:

var textoOrigen = 'Hola mundo!';
var textoDestino = textoOrigen.replace('mundo','gente');
// RESULTADO: textoDestino = 'Hola gente!'

Hasta aquí todo bien, pero el método replace() sólo reemplaza la primera ocurrencia, es decir, si quisiéramos reemplazar todas las ‘o’ por ‘u’, en el ejemplo anterior, la cadena resultante sería ‘Hula mundo!’. Para solucionar este asunto y que se reemplancen todas las ‘o’ tendremos que utilizar una expresión regular:

var textoOrigen = 'Hola mundo!';
var textoDestino = textoOrigen.replace(new RegExp('o','g'),'u');
// RESULTADO: textoDestino = 'Hula mundu!'

La manera cómoda de utilizar esto sería:

var textoDestino = textoOrigen.replace(/o/g,'u');

Teniendo en cuenta que la ‘o’ va sin comillas. Esta segunda forma de expresarlo parece mejor, pero en ocasiones no lo es. Al prescindir de las comillas no podríamos poner una variable, lo cual sí podemos hacer con la primera solución.

Si no estás muy puesto en expresiones regulares, la ‘g’ te parecerá extraña, pero es la que indica que tiene que realizar la acción en todas las ocurrencias, que es precisamente lo que queremos. A continuación el resto de opciones:

g: realiza una búsqueda global (todas las ocurrencias)
m: realiza una búsqueda en múltiples líneas
i: realiza la búsqueda sin diferenciar mayúsculas y minúsculas

Se pueden utilizar a la vez, por ejmplo, RegExp(‘Mundo’,’gi’); Lo cual buscaría todas las ocurrencias de ‘Mundo’ sin importar las mayúsculas y minúsculas, es decir, valdría cualquiera de estas: ‘mundo’, ‘MUNDO’, ‘MunDo’, etc.

También os dejo una lista de caracteres especiales que pueden utilizarse como primer parámetro de RegExp:

. Cualquier caracter que no sea salto ni fin de línea
\w Caracter de texto
\W Caracter que no sea texto
\d Dígito
\D No dígito
\s Espacio
\S No espacio
\b Principio o fin de palabra
\B No es principio ni fin de palabra
\0 NULL
\n Intro
\f Avance de página
\r Retorno de carro
\t Tabulación
\v Tabulación vertical
\xxx Caracter especificado por el número octal xxx
\xdd Caracter especificado por el número hexadecimal xx
\uxxxx Caracter unicode especificado por el hexadecimal xxxx

Esto es todo amigos. El mundo de las expresiones regulares es enorme y fascinante, así que se puede conseguir casi cualquier cosa, pero para lo que nos concierne, con la ‘g’ tenemos suficiente. Si tenéis alguna duda estaré encantado de intentar solucionarla en los comentarios.

Publicado en Linux

Usar Dropbox con Caja

Si estás utilizando Caja, el fork de Nautilus, ya sea sobre un Linux Mint con MATE, o de cualquier otra manera, y quieres sincronizar Dropbox con tu explorador de ficheros favorito, estás de enhorabuena, porque hace bien poco se lanzó el paquete caja-dropbox para tal finalidad. La única pega es que no está del todo optimizado para instalar y listo, así que vamos a compilar el paquete, pero no os asustéis que es muy sencillo y rápido.

Instalar paquetes necesarios

Estos paquetes nos servirán para poder compilar este y otros muchos programas de aquí en adelante, así que no están nunca demás.

sudo apt-get install libcaja-extension-dev docutils-common build-essential mate-common

Descargar y descomprimir caja-dropbox

Simplemente has de entrar en esta web y elegir el fichero que más te guste, compresión zip o tar.gz. Yo explicaré como descomprimir el tar.gz, pero viene a ser lo mismo:

https://github.com/mate-desktop/caja-dropbox/downloads

Descomprimir el fichero descargado:

tar xvzf mate-desktop-caja-dropbox-c096075.tar.gz

Y accedemos a la carpeta que contiene los ficheros descomprimidos:

cd mate-desktop-caja-dropbox-c096075

Instalar caja-dropbox

Muy fácil, los 3 pasos típicos para hacer una instalación compilando el código:

./autogen.sh
make
make install

Y para terminar reiniciamos Caja:

killall caja

Listo. Ya puedes ejecutar tu Dropbox para sincronizar tus ficheros mediante Caja.

Publicado en Linux

Configurar vsftpd y evitar los errores 500 y 530

La instalación y configuración de vsftpd, para algunos el servidor FTP más seguro del mundo, es muy fácil e intuitiva. El problema viene con ciertas particularidades y, sobre todo, con los errores ‘500 OOPS: vsftpd: refusing to run with writable root inside chroot()’ y ‘530 Login incorrect’ que no dejan conectarse con un usuario local del servidor. Vayamos por partes.

Instalación

Como en la mayoría de los programas básicos, se puede instalar mediante apt o yum según tu sistema. Yo lo he hecho en un Ubuntu Server 12.04 así que el comando sería el siguiente:

sudo apt-get install vsftpd

También puedes descargarlo de su web oficial.

Configuración

vsftpd

Vamos a abrir el fichero de configuración del vsftpd y analizar los puntos más importantes:

sudo nano /etc/vsftpd.conf

Hay muchos parámetros que podemos configurar, pero esto estaría lo básico:

  • listen = YES
    Para que se inicie con el sistema.
  • anonymous_enable = NO
    No permitimos que usuarios anónimos puedan conectarse a nuestro servidor. Es por seguridad, pero si tú quieres permitirlo tendrás que configurar algunos parámetros más para que no puedan trastear mucho.
  • local_enable = YES
    Para poder conectarse con los usuarios locales del servidor donde está instalado.
  • write_enable = YES
    Si quieres que los usuarios puedan escribir y no sólo descargar cosas.
  • local_umask = 022
    Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.
  • chroot_local_user = YES
    chroot_list_enable = YES
    Sirven para que los usuarios locales puedan navegar por todo el árbol de directorios del servidor. Evidentemente esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.
  • chroot_list_file = /etc/vsftpd.chroot_list
    Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor y poco más.

Hay pocos parámetros más, pero si quieres échales un vistazo porque vienen bien explicados en el propio fichero.

vsftpd.chroot_list

Este fichero no suele existir así que debemos crearlo y editarlo. Aquí irán los nombres de usuarios que queremos que puedan listar todos los directorios del servidor y no sólo el suyo asignado por FTP. Esto viene bien para usuarios administradores.

sudo nano /etc/vsftpd.chroot_list

Este comando te abrirá un documento vacío, pon en cada línea un nombre de usuario.

Grupo FTP

Todos los usuarios que queramos utilizar para FTP deben estar albergados en el mismo grupo para así darles unos permisos especiales como no poder conectarse por SSH al servidor.

Creamos el grupo:

sudo groupadd ftp

Creamos una shell fantasma para que no puedan entrar a la consola del servidor:

sudo mkdir /bin/ftp

Abrimos la lista de shells del sistema:

sudo nano /etc/shells

Agregamos nuestra shell fantasma al final del fichero:

/bin/ftp

Usuario FTP

Lo primero es crearle una carpeta de usuario. Puedes hacerlo donde tú quieras, pero yo suelo meterles a todos en una subcarpeta del home general.

Creamos la carpeta para meter a los usuarios:

sudo mkdir /home/ftp

Creamos la carpeta del usuario particular:

sudo mkdir /home/ftp/antonio

Creamos el usuario:

sudo useradd -g ftp -d /home/ftp/antonio -c "Antonio Garcia Lopez" antonio

Explicación:

-g ftp => el usuario pertenece al grupo ftp
-d /home/ftp/antonio => el directorio principal del usuario es /home/ftp/antonio
-c «Antonio Garcia Lopez» => el nombre completo del usuario es Antonio Garcia Lopez
antonio => la última palabra será el nombre de usuario

Ahora le asignamos una contraseña:

sudo passwd antonio

Y finalmente le asignamos la shell fantasma:

sudo usermod -s /bin/ftp antonio

Este paso se podía haber hecho al crear el usuario, pero lo dejo separado por si queremos asignarle la shell fantasma o no.

Errores conocidos

530 Login incorrect

Este error es el más común con la última versión del vsftpd. Es un gran quebradero de cabeza con una solución muy simple:

sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd
sudo apt-get install vsftpd

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Este error se da porque vsftpd no permite que los usuarios puedan escribir en su carpeta raíz. Una solución es quitarle los permisos de escritura a esa carpeta. Esto hará que el usuario no pueda hacer nada en su propia carpeta, así que lo mejor es crearle otra dentro con permisos normales para que pueda utilizarla.

sudo chmod 555 /home/ftp/antonio
sudo mkdir /home/ftp/antonio/documentos
sudo chown antonio:ftp /home/ftp/antonio/documentos

Con todo esto ya deberías poder acceder al servidor FTP con cualquier usuario del sistema sin ningún problema.

Publicado en Tecnología

No carga el ClockworkMod Recovery

A mi me ha pasado con un Nexus One al intentar hacer un wipe de la Dalvik Cache, pero vale para cualquier terminal que utilice ROM Manager y para cualquier propósito.

El problema es que intentas iniciar el ClockworkMod Recovery pero te aparece la pantalla típica de los skaters que viene por defecto en Android. No hay ningún problema.

  1. Entra en ROM Manager
  2. Menú > Ignorar Flash Manual > Aceptar > Elegir modelo de móvil > Elegir versión de ClockworkMod Recovery

Y al reiniciar tendrás la interfaz del propio ClockworkMod Recovery lista para trastear a tu gusto.

Publicado en Tecnología

Instalar todas las apps en la SD sin ser root

Para quienes tienen un Android con memoria interna abundante, este tutorial no tiene mucho sentido, sin embargo, para los que tienen pocos megas se darán cuenta que en cuanto instalen 40 o 50 aplicaciones, la memoria interna se llena y, a pesar de que hay apps con la opción de poder instalarlas en la SD, no son ni mucho menos todas y el problema persiste.

Pues bien, hoy os voy a explicar la manera de poder instalar todas las aplicaciones en la tarjeta SD sin necesidad de ser root e, incluso, de manera automática. Es decir, directamente desde el market, al instalar una aplicación, se instalará en la SD, si no es así, siempre podrás moverla manualmente. Lo mismo que hace un Android rooteado.

Requisitos

  • Android 2.2 o superior
  • Android SDK
  • Cable USB
  • Un ordenador

Instalar Android SDK

Si utilizas un sistema operativo basado en Linux pásate por este tutorial donde ya expliqué como hacerlo. Si por el contrario utilizas Windows o Mac OS (y por tanto irás al infierno), ve a la web de desrrolladores de Android y descarga de allí los ficheros correspondientes para la instalación (no parece difícil, pero yo no doy soporte al demonio).

Móvil en modo depuración

Hay que poner el móvil en modo depuración para poder modificar el parámetro que haga que se instalen las aplicaciones en la SD por defecto. Para ello vamos a:

Ajustes > Aplicaciones > Desarrollo > Depuración USB

Una vez activado el modo depuración, conectamos el teléfono al ordenador mediante el cable USB.

Cambiar lugar predeterminado de instalación

Con el móvil conectado en modo depuración abrimos un terminal y accedemos a la carpeta tools o platform-tools (dependerá de la versión del SDK que hayas instalado) que se encuentra dentro del directorio donde instalaste el Android SDK. Una vez allí ejecutamos lo siguiente:

:~/android-sdk/tools$ ./adb shell pm setInstallLocation 2

Esto hará que, por defecto, todas las aplicaciones se instalen en la tarjeta SD. Si quieres que el lugar predeterminado sea otro:

  • Por defecto (donde la app diga): adb shell pm setInstallLocation 0
  • En el teléfono: adb shell pm setInstallLocation 1
  • En la tarjeta SD: adb shell pm setInstallLocation 2

El sistema viene configurado para que el setInstallLocation sea 0 así que si quieres volver a estado natural del móvil tendrás que poner esa opción siguiendo el tutorial de la misma manera. Obviamente en Windows se ejecutaría el adb en la consola de MS-DOS (y sin el ./ delante que sirve para los ejecutables Linux) y en Mac OS en la suya, el comando es el mismo en cualquier sistema.

Una vez cambiado el lugar predeterminado de instalación de las aplicaciones, cualquiera que instales nueva lo hará allí, y las que ya tienes instaladas podrás moverlas sin problemas. Ahora sólo queda desenchufar el móvil, quitar el modo depuración y empezar a disfrutar de más espacio en el teléfono.

Problemas conocidos

Para que los widgets funcionen tienen que estar instalados en el teléfono así que éstos no los muevas a la SD. Por lo demás funciona perfectamente desde Android 2.2 hasta Android 2.3.4 que es lo que he probado hasta la fecha.

Resumen

Instalar Android SDK

Móvil en modo depuración: Ajustes > Aplicaciones > Desarrollo > Depuración USB

Con el móvil conectado por USB:

:~/android-sdk/tools$ ./adb shell pm setInstallLocation 2