Si tienes dudas o problemas, o prefieres pasar el tiempo, éste es tu lugar. Un lugar donde todos compartimos algo en común: GNU/Linux. "Somos más linuxeros que Torvalds y más barbudos que Stallman".

Ver más
  • 15,153 Miembros
  • 19,385 Temas
  • 3,921 Seguidores
  • 1

[Tutorial] Desarrollando Aplicaciones para Android en Linux

Android: qué es?

Android es un sistema operativo inicialmente desarrollado por Android Inc., una firma comprada por Google en el 2005.6 Android está basado en una versión modificada del Kernel de Linux.
Tiene una gran comunidad de desarrolladores escribiendo aplicaciones para extender la funcionalidad de los dispositivos. A la fecha, existen cerca de 100.000 aplicaciones disponibles para Android.12 13 Android Market es la tienda de aplicaciones en línea administrada por Google, aunque existe la posibilidad de obtener software externamente. Los programas están escritos en Java


Estructura de una aplicación Android

La estructura de una aplicación Android está definida por la interacción de distintos componentes, haciendo énfasis en la "agrupación debil" de distintas piezas. La aplicación hará uso de las distintas APIs expuestas por Android, de forma que los componentes encargados de realizar cada tarea puedan ser manipulados o reemplazados sin problemas, asegurando la máxima flexibilidad. Por ejemplo, una aplicación puede permitir al usuario elegir fotos mediante el componente "Galería" o, por ejemplo, reemplazar esa "Galería" por una selección de fotos a través de un servicio online. Los principales componentes de una aplicación serían:

Activity
Representa cada una de las principales tareas que el usuario puede llevar a cabo en la aplicación. Típica (aunque no necesariamente) corresponderá a una pantalla específica de la aplicación y, también normalmente, una "activity" será el punto de entrada (pantalla inicial) de nuestra aplicación. Desde ella se invocarán las vistas, específicas o layouts, para la aplicación.
IntentReceiver
Permite a nuestra aplicación declarar ciertos "callbacks" que responderán a cambios en el estado del terminal. P.ej. llamada o email recibido, cambio en la geolocalización, etc.
Service
Una tarea que corre en el background y que puede y debe ejecutarse sin interacción con el usuario. Una aplicación puede mandar los mensajes necesarios a un determinado servicio activo.
ContentProvider
Establece una capa que permite a las distintas aplicaciones compartir datos. Con independencia del almacenamiento local que utilicen para sus propósitos, las aplicaciones necesitan declarar ContentProviders para poner a disposición de otros procesos los datos que consideren necesarios.
Estos son algunos de las principales, pero no las únicas piezas de construcción de la aplicación. También es interesante que se defina como pieza de primer nivel, el sistema de notificaciones en pantalla, que se recomienda como principal vía de comunicación con el usuario.

La construcción de una comunidad

Aunque algunos de las primeros ataques que sufrió Android tras su presentación fue la de ser sólamente "vaporware", o una mera "nota de prensa", no tardaron demasiado en aparecer los primeros productos tangibles de la iniciativa: sólo siete días después del anuncio oficial, Google liberó una versión preliminar de su SDK, consistente en ejemplos de código, documentación, un emulador de dispositivos con Android, diversas herramientas de debug y un plugin de desarrollo para Eclipse.

Al mismo tiempo que lanzaba el SDK, Google impulsaba una importante tarea de construcción de una comunidad articulada de evangelistas y desarrolladores: blogs, tutoriales, videos en Youtube que cumplen funciones tanto de creación de marca como pedagógicas. Como gran incentivo para aumentar la masa crítica de desarrolladores necesaria para hacer frente a comunidades más antiguas y numerosas, se creó la Android Developers Challenge que, desde principios de 2008, recompensará con 10 millones de dólares a los mejores proyectos para la plataforma, asegurándose así un poblado ecosistema de aplicaciones disponibles incluso antes de la aparición de los primeros dispositivos capaces de ejecutarlas.

Requisitos


-Android está hecho en Java+XML, por lo tanto saber se debe saber sobre ambos
-Java JDK
-SDK
-El mejor IDE para programar para Android es Eclipse (multiplataforma)
-plugin de Android para Eclipse (ADT).



Instalando Java JDK

Como Android está basado en Java, necesitamos tener instalado el Kit de desarrollo de java en la pc. Para ello descargue la última versión del JDK (versión adecuada a las características de su sistema operativo).

Descargar desde el sitio de Oracle
Usuario de ubuntu :

sudo aptitude install sun-java6-bin


además, si tu máquina es de 64 bits vas a necesitar las librerías de 32 bits ya que el SDK de Android está programado en 32 bits:

sudo aptitude install ia32-libs


Usuario de arch:

sudo yaourt -S jdk



Instalando SDK
Si sos usuario de arch yaourt -S android-sdk y listo

en ubuntu:
Descargar Bajamos la versión para linux y descomprimimos.
supongamos que nos quedo asi.. " /home/{usuario}/Desarrollo/android-sdk-linux_86"
Preparar Android SDK para la instalación
Antes de poder instalar nada tenemos que declarar el path para que el sistema encuentre los ejecutables. Para ello hay que editar el fichero .bashrc alojado en tu directorio home:

$ gedit ~/.bashrc


y agregar al final:

export PATH=${PATH}:/home/{usuario}/Desarrollo/android-sdk-linux_86/tools


Reemplazando {usuario} por tu nombre de usuario

luego podremos lanzarlo desde la terminal tecleando

android






Esto hará que se abra el manager de Android donde podremos instalar y actualizar el SDK así como crear dispositivos virtuales de pruebas, vamos a Available Packages y pulsamos Refresh para que nos aparezca la lista de paquetes que podemos instalar. Es importante que NO esté seleccionada la casilla Display update only ya que esta primera vez queremos instalarlo todo. Seleccionamos todos los paquetes y pulsamos Install Selected.



Entonces se abrirá una nueva ventana para aceptar las licencias de dichos paquetes. Seleccionamos Accept All y pulsamos Install Acepted.




Instalar Eclipse
ubuntu :

sudo apt-get install eclipse


arch :

sudo yaourt -S eclipse



Instalamos el ADT
Descargamos dentro de eclipse:

Help > Install New Software > Add
Seleccionamos Archive agregamos lo descargado y seguimos > Next > Next > Finish > Reiniciar Eclipse





Luego Windows -> Preferences > Android



y en SDK Location completamos con

/home/{usuario}/Desarrollo/android-sdk-linux_86


ahora nos dirigimos a el sdk:



en el presionamos "New"





podemos "encenderlo"(Tarda un buen rato en arrancar).




Creando un nuevo proyecto
La mejor forma de conocer un sistema es probándolo asi que vamos a crear el proyecto y por el camino vamos explicando cómo funciona Android.
File -> New -> Other -> Android -> Android Project



completemos como de esta manera:
Project name: HolaMundo
Package name: com.example.holamundo
Create Activity: HolaMundo
Application name: Hola Mundo



Aunque he puesto los mismos nombres en los 4 sitios no tiene por qué coincidir, como sabréis. El nombre de la aplicación es lo que veréis en el móvil, las actividades son los controladores de Android, el nombre del paquete es algo interno y el proyecto es lo que veréis en Eclipse. Finalizamos y podremos ver el siguiente árbol de archivos



la estructura:

/src – Aquí se encuentran las actividades (controladores recuerdo), clases y un archivo que se llama R.java. Este archivo no se debe tocar nunca, Android lo actualiza automáticamente pero si lo veis os encontraréis con variables y posiciones.
/Android Library – Eclipse referencia al sdk de Android. No mováis nunca el sdk de sitio o si lo hacéis recordad cambiar la dirección
/assets – Aquí se puede incluir archivos varios (música, pdfs, zips, rars)
/res/drawable – Todas las imágenes van en este directorio
/res/layout – Todas las vistas van aquí
/res/values – En el archivo strings.xml podemos poner variables que luego sustituiremos en las vistas
AndroidManifest.xml – Este archivo es muy importante porque recoge todas las actividades y algunas configuraciones del proyecto.



Vamos a ejecutar el proyecto, y para eso damos a Run As y elegimos Android Application. Si instalasteis todo bien saldrá el emulador, cargando iniciando Android (tarda un poquito). Lo desbloqueamos dando a Menú, y ya puedes ver la aplicación más básica que se hace en todos los lenguajes, nuestro Hola Mundo.




Creando Una aplicación un poco mas interesante

Ahora vamos a desarrollar un pequeño conversor de temperatura de Celsius a Fahrenheit y viceversa.

Lo siguiente es una traducción muy barata del siguiente artículo:
http://www.vogella.de/articles/Android/article.html

En el nombre del proyecto aparece "vogella" para no hacer las capturas de pantalla
nuevamente File -> New -> Other -> Android -> Android Project




una vez creado el proyecto nos dirigimos a string.xml ("res/values/string.xml" )



Presionamos "Add". seleccionamos "Color" en el nombre "myColor" y "#3399CC" de valor.



y agregamos de manera análoga a los siguientes, todos de tipo String:
nombre valor
buttonHandler myClickHandler
celsius to Celsius
fahrenheit to Fahrenheit
calc Calculate

nos debería quedar así:



o viendo el código:


<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Convert!</string>
<string name="app_name">Temperature Converter</string>
<color name="myColor">#3399CC</color>
<string name="buttonHandler">myClickHandler</string>
<string name="celsius">to Celsius</string>
<string name="fahrenheit">to Fahrenheit</string>
<string name="calc">Calculate</string>
</resources>



Vamos a agregar los elementos gráficos que nos servirán para la entrada y salida de datos:
Abrimos "res/layout/main.xml" presionamos en Graphical como bien muestra la imagen:



Eliminamos el "Hello Word" con el click derecho.
Agregamos en el diseño de un "EditText" luego "RadioGroup" (Solo sirve para agrupar no es ningun elemento visible) y luego dos componentes RadioButton y un "botón".

El xml les debe quedar si o si de esta manera:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<EditText android:text="@+id/EditText01" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<RadioGroup android:id="@+id/RadioGroup01"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<RadioButton android:text="@+id/RadioButton01" android:id="@+id/RadioButton01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
<RadioButton android:text="@+id/RadioButton02" android:id="@+id/RadioButton02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
</RadioGroup>
<Button android:text="@+id/Button01" android:id="@+id/Button01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>




Una vez listo editamos las propiedades de cada elemento,



En el "EditText" cambiamos
Layout Width por fill_parent y en Input Type seleccionamos "numberSigned" y "number decimal"

Colocamos "celsius" en la propidad "text" del primer RadioButton y "Fahrenheit" a la segunda. Tambien ponemos en true la propiedad "Checked" del primer RadioButton.

Asignar "calc" en la propiedad de "text" del button y asignar a "buttonHandler" "onClick" .

Hacemos click en la ventana y editamos "background" colocando "@color/myColor"

En caso de que no entiendan copien y peguen el codigo en el xml.

El código les debe quedar de esta forma:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/myColor">

<EditText android:id="@+id/EditText01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:inputType="numberSigned|numberDecimal"></EditText>
<RadioGroup android:id="@+id/RadioGroup01"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<RadioButton android:id="@+id/RadioButton01"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/celsius" android:checked="true"></RadioButton>
<RadioButton android:id="@+id/RadioButton02"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/fahrenheit"></RadioButton>
</RadioGroup>
<Button android:id="@+id/Button01"
android:layout_height="wrap_content" android:onClick="@string/buttonHandler" android:layout_width="wrap_content" android:text="@string/calc"></Button>
</LinearLayout>




Ahora abrimos "Convert.java" y copia el siguiente código:
Lo dejo en pastebin para que se vea mejor: LINK



package de.vogella.android.temperature;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class Convert extends Activity {
private EditText text;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (EditText) findViewById(R.id.EditText01);

}

// This method is called at button click because we assigned the name to the
// "On Click property" of the button
public void myClickHandler(View view) {
switch (view.getId()) {
case R.id.Button01:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.RadioButton01);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.RadioButton02);
if (text.getText().length() == 0) {
Toast.makeText(
this,
"Please enter a valid number", Toast.LENGTH_LONG).show();
return;
}

float inputValue = Float.parseFloat(text.getText().toString());
if (celsiusButton.isChecked()) {
text.setText(String
.valueOf(convertFahrenheitToCelcius(inputValue)));
} else {
text.setText(String
.valueOf(convertCelciusToFahrenheit(inputValue)));
}
// Switch to the other button
if (fahrenheitButton.isChecked()) {
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
} else {
fahrenheitButton.setChecked(true);
celsiusButton.setChecked(false);
}
break;
}
}

// Converts to celcius
private float convertFahrenheitToCelcius(float fahrenheit) {
return ((fahrenheit - 32) * 5 / 9);
}

// Converts to fahrenheit
private float convertCelciusToFahrenheit(float celsius) {
return ((celsius * 9) / 5) + 32;
}
}



Ahora ya esta listo!!! vamos al sdk iniciamos "la maquina/celular virtual" que creamos, esperamos que prenda y
Run-As-> Android Application





FUENTE1
FUENTE2
FUENTE3
FUENTE4
  • 1
  • 10Calificación
  • 19Seguidores
  • 5.913Visitas
  • 13Favoritos

15 comentarios

@Abi0k Hace más de 2 años
Muy buena info
@pipebuntu Hace más de 2 años
WOOOOAU GRACIAS POR LA INFO...
@colga1 Hace más de 2 años
Excelent.
@seban_ Hace más de 2 años
muy bueno
@blackjaguar2000 Hace más de 2 años
Excelente, me ayudaste muchisimo amigo.
@matt12stones Hace más de 1 año
que buena info la necesitaba
@yawilco Hace más de 1 año
Buenísimo...pero me sale un error al querer crear un proyecto me dice &quot;An SDK Target must be specified.&quot; ayuda!!!!
@MauroIacobelli Hace más de 1 año
Buenisimo!!! En cuanto pueda lo voy a probar. Muchas gracias!!
@JesusAlexisAyala Hace más de 1 año
buena info gracias!! XD
@juniorsagrado Hace más de 1 año
Pasen por mi post soy desarrollador android alli podran ver estadisticas del android market
http://www.taringa.net/posts/celulares/13973315/Desarrollador-android_Mi-experiencia-y-ganancias_.html
@ingente20 Hace más de 1 año
gracias por la info
@asuartor Hace más de 1 año
bueno luego lo veo, antes de otro lenguaje quiero aprender c pero es bastante aburrido (por lo menos eso me parece)
@juniorsagrado Hace más de 1 año
Hola como estan les dejo mi post sobre ganancias en android asi se fijan como son las cosas! saludos!
http://www.taringa.net/posts/info/14668836/_Android_-Ganancias-en-Market-mi-experiencia_-2-Parte_.html
@djnovato123 Hace más de 7 meses
hola!! me pueden hacer un gran favor?? necesito el crack de youwave xfa!!
Tienes que ser miembro para responder en este tema