Los botones de Home y Search no funcionan con CyanogenMod en Android

El problema

Después de actualizar el teléfono con la versión nocturna del 26 de agosto este se empezó a comportar de manera extraña: no aparecía el bloqueo del teclado y no funcionaban los botones físicos del teléfono de Home (casita) ni Search (lupa).  Esto aparentemente puede suceder con diferentes versiones de CyanogenMod con cualquier teléfono, esta vez fue mi caso.

La solución

Probé varias opciones desde limpiar los distintos cachés hasta restaurar la configuración de ADW y reinstalar el ROM sin resultados.

La solución llegó con simplemente agregar una opción a la base de datos de configuración de Android de la siguiente manera a través de la terminal (Terminal Emulator).

$ su -

# sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure (name,value) VALUES ('device_provisioned','1');"

A continuación se deberá reiniciar el teléfono y listo!

Instalación de Cyanogen Mod 7.2 en un teléfono LG Optimus One

Introducción

Cyanogen Mod [sigh-AN-oh-jen-mod] es un reemplazo open source del firmware de dispositivos Android con la adición de múltiples características y optimizaciones que no se encuentran por defecto en las distribuciones oficiales del sistema operativo.  En lo personal encuentro muy útiles la gran cantidad de opciones de personalización del teléfono y el ahorro de memoria (casi 50%) al no tener aplicaciones indeseadas instaladas por el vendedor.

Para tener mayor información acerca de Cyanogen Mod consultar su página web.

En este artículo se describen los pasos necesarios para instalar la versión 7.2 (basada en Android 2.3.7) en un LG Optimus One (otros móviles soportados).

Este procedimiento trae consigo posibles riesgos de daño, pérdida de información o pérdida de la garantía de los equipos en los que se efectue.  Debe realizarse bajo su propia responsabilidad.  Si requiere algún tipo de soporte consulte un foro especializado como XDA Developers.  No siga estos pasos si no está seguro de lo que está haciendo.

 

Prerequisitos

  • La batería del teléfono debe tener por lo menos 60% de carga para garantizar que no se va a apagar en medio del procedimiento.
  • El teléfono no debe tener las bandas cerradas (branded).
  • Se debe contar con acceso de root en el teléfono (rooted).
  • Se debe tener instalada una herramienta de recuperación (custom recovery).
  • Realizar una copia de seguridad de toda la información importante del teléfono.
  • Saber lo que se está haciendo y aceptar toda responsabilidad por el procedimiento.

Descargar el software necesario

  1. Cyanogen Mod, el ROM con el sistema operativo como tal.  En este caso se utilizó el archivo cm-7.2.0-p500.zip.
    http://download.cyanogenmod.com/?device=p500
  2. El Google Apps Package que incluye al Play Store.  En este caso se utilió el archivo gapps-gb-20110828-signed.zip.
    http://goo.im/gapps/
Estos dos archivos zip deben copiarse a la tarjeta SD del teléfono.

Instalar ROM Manager

Instalar esta aplicación de ClockworkMod en el teléfono desde el Play Store.
Con ella se recomienda realizar un backup del ROM actual (Backup current ROM).

Iniciar en modo de recuperación

Utilizando ROM Manager seleccionar la opción Flash ClockworkMod Recovery bajo la sección de Recovery.  Una vez terminado este proceso seleccionar la opción Reboot into Recovery.

Limpiar la información del sistema operativo

  1. Seleccionar la opción Wipe Data/Factory reset.
  2. Seleccionar la opción Wipe cache partition.
  3. Bajo la opción Advanced seleccionar la opción Wipe Dalvik cache.

Instalar los ROMs

Seleccionar la opción Install zip from SD card para instalar el ROM y Choose zip from SD card para establecer la ubicación en la tarjeta SD.

Este procedimiento se debe realizar tanto para el ROM de Cyanogen Mod como para el del Google Apps Package.

Reiniciar el teléfono

El paso final consiste en reiniciar el teléfono mediante la opción Reboot system now.  Si todo salió bien se deberá iniciar la versión de Cyanogen Mod recién instalada.

Enlaces

  1. Cyanogen Mod
    http://www.cyanogenmod.com/

    1. LG Optimus One
      http://www.cyanogenmod.com/devices/lg-optimus-one
    2. Announcement: CyanogenMod 7.2 Released! (2012-Jun-16)
      http://forum.cyanogenmod.com/forum-598/announcement-23-cyanogenmod-72-released-2012-jun-16/
    3. Wiki
      http://wiki.cyanogenmod.com/index.php?title=Main_Page
  2.  Google Apps Package
    http://goo.im/gapps/

Realizar el "rooting" de un teléfono LG Optimus One con Android 2.3 utilizando SuperOneClick

Introducción

El rooting de un teléfono con Android permite acceder al sistema operativo con el super usuario (root) lo que permite a su vez realizar tareas de administración que no son posibles para el usuario convencional.

Este procedimiento se realizó utilizando un PC con Windows 7 y un LG Optimus One con Android 2.3.3.  Las versiones recientes de SuperOneClick se encuentran desarrolladas en .NET por lo que teóricamente es posible ejecutarlas bajo Linux sin embargo las pruebas iniciales no fueron satisfactorias.

Este procedimiento conlleva posibles riesgos de daño, pérdida de información o pérdida de la garantía de los equipos en los que se efectue.  Debe realizarse bajo su propia responsabilidad.  Si requiere algún tipo de soporte consulte un foro especializado como XDA Developers.

Instalación de los drivers

Para realizar este procedimiento bajo Windows es necesario tener previamente instalados el driver de conexión al teléfono, ya sea el provisto por Google o el provisto por los diversos fabricantes (OEM).

Este driver puede ser instalado como parte del proceso de instalación del SDK de Android o desde la misma aplicación de SuperOneClick si no se cuenta con este en el momento de su ejecución.

Obtener SuperOneClick

El software se puede descargar desde la página de su desarrollador.  Para la realización de este procedimiento se utilizó la versión 2.3.3 la cual era la versión mas reciente en su momento.

Obtener y descomprimir el archivo SuperOneClickv2.3.3-ShortFuse.zip.

Activar USB debugging

Es necesario activar la opción de USB debugging en el teléfono, para hacer esto acceda a los siguientes menúes: Settings > Applications > Development y active la opción USB debugging.

Desmontar la tarjeta SD

Se recomienda desmontar la tarjeta SD para evitar conflictos o pérdida de información durante el desarrollo del proyecto.  Para desmontarla acceda a los siguientes menúes: Settings > Storage y presione la opción Unmount SD card.

Ejecutar SuperOneClick

Desde la ubicación donde fue descomprimido el paquete original ejecute la aplicación SuperOneClick.exe.  Es posible que esta deba ser ejecutada como administrador (opción de clic derecho).

Conecte el teléfono al PC a través del cable USB y finalmente presione el botón Root para que la aplicación inicie su proceso.

Ejecución de SuperOneClick
Ejecución de SuperOneClick

Postmortem

Una vez finalizado el proceso desactive la opción USB debugging activada anteriormente, monte nuevamente la tarjeta SD y busque en el teléfono la aplicación Superuser la cual indicará que el procedimiento de rooting ha sido exitoso.

Ocultando la barra de direcciones del navegador de Android

Introducción

Con los beneficios que las nuevas características de HTML5 y CSS3 traen a los desarrolladores de aplicaciones móviles cada día es mas frecuente que se desarrollen sitios y aplicaciones web diseñadas específicamente para estos dispositivos.

Las aplicaciones web móviles son en esencia una página web que emula en cierta medida el look-and-feel de las aplicaciones nativas para permitirle al usuario acceder a la funcionalidad de la aplicación con los beneficios (y desventajas) de una aplicación web pero con una experiencia similar a las aplicaciones convencionales.  Para hacer esto existen varios frameworks sin embargo hay ocasiones en las que es preferible no basarse en ellos sino implementar una página web estándar.

Ocultando la barra de direcciones en el navegador web de Android
Ocultando la barra de direcciones en el navegador web de Android

En esos casos probablemente la primera de las adaptaciones que se desea realizar es el ocultar la barra de direcciones del navegador ya que así se dará la impresión de aplicación nativa y no de página web convencional inmersa en un navegador.

En Android esto es posible lograr de cierta manera.  La barra de direcciones no puede ser eliminada por completo pero puede ser ocultada, es decir, no se verá durante la ejecución de la aplicación web móvil hasta que el usuario decida hacer el scroll necesario para acceder a ella.

Procedimiento

El procedimiento para lograr esto se basa en dos pasos que se deben realizar mediante Javascript.  El primero de ellos consiste en garantizar el la página web de la aplicación móvil cuenta con suficiente altura para poderse realizar.  Para esto se manipula el alto del body.  El segundo paso consiste en simular desde código un scroll lo que activará la característica del navegador de ocultar la barra de direcciones.

/**
 * Hide the URL address bar on standard Android's browser by setting enough
 * document height and auto scrolling to active the bar hiding feature
 */

function hideAddressBar()
{
  if(!window.location.hash)
  {
      if(document.height < window.outerHeight + 10)
      {
          document.body.style.height = (window.outerHeight + 50) + 'px';
      }

      setTimeout(function()
      {
      	window.scrollTo(0, 1);
      }, 50);
  }
}

Finalmente se invoca esta función una vez se ha cargado completamente (load) la página web, garantizando también que esto se haga durante los cambios de orientación del dispositivo.

/**
 * Start up procedure to hide the Android's URL bar
 */

window.addEventListener("load", function()
{

	if(!window.pageYOffset)
	{
		hideAddressBar();
	}

	window.addEventListener("orientationchange", hideAddressBar);

});

Enlaces

Experimentando un poco con el Canvas de HTML5

Introducción

Entre las muchas maravillas que nos trae HTML5 está el componente Canvas cuya funcionalidad es sorprendente en comparación con lo que nos tenía acostumbrados la versión anterior.  Durante este fin de semana decidí jugar un poco con el Canvas para experimentar con su funcionalidad básica de dibujar.

Para esto desarrollé una aplicación web muy simple que permite dibujar puntos y líneas en un lienzo blanco.  El color de las lineas puede ser modificado entre amarillo, azul y rojo.

La aplicación web resultante puede ser consultada desde un navegador web de escritorio o uno de un dispositivo móvil ya que no sólo se manejaron los eventos de ratón convencionales sino que también se incluyeron los eventos de touch que permiten detectar la interacción con las pantallas táctiles.

Demostración

Demostración uso básico de Canvas
Demostración uso básico de Canvas

Enlaces

Primeros pasos con PhoneGap para Android

Introducción.

PhoneGap en pocas palabras es un framework para el desarrollo de aplicaciones móviles que posibilita a los desarrolladores a que implementen sus proyectos utilizando las tecnologías estándar de web: HTML5, CSS3 y Javascript, y este las convierte a aplicaciones híbridas, es decir, aplicaciones nativas de las diferentes plataformas móviles existentes que tienen acceso a gran parte del API nativo.

Tomado de http://www.phonegap.com/
Tomado de http://www.phonegap.com/

Esto lo logra empaquetando la aplicación web original con un navegador basado en webkit para desplegarla como si fuera una aplicación verdaderamente nativa.

Actualmente este framework soporta seis de las principales plataformas móviles del mercado: iOS, Android, Blackberry, PalmOS, Windows Mobile y Symbian.  Para mas información acerca del estado actual del soporte en cada una de estas plataformas consultar las características soportadas.

Existen otros frameworks similares a este entre los que se destacan Appcelerator Titanium, Mobl y Sencha Touch de los cuales espero estar escribiendo mas adelante.

En este artículo se describirá el proceso de instalación de PhoneGap, la creación de un proyecto base para el desarrollo con este framework y la elaboración de un ejemplo simple.

Instalar PhoneGap.

Descargar la última versión disponible del framework desde la siguiente ubicación.

https://code.google.com/p/phonegap/downloads/list

Para efectos de la documentación se utilizará la versión 0.9.5.1 que corresponde con las mas reciente para esta fecha.

$ wget http://phonegap.googlecode.com/files/phonegap-0.9.5.1.zip

Se descomprime el paquete recién descargado y se mueve a su ubicación final.

$ unzip phonegap-0.9.5.1.zip

$ mkdir ~/phonegap

$ mv phonegap-0.9.5.1 ~/phonegap/0.9.5.1

Crear la plantilla base de un proyecto Android.

A continuación se relacionan los pasos que se deben realizar para crear un proyecto PhoneGap para Android utilizando Eclipse y el plugin ADT instalados anteriormente.

Iniciar Eclipse y crear un nuevo proyecto a través del menú File > New > Android Project.

Crear un nuevo proyecto Android
Crear un nuevo proyecto Android

En el diálogo de información del proyecto a crearse especificar al menos los siguientes campos y presione el botón Finish para continuar.

  1. Nombre del proyecto (project name).
  2. API de Android a utilizarse (build target).  En este caso se utilizará el API 2.2.
  3. Nombre de la aplicación (application name).
  4. Crear una actividad (create activity).
Información básica del proyecto Android
Información básica del proyecto Android

En el Explorador de Paquetes (package explorer)  de Eclipse crear bajo el proyecto una carpeta /assets/www y otra /libs.

Copiar en la carpeta /assets/www el archivo phonegap.0.9.5.1.js y copiar en /libs el archivo phonegap.0.9.5.1.jar.  Ambos archivos se encuentran bajo el directorio ~/phonegap/0.9.5.1/Android creado durante el paso de instalación anterior.

Estructura del proyecto Android
Estructura del proyecto Android

Hacer clic derecho sobre el directorio /libs y seleccionar el menú Build Path > Configure Build Path… Allí en la pestaña Libraries agregue la referencia a /libs/phonegap.0.9.5.1.jar presionando el botón Add JARs…

Agregar al proyecto la referencia al JAR de PhoneGap.
Agregar al proyecto la referencia al JAR de PhoneGap.

Realizar las siguientes modificaciones al código fuente de la actividad.  Este archivo se ubica bajo la carpeta /src del proyecto (/src/com.jimezam.phonegap.demo/App.java en este caso).

  1. Reemplazar la línea 3 (import android.app.Activity;) con la siguiente: import com.phonegap.*;
  2. En la línea 6 cambiar la superclase de App de Activity a DroidGap.
  3. Reemplazar la línea 11 (setContentView(R.layout.main);) con la siguiente: super.loadUrl(“file:///android_asset/www/index.html”);
Modificaciones a la actividad inicial.
Modificaciones a la actividad inicial.

Hacer clic derecho sobre el archivo AndroidManifest.xml y seleccionar el menú Open With… > Text Editor.  A este documento realizar las siguientes modificaciones.

1. Agregar el siguiente texto entre la apertura de la etiqueta <manifest> y la apertura de la etiqueta <application>.

<supports-screens
android:largeScreens=”true”
android:normalScreens=”true”
android:smallScreens=”true”
android:resizeable=”true”
android:anyDensity=”true”
/>
<uses-permission android:name=”android.permission.CAMERA” />
<uses-permission android:name=”android.permission.VIBRATE” />
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION” />
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” />
<uses-permission android:name=”android.permission.ACCESS_LOCATION_EXTRA_COMMANDS” />
<uses-permission android:name=”android.permission.READ_PHONE_STATE” />
<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.RECEIVE_SMS” />
<uses-permission android:name=”android.permission.RECORD_AUDIO” />
<uses-permission android:name=”android.permission.MODIFY_AUDIO_SETTINGS” />
<uses-permission android:name=”android.permission.READ_CONTACTS” />
<uses-permission android:name=”android.permission.WRITE_CONTACTS” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />

2. Agregar el siguiente atributo a la etiqueta <activity>.

android:configChanges=”orientation|keyboardHidden”

Modificaciones al documento AndroidManifest.xml.
Modificaciones al documento AndroidManifest.xml.

Finalmente crear el archivo /assets/www/index.html con el código fuente para la demostración.

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap demostration with Android</title>
<script type=”text/javascript” charset=”utf-8″ src=”phonegap.js”></script>
</head>
<body>
<h1>Hello Android’s World with PhoneGap</h1>
</body>
</html>

Ejecutar el proyecto en el emulador.

Seleccionar el menú Run > Run As > Android Application.

Ejecutar como aplicación Android.
Ejecutar como aplicación Android.

Estos son un par de ejemplos de aplicaciones web simples ejecutándose con PhoneGap en el emulador de Android.

Hola Mundo web con Android
Hola Mundo web con Android

The Simple List 0.1
The Simple List 0.1

Enlaces.

Instalar Eclipse y el plugin ADT en GNU/Linux

Introducción.

Para el desarrollo de aplicaciones en Android además de la instalación del SDK es necesario instalar Eclipse como ambiente de desarrollo -oficial- y el plugin ADT para su interacción con Android.

Obtener Eclipse.

Distribuciones de Eclipse
Distribuciones de Eclipse

Descargar de la siguiente ubicación una distribución de Eclipse que corresponda con el sistema operativo y arquitectura donde se desee instalar.  Para el desarrollo de aplicaciones con Android se recomienda utilizar la distribución clásica o la de Java, sin que esto aparentemente sea obligatorio.

http://eclipse.org/downloads/

Instalar Eclipse.

La instalación de Eclipse consiste únicamente en desempaquetarlo y ubicarlo en la ruta donde finalmente residirá.

$ tar zxvf eclipse-java-helios-SR2-linux-gtk.tar.gz

$ mv eclipse ~/

Instalar el plugin ADT.

Iniciar Eclipse y seleccionar la opción Install new software… del menú Help.

Presionar el botón Add… (esquina superior derecha) y especificar los siguientes valorses.

  • ADT Plugin como Name.
  • https://dl-ssl.google.com/android/eclipse/ como Location.
Agregar un repositorio a Eclipse
Agregar un repositorio a Eclipse

Seleccionar la casilla de verificación de la rama Developer Tools.

Paquete Developer Tools del plugin ADT de Eclipse.
Paquete Developer Tools del plugin ADT de Eclipse.

Presione el botón Next en los dos diálogos siguientes.  Seleccione la opción I accept the terms of the license agreements y presione el botón Finish para terminar el procedimiento.  Reinicie Eclipse cuando este lo solicite.

Configurar el plugin ADT.

En Eclipse acceda al diálogo de preferencias a través del menú Window > Preferences.

Seleccione la opción Android en el árbol del lado izquierdo.

Presione el botón Browse… y ubique el directorio de instalación del Android SDK si este no aparece correctamente.  Presione el botón Apply y finalmente Ok.

Preferencias del plugin ADT
Preferencias del plugin ADT

Enlaces.

Instalación del SDK R11 de Android en GNU/Linux

Introducción.

A pasado un tiempo desde que se describió el proceso de instalación del SDK 1.0 de Android y muchas cosas han cambiado desde entonces.  A continuación se describirá el procedimiento de instalación del SDK de Android en GNU/Linux, el cual deberá ser muy similar al de las demás plataformas.

Obtener y desempaquetar la distribución.

Descargar de la siguiente ubicación el paquete correspondiente al sistema operativo utilizado.

http://developer.android.com/sdk/index.html

En mi caso, como mencioné anteriormente, es GNU/Linux.

$ wget http://dl.google.com/android/android-sdk_r11-linux_x86.tgz

A continuación se descomprime el paquete recién descargado.

$ cd ~/

$ tar zxvf /<ruta>/android-sdk_r11-linux_x86.tgz

Instalar componentes adicionales.

En este paso se instalan los componentes del SDK como diferentes versiones del API, documentación, ejemplos y módulos provistos por terceros.

$ ~/android-sdk-linux_x86/tools/android

En este caso se va a realizar la instalación de los siguientes componentes.

  1. Android SDK Platform-Tools.
  2. Documentation for Android SDK.
  3. SDK Platform Android (2.2, API 8, revision 2).
  4. Samples for SDK (API 8, revision 1).
  5. Android Compatibility Package.
  6. Google Inc.
  7. LG Electronics.
Instalando componentes adicionales.
Instalar componentes adicionales.

Si decide instalar el componente de Google Inc. seleccione específicamente los módulos que desee segun las versiones del API que esté instalando.  Si elige instalarlos todos forzará a que se instalen también todas las versiones del API de Android.

 

Crear un AVD.

Un AVD hace referencia a un Android Virtual Device, es decir, a la imágen de un dispositivo virtual en el emulador.  El SDK de Android permite crear varios imágenes de este tipo con diferentes características.

Para las pruebas del software se creará el AVD de un dispositivo con una resolución de 320×480.

Crear un nuevo AVD.
Crear un nuevo AVD.

 

Enlaces.

Instalación de Android SDK 1.0 en Linux

Instalación de Android SDK.

Descargar la última versión disponible para la plataforma Linux de la siguiente ubicación.  Su nombre debe corresponder con la siguientes estructura: android-sdk-linux_x86-*.zip.

http://code.google.com/android/download.html

Establecer los directorios para su instalación.

$ mkdir ~/Android

$ cd ~/Android

$ unzip ~/RUTA/android-sdk-linux_x86-1.0_r2.zip

Modifique la RUTA donde descargó el SDK en el paso anterior.

Por facilidad utilizo un enlace dinámico que permitirá cambiar fácilmente entre las diferentes versiones instaladas.

$ ln -s android-sdk-linux_x86-1.0_r2/ current

Actualizar el PATH para incluír la ruta de la herramientas.

vi ~/.profile

(agregar al final)

export PATH=${PATH}:~/Android/current/tools

Instalación de Eclipse.

Descargue la versión de Eclipse Classic correspondiente a su sistema operativo de la siguiente ubicación.

http://www.eclipse.org/downloads/

$ mkdir ~/Eclipse

$ cd ~/Eclipse

$ tar zxvf ~/RUTA/eclipse-SDK-3.4.1-linux-gtk.tar.gz

Modifique la RUTA donde se descargó Eclipse.

Por facilidad utilizo un enlace dinámico que permitirá cambiar fácilmente entre las diferentes versiones instaladas.

$ mv eclipse eclipse-3.4.1

$ ln -s eclipse-3.4.1 current

Instalación del plugin de ADT para Eclipse 3.4.

Iniciar Eclipse normalmente.

$ ~/Eclipse/current/eclipse

Seleccione el siguiente menú.

Help > Software updates …

Seleccione la pestaña Available Software.

Presione el botón Add Site.

Ingrese la siguiente dirección y presione el botón Ok.

http://dl-ssl.google.com/android/eclipse/

Seleccione la casilla de verificación marcada como Developer Tools, esto seleccionará automáticamente las ramitas Android Development Tools y Android Editors.  Seleccione además la rama The Eclipse Project Updates para permitir que se instalen los plugins adicionales que se requieran.  Presione el boton Install.

Permita que se reinicie Eclipse después de la instalación de los diferentes plugins.

Para finalizar la instalación del plugin es necesario indicarle a Eclipse la ubicación del SDK, para esto se deben realizar los siguientes pasos.

  1. Acceder al menú Window > Preferences.
  2. Elegir la rama Android del lado izquierdo.
  3. Presionar el botón Browse y ubicar el directorio del SDK, el cual corresponde con ~/Android/current.
  4. Presione los botónes Apply y Ok.

Enlaces.