domingo, 24 de febrero de 2013

Borrar la Dalvik-cache

Llevo ya un año y medio con mi Samsung-Galaxy ACE y estoy, en general, contento con él. Sin embargo, el espacio libre que tengo en la memoria interna del móvil es miserable - No hago más que mover aplicaciones a /system y a la tarjeta SD y cada vez tengo menos espacio en el teléfono - Es patético, luchando por 0.5 megas para poder mantener el espacio libre de la tarjeta interna del teléfono por encima de los 20 Mb y que no me salga el horrible mensaje indicándome que, una vez más, no tengo memoria en el teléfono.

Se supone que el teléfono tiene 178Mb de memoria disponible, me paso el día limpiando caches, borrando logs del sistema, luchando por kilobytes - ¿Dónde se ha ido pues esa memoria si no tengo ni una sola aplicación instalada en la memoria /data de mi teléfono? -  La respuesta está entre los datos de las aplicaciones que tengo instaladas (22 Mb) y la caché dalvik - 123 Mb.

Disculpen los señores desarrolladores de Android, ¿La caché esa de marras para la máquina virtual Java está comiendose el 70% de la capacidad de almacenamiento interno de mi teléfono?. La respuesta, obviamente, es sí.

Pues he borrado la Dalvik-cache, de nuevo, usando adb shell y mis superpoderes de superusuario:
# cd /data/dalvik-cache
# busybox rm -r *

Y a reiniciar el teléfono se ha dicho. Tardará un poco en reiniciar (un par de minutos, no más) pero ahora tengo 85Mb libres. ¿Estaba el sistema operativo gastando 55Mb que no necesitaba? - ¿Estaba desperdiciando casi un 31%  de la memoria del teléfono?. La respuesta, obviamente, vuelve a ser sí. Pero ahora ya lo sé para otro día.

La explicación que he encontrado por ahí es que la dalvik-caché es una zona de memoria que la máquina virtual Dalvik, usada por Android, utiliza para ejecutar las aplicaciones. La memoria gastada no se recupera, es decir, que resulta conveniente realizar una limpieza de la dalvik cache de vez en cuando. Sin embargo, es necesario ser root para hacer este mantenimiento.

martes, 29 de enero de 2013

Ringtones Android - Cementery Gates

Por doquier podemos encontrar como añadir Ringtones - O tonos de llamada - para nuestro android. Simplemente, en nuestra tarjeta sd creamos una carpeta RINGTONES en la que dejamos ficheritos con formato mp3 y ya está.

A mi me gustaría que cuando me llamase alguien me sonase el tema "Cementery Gates" y en honor a los geniales Riffs del difunto Dimebag Darrell me gustaría que sonase ese ratito entre el instante 1 minuto, 32 seguntos y 9 centésimas y durante 34 segundos - Rarito que soy.

Menos mal que tenemos dos herramientas excelentes en Linux para hacer este tipo de cosas: mplayer y lame.

Muy fácil hacerlo, sólo hay que tener instalado Lame y mplayer, por ejemplo, en Ubuntu:
$ sudo apt-get install lame mplayer

Y con los siguientes comandos podemos hacernos el tono:
$ mkfifo /tmp/mififo
$ lame -b 64 /tmp/mififo ~/pantera_cmg.mp3 & mplayer -ss 00:01:32.9 -endpos 00:00:34 -ao pcm:file=/tmp/mififo  03\ -\ Cemetery\ Gates.mp3 

Salen unas letras por la pantalla y ya tenemos, en nuestra carpeta personal en el PC el fichero pantera_cmg.mp3. Sólo tenemos que conectar nuestro teléfono al PC, copiarlo en la carpeta RINGTONES de la tarjeta SD. Luego, establecemos el tono del teléfono como siempre (Ajustes->Sonido->Melodía del teléfono)... Y a decirle a la gente que nos llame a menudo para disfrutar de nuestro ringtone nuevo.

Lo único complicado de esto es encontrar el fragmento musical adecuado para nuestro ringtone.

Podemos poner tantos tonos como queramos y si ya eres el gran friki de los tonos... A lo mejor te interesa probar RandTone.

Explicaciones al comando:
lame -b 64 /tmp/miffo ~/pantera_cmg.mp3

Convertimos lo que se lee del "fifo" mififo que hemos creado en el comando anterior en un mp3 llamado ~/pantera_cmg.mp3 y con un bit rate de 64kbps - No hace falta mucha calidad para un ringtone - creo yo.

mplayer -ss 00:01:32.9 -endpos 00:00:34 -ao pcm:file=/tmp/mififo  03\ -\ Cemetery\ Gates.mp3

Lo que hace es leer del fichero "03 - Cementery Gates.mp3" entre 1' 32.9'' (-ss) y durante 34 segundos (-endpos 00:00:34) sacando el sonido, en lugar de por la tarjeta de sonido, en el fifo que hemos creado antes. Si omitimos eso de "-ao pcm:file=/tmp/mififo" nos sonará ese fragmento de canción por los altavoces.

Ahora, como necesitamos un proceso que lea del fifo (lame) y otro que escriba (mplayer) y necesitamos que se ejecute antes el primero que el segundo, pues lo ponemos todo seguido y lo unimos por "&"


lunes, 28 de enero de 2013

... Y Android es Unix!!!

En realidad siempre lo he sabido: Android es Unix, pero hasta este momento no me había parado a disfutarlo. Hace unos días rooteé mi teléfono y descubrí el "adb shell". ¡Y vaya descubrimiento!. Ahora, con "su - ", desde ese fantastico "adb shell" ya soy root.

He descubierto que hay 2 particiones que especialmente me resultan interesantísimas: /system y /data.

La primera, /system, es una partición que se monta como solo lectura. En esta partición nunca se mete nada nuevo - Es lo que tiene eso de ser de sólo lectura. Pero tiene un espacio libre que podría venir muy bien en teléfonos escasos de espacio (como por ejemplo, mi Samsung Galaxy ACE).

En la segunda partición, /data, se consume el espacio a pasos de gigante. Todas las actualizaciones del sistema van a parar a esta partición, al igual que otro montón de aplicaciones que tienen que instalarse "por que sí" en la memoria interna del teléfono.

Por otra parte, yo pensaba que había descubierto la panacea para poder instalar aplicaciones sin ningún tipo de problema de memoria, tan sólo había que abrir el "adb shell" con el teléfono al ordenador por USB y teniendo activado el modo de depuración USB activadoen el teléfono y poner "pm setInstallLocation 2" y salir, tal y comenté en una entrada anterior en este blog:

$ adb shell
$ pm setInstallLocation 2
$ exit

Pero eso no era la panacea, ni siquiera es suficiente y la memoria se siguió gastando y mi teléfono siguió con sus "avisos" de no tengo memoria. Pero bueno, ahora sé como entrar en el teléfono.

Yo más o menos me defiendo en Linux, así que, por trasferencia de conocimientos, no me ha sido dificil empezar a trastear con adb.

Y es que ahora tengo una shell para mangonear en el teléfono"un poquitito" tanto como app como desde mi ordenador. Este último tiene la ventaja de contar con un teclado en condiciones. No es que el "adb shell" sirva de mucho, pero claro, desde hace unos días soy root, y aprovechando esa circunstancia, dentro del shell adb
$ su - 


Ahora sí que tengo la Shell para mangonear el teléfono a mi gusto. Así que, parafraseando a Belén Esteban, ¡manos a la obra, que es gerundio!

Aviso que soy novato en esto de trastear con el teléfono, simplemente me he dedicado a observar y a jugar para aprender. Si repites mis acciones y te sale mal no me culpes. En esta entrada del blog lo único que estoy haciendo es explicar lo que yo he hecho en mi teléfono y con mis apps. No he roto nada, pero no quiero decir con ello que no esté en camino de hacerlo o que si siges mis pasos tu rompas algo. Cada cual se responsabilice de lo que hace con su teléfono.

El tema es que haciendo cd pa'rriba y cd pa'bajo, acabé en el directorio /data/log y me doy cuenta de que tengo en ficheros de log de java (con Stack traces de Java Exceptions y toa la ostia) 8Mb de la partición /data de mi pobre teléfono hambriento de espacio - ¡Salgo en su rescate!
# cd /data/log
# for a in *; do > $a ; done

Y resulta que el teléfono me siguió funcionando con unos pocos de megas más en la partición /data.

Leí por ahí que simplemente con dejar el fichero .apk en la carpeta /system/app la aplicación ya estaría instalada, y que también habría que quitarlo de /data/app - Lo que viene siendo el mover un fichero de toda la vida, vaya.

Tengo 2 aplicaciones por ahí, com.devuni.flashlight-1.apk (Linterna) y com.android.vending-1.apk (que Dios me pille confesado y que no sea demasiado importante) y que las voy a mover a /system/app. Pero tengo el problema de que /system/app es de sólo lectura - Hay que volver a montar la partición como lectura escritura. - Miro las particiones con el comando "mount" y veo que /dev/stl12 está montado en la carpeta /system:
# mount

rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/stl14 /cache rfs rw,nosuid,nodev,relatime,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0
/dev/stl13 /data rfs rw,nosuid,nodev,relatime,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0
/dev/stl12 /system rfs ro,relatime,vfat,log_off,check=no,gid/uid/rwx,iocharset=utf8 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
.....

Bueno, pues volvamos a montarla como lectura y escritura...
# mount -o rw,remount -t yaffs2 /dev/stl12 /system

Y voy a mover los ficheros a /system/app.

Me he encontrado con 2 sorpresas a la hora de  trabajar con este shell. La primera es que el comando "cp" no esta en mi Android. La segunda es que el comando "mv" simplemente cambia el nombre de un fichero, es decir, que no podemos usarlo para mover ficheros entre distintas particiones. - Al menos tengo los viejos comando cat y rm que harán la tarea.

Pos ale, a mover todas los apks a la carpeta /system/app:
# cd /data/app
# for a in *.apk; do cat $a > /system/app/$a ; done
# rm /data/app/*.apk

Salgo del shell adb a base de "exit", reinicio el teléfono...

¡Y la linterna me funciona!, ¡hasta con el Widget y todo!
¡Y puedo ir al android Market! - 

¡Las bobadas que hace uno por 15 miserables Megas extra!

viernes, 11 de enero de 2013

Instalar APPS en tarjeta SD.... Y limpieza del teléfono

Para instalar aplicaciones en tarjeta SD, seguir este genial tutorial!


Básicamente, hay que conectar el teléfono al ordenador (sin conectar el modo de almacenamiento) y con el modo de depuración activado Ajustes > Aplicaciones > Desarrollo > Depuración USB.

Después, usando los comandos
jicarretero@corporario:~/Descargas/adt-bundle-linux-x86_64$ sdk/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
S583049daa8b8   device

jicarretero@corporario:~/Descargas/adt-bundle-linux-x86_64$ sdk/platform-tools/adb shell
$ pm setInstallLocation 2
$ exit

Tendremos un pequeño cambio en nuestro teléfono, en el que las aplicaciones, por defecto, se instalarán en la tarjeta SD del teléfono.

Una vez hecho esto, en el administrador de aplicaciones, Ajustes > Aplicaciones > Administrador de Aplicaciones > En tarj. SD, nos aparecerán todas las aplicaciones instaladas en la SD o que podemos mover a la tarjeta SD. Simplemente necesitamos moverlas y liberaremos espacio de almacenamiento interno en el teléfono. Y lo que es mejor, ya no gastaremos espacio de almacenamiento interno en el futuro.

Podemos instalar la APP root uninstaller para poder eliminar aquellas aplicaciones que nos sobran - Esas que meten los operadores y que son totalmente inútiles, y que incluso, pueden costarnos dinero. Había una de Movistar que se conectaba por no se dónde a Internet.

jueves, 10 de enero de 2013

Samsung Galaxy Ace S5830 Libre!

Actualizo esta entrada para comentar que es vieja y que probablemente, ya no tenga mucho sentido.

La compañía telefónica que me subyuga también tiene muy malas críticas a la hora de liberar terminales móviles. Por ponerle un nombre imaginario y no dar datos excesivos de la compañía, la llamaré Mob-star

Esta gente de Mob-star no da un buen servicio en su línea de atención al cliente, a este servicio técnico, lo llamaré Elmicuarto, por ponerle un nombre. De hecho yo calificaría el servicio de atención al cliente de Elmicuarto como PÉSIMO. Y considero que me han maltratado como cliente en múltiples ocasiones hasta este momento, especialmente desde que contraté la línea fija y el ADSL con ellos.

Mi permanencia con estos ahuyentadores de clientes está a punto de expirar y escaldado me iré.  Pero quiero irme con mi teléfono, que bastante caro me ha salido por culpa de la dichosa permanencia. Sin duda sale más barato comprarse un teléfono libre y financiarlo a 18 meses que pagar tu teléfono con permanencias, pero esto es otra historia.

Supongo que muy probablemente tendré con ellos otro punto más de discordia: Ellos no me liberarían el teléfono hasta que no se termine mi permanencia y yo, no quiero estar con ellos ni un día más del tiempo que ésta dure. Por otra parte, tuve una mala experiencia hace años con Vodafone: Terminada mi permanencia me fui a otra compañía y después se negaban a liberar mi terminal alegando que ese servicio sólo se lo prestaban a sus clientes y yo ya no era cliente suyo. No tengo ganas de volver a mantener otra conversación de besugos con los amigos de Elmicuarto de nuevo.

Al tema, que divago. Mi teléfono es un Samsung Galaxy Ace S5830. Instalé Samsung Kies en mi PC usando el otro sistema operativo (el Windows este que venía cuando me compré el ordenador) y actualicé el sistema operativo del teléfono móvil a un GingerBread 2.3.6.en un proceso realmente fácil.

Una vez actualizado el sistema operativo y me dispuse a rootearlo tal y como indican en este blog: http://www.kazike.es/index.php/root-a-galaxy-ace-s5830/2012 - La lectura de esta entrada de blog es más que recomendable para entender lo que a continuación explico, es decir, lo que hice

Me bajé los ficheros .zip que indican en esa entrada del blog y uno a uno los fui probando. ¡Oh cielos! - No funcionó ninguno y me tocó seguir buscando. Encontré por ahí que el problema es tan simple como que no hay espacio para la instalación del parche en la memoria interna del teléfono. ¡Tan simple y tan complicado! ¿Cómo hacer espacio en la memoria interna del teléfono?.

Encontré que una solución era borrar "Thinkdroid". Una aplicación que ocupa casi 10Mb y que a día de hoy, año y medio después de comprar mi teléfono no había utilizado aún. - ¡Podía permitirme el lujo de hacerlo! - Encontré en HTC Manía (http://www.htcmania.com/showthread.php?p=5837909) cómo descargarme los ficheros necesarios: Delete_Thinkdroid.zip.

Por otra parte, también leí esta entrada del blog, http://lgallardo.com/2011/12/03/como-rootear-el-samsung-galaxy-ace/ de donde saqué información (y el fichero) del parche que utilizaría para rootear el teléfono:  AceGingerRoot.zip .

El procedimiento de rootear no fue demasiado complejo después de todo:
1. Descargar ese par de ficheros y copiarlos a la tarjeta sd del terminal.
2. Apagar terminal y encenderlo presionando la tecla "menú" indefinidamente hasta que apareció la pantalla de restauración del terminal.
3. Seleccionar "Apply update from sdcard" y seleccionar Delete_Thinkdroid.zip.
4. Seleccionar "Apply update from sdcard" y seleccionar AceGingerRoot.zip
5. Reiniciar el terminal y... ego root sum!!!

Al final dejo un par de enlaces sobre Delete_Thinkdroid.zip y AceGingerRoot.zip.

El Procedimiento de liberar el teléfono parecía bastante fácil, tal y como se indica en el primer blog al que me referí al principio de esta entrada, seguimos los pasos:
1. Instalar Android terminal
2. Ejecutar los comandos
   su
   dd if=/dev/block/stl5 of=/sdcard/stl5.rfs
3. Conectar el terminal por usb al ordenador y mirar el fichero mits/perso.txt. En mi caso,
   mkdir foo
   mount -o loop /media/mysdcard/stl5.rfs foo
   vi foo/mits/perso.txt

Y busqué la cadena de 8 números con el comando de búsqueda vi:
   /[0-9]{8}

Y efectivamente, ahí estaba ese número de 8 dígitos (y alguna que otra sucesión de 8 ceros sin interés). Anoté dicha combinación de números.

Cuando llegué a casa, cogí una tarjeta SIM vieja que tenía por ahí de otra compañía, arranqué el teléfono con dicha SIM y metí su código PIN. Después, en una pantalla negra, mi pidió mi número de desbloqueo y metí ese número que había anotado antes. - ERROR, me dijo, NÚMERO DE DESBLOQUEO ERRÓNEO. -- Pero me engañaba el traductor del mensaje (seguro que era el mismo que tradujo los mensajes de error de Windows) y ya tenía un móvil libre!

Que contento estoy. Que poco me queda de lidiar con Mob-star.

Enlaces:

Delete_Thinkdroid.zip:
http://dl.dropbox.com/u/52264538/Delete_thinkdroid.zip
http://forum.xda-developers.com/attachment.php?attachmentid=1281452&d=1345874726

AceGingerRoot.zip
http://lgallardo.com/wp-content/uploads/files/android/sga/root/AceGingerRoot.zip