Android – Mi primera APK

Mi primera APK

Android es un sistema operativo para smartphones usado por millones de usuarios a lo largo y ancho de todo el mundo siendo uno de los sistemas operativos para móviles más extendidos.

Después de haber terminado el curso me está sobrando bastante tiempo que he decidido invertir en aprender algo de Android. Estoy haciendo una serie de aplicaciones para ir aprendiendo cómo funcionan las APKs de Android, por ahora sólo tengo publicada mi primera APK, las demás se irán publicando posteriormente, por tanto tendréis en este blog más apks del estilo.

En esta ocasión le ha tocado el turno a la shell de Android (aquí tenéis un post de cómo conectaros a la shell de vuestro smartphone desde vuestro PC). He programado una sencilla apk que introduce comandos en el sistema y nos devuelve la respuesta del comando en un TextView (campo de texto). Podéis verlo en Gitlab y descargaros el código fuente de ahí.

¿Cómo empezar a programar para Android? Esta vez no os soltaré la coletilla de “muy sencillo”, pero en la actualidad tenéis el software “Android Studio” un IDE (Entorno de programación) bastante completo que os ayudará a la hora de ir “picando teclas”. Para descargarlo podéis ir a su web oficial. Dentro de este IDE dispondremos de todo lo necesario para comenzar, desde asistentes hasta máquinas virtuales para probar nuestras aplicaciones.

Yo, en este caso he hecho la aplicación con Eclipse IDE, este entorno tiene ya bastantes años y es usado por multitud de empresas, es adaptable a múltiples lenguajes de programación a parte de Java. Para importar el proyecto a Android Studio tenemos la opción “Importar desde Eclipse”.

Para entender la base de una aplicación para Android hay que tener claro para qué sirve cada cosa, podemos comprobar que un apk no es más que un contenedor, como un .zip o .rar. Los usuarios de GNU/Linux lo podemos abrir con “Gestor de Archivadores” o cualquier otro descompresor.  El código fuente de la aplicación está separado por directorios entre los cuales podemos destacar:

/src/ : Es el directorio donde se encuentran las clases java de la aplicación, en el guardamos las Activities y el resto de clases java que necesitemos crear. Un Activity es una clase java destinada a controlar el layout al que esté relacionada.

/res/ : Es el directorio donde se almacenan los recursos de la aplicación, dentro de el figuran otros directorios como “layout” donde se almacenan las vistas, o “values” donde podremos indicar estilos y Strings. ¿Qué sentido tiene tener un archivo contenedor para todos los textos del layout de la aplicación? El motivo (entre otras cosas) es poder implementar la aplicación en varios idiomas y tener un poco más organizado el código. La aplicación cuenta con un LinearLayout, el cual está dentro de /res/layout/, existen varios tipos de layout, uno de los más sencillos de desarrollar es el Linear, el cuál comentaremos más adelante en otro post.

AndroidManifest.xml  Este archivo contiene información acerca de nuestra aplicación como por ejemplo el nombre de la APP, permisos que necesita, requerimientos de versión de Android, Activities que contiene la APK… Está ubicado en la raíz de los directorios de nuestra aplicación.

El código Java empleado en mi primera APK es muy sencillo, y no habrá mucha complicación en entenderlo. Consta de la clase del MainActivity y la clase ShellExecuter, respectivamente una se utiliza para controlar la vista y la otra es la clase dedicada a ejecutar los comandos y devolver el resultado.

MainActivity.java Como hemos dicho anteriormente, la Activity se encarga de controlar la vista, es el eslabón entre la vista xml del layout y el controlador, es decir el código java del motor de la aplicación. Lo he simplificado de la siguiente forma, desde el Main controlamos el evento onClick de nuestro botón el cuál llama a nuestra clase Executer.

public void onClick(View arg0) {
                // TODO Auto-generated method stub
                ShellExecuter exe = new ShellExecuter();
                command = input.getText().toString();
          
                	String outp = exe.Executer(command);
	                out.setText(outp);
	                Log.d("Output", outp);
	                
                
            }

ShellExecuter.java Esta clase es el motor del funcionamiento de nuestra aplicación, dentro encontramos los métodos Execute y getUptime, éste último método no lo llamo desde el MainActivity, lo dejo ahí por si os sirve para comprender mejor cómo funcionan las excepciones de forma más simplificada.