Vous êtes sur la page 1sur 26

Desarrollo de Aplicaciones

nativas para Android con C#


INTRODUCCION

Android
Android es
es un
un sistema
sistema operativo
operativo basado
basado enen Linux
Linux
que
que se ejecuta tanto en telfonos como en
se ejecuta tanto en telfonos como en
tabletas.
tabletas. El
El kernel,
kernel, siendo
siendo Linux,
Linux, esta
esta
desarrollado
desarrollado enen C++,
C++, pero
pero elel corazn
corazn dede Android
Android
es
es una implementacin de maquina virtual de
una implementacin de maquina virtual de
Java
Java llamada
llamada DALVIK,
DALVIK, creada
creada porpor Google.
Google. Por
Por lo
lo
tanto, todas las aplicaciones se
tanto, todas las aplicaciones se han venido han venido
desarrollando
desarrollando utilizando
utilizando Java
Java con
con la
la ayuda
ayuda deldel
Android
Android Developer Tools (ADT), que es la
Developer Tools (ADT), que es la
mezcla de las herramientas de
mezcla de las herramientas de desarrollo dedesarrollo de
Android
Android (SDK)
(SDK) junto
junto a a una
una personalizacin
personalizacin deldel
IDE Eclipse. El ADT de Android se puede
IDE Eclipse. El ADT de Android se puede obtener obtener
gratuitamente
gratuitamente en
en la
la siguiente
siguiente direccin
direccin
http://developer.android.com/tools/.
http://developer.android.com/tools/.
Para
Para desarrollar
desarrollar unauna aplicacin
aplicacin para
para Android,
Android, sese
debe
debe conocer,
conocer, primero,
primero, el el ecosistema
ecosistema AndroidAndroid
(arquitectura,
(arquitectura, restricciones,
restricciones, funcionamiento)
funcionamiento) y y
luego
luego se
se debe
debe saber
saber programar
programar en en Java
Java que
que eses el
el
lenguaje
lenguaje de de trabajo
trabajo nativo
nativo de de lala plataforma.
plataforma.
Existen
Existen otras alternativas para el desarrollo,
otras alternativas para el desarrollo,
como
como PhoneGap
PhoneGap
(http://phonegap.com/download),
(http://phonegap.com/download), que que utilizan
utilizan
HTML5
HTML5 parapara el
el diseo
diseo dede lala interfaz
interfaz de de usuario
usuario
(UI)
(UI) y
y JavaScript
JavaScript como
como lenguaje
lenguaje de de desarrollo,
desarrollo,
pero
pero tienen la desventaja de que al
tienen la desventaja de que al ser
ser
aplicaciones HTML5 que ejecutan
aplicaciones HTML5 que ejecutan en un entornoen un entorno
controlado,
controlado, el el acceso
acceso a a las
las caractersticas
caractersticas
nativas
nativas del del dispositivo
dispositivo es es limitado
limitado y y lala
experiencia de usuario en cuanto a
experiencia de usuario en cuanto a interfaz (UI) interfaz (UI)
no
no es
es la
la misma
misma que que la
la de
de una
una aplicacin
aplicacin nativa.
nativa.
Mono
Mono forfor Android,
Android, muestra
muestra un
un acercamiento
acercamiento diferente.
diferente. Bsicamente
Bsicamente intenta
intenta sustituir
sustituir Java
Java por
por C#,
C#,
dejando
dejando elel resto
resto de
de los
los componentes
componentes intactos,
intactos, de
de forma
forma tal
tal que
que la
la interfaz
interfaz de
de usuario
usuario (UI)
(UI) se
se disee
disee de
de
igual
igual manera
manera y y la
la aplicacin
aplicacin desarrollada
desarrollada se se integre
integre al
al ecosistema
ecosistema Android
Android como
como si
si fuese
fuese desarrollada
desarrollada
propiamente
propiamente en Java. Adems, las herramientas de desarrollo se integran con Visual Studio,
en Java. Adems, las herramientas de desarrollo se integran con Visual Studio,
brindndole
brindndole a un desarrollador .NET, la gran ventaja de desarrollar una aplicacin Android sin salirse
a un desarrollador .NET, la gran ventaja de desarrollar una aplicacin Android sin salirse
del
del entorno de desarrollo conocido y utilizando el lenguaje C# que domina. Se puede obtener desde
entorno de desarrollo conocido y utilizando el lenguaje C# que domina. Se puede obtener desde
http://xamarin.com/download.
http://xamarin.com/download.
Por qu .NET y C#?

Si bien, es tentador programar para Android en C#,


existen 3 razones principales por lo cual es
conveniente optar por .NET y C# para el desarrollo
de aplicaciones mviles:

Reutilizacin de Interfaz de
Desarrollo bibliotecas de usuario nativa y
Multiplataforma. cdigo rendimiento
existentes. nativo.
El mercado de dispositivos mviles esta dominado por
fundamentalmente por tres plataformas: Android de Google, IOS de
Apple y Windows Phone de Microsoft, este ultimo que a pesar de ser
minoritario a demostrado un incremento discreto. Para programar una
aplicacin que se ejecute en estas plataformas de forma nativa, abra
que programar en lenguajes y herramientas de desarrollos diferentes:
Java en Android, Objective-C en IOS y C# en Microsoft. Todo esto para
una empresa puede significar un reto dar mantenimiento a tres cdigos
fuentes, triplicando el esfuerzo. Es por ello que alternativas como
PhoneGap o Appcelerator Titanium han cobrado fuerza ya que ayudan a
abaratar los costos y simplifica el esfuerzo.
Por otro lado, Xamarin, brinda una solucin integran (IDE + Plataforma) que
posibilita la creacin de aplicaciones para IOS, Android, Mac, Linux y Windows ya
que cuenta con versiones de Mono as como los compiladores ya las herramientas
necesarias para convertir de C#/.NET al cdigo nativo que ejecuta cada una de
estas plataformas.

Contar con C# y .NET nos permite reutilizar las bibliotecas de cdigo existentes que
se hayan desarrollado previamente e incluso para otras aplicaciones .NET y explotar
los algoritmos escritos en C# por la comunidad. Utilizando la caracterstica Portable
Class Library (PCL) de .NET, es posible incluso desarrollar la lgica de la aplicacin
una sola vez y desarrollar para cada plataforma slo el cdigo especfico que se
requiera. De esta formase simplifica el mantenimiento de la aplicacin.
ARQUITECTURA DE MONO FOR
ANDROID
Mono
Mono eses la
la implementacin
implementacin de de cdigo
cdigo abierto
abierto (open
(open source)
source) dede la
la plataforma
plataforma .NET
.NET sobre
sobre Windows
Windows y y
Linux. En el caso de Android, Mono ejecuta sobre el Kernel de Linux, a la par de
Linux. En el caso de Android, Mono ejecuta sobre el Kernel de Linux, a la par de Dalvik, que es laDalvik, que es la
mquina
mquina virtual
virtual de
de Java
Java que
que oporta
oporta todo
todo el
el ecosistema
ecosistema Android.
Android. Lo
Lo interesante
interesante en en este
este caso
caso (Figura
(Figura 1)
1)
es la coexistencia de Mono con Dalvik. Primeramente hay que destacar los Android
es la coexistencia de Mono con Dalvik. Primeramente hay que destacar los Android Callable WrappersCallable Wrappers
(ACW)
(ACW) que
que empaquetan
empaquetan la la funcionalidad
funcionalidad dede Dalvik
Dalvik yy la
la hace
hace disponible
disponible como
como parte
parte de
de la
la API
API de
de Mono,
Mono,
de
de forma tal que una aplicacin escrita en C# pueda realizar llamadas a componentes escritos en Java
forma tal que una aplicacin escrita en C# pueda realizar llamadas a componentes escritos en Java
que ejecuten en Dalvik. De manera inversa, estn los Managed Callable Wrappers
que ejecuten en Dalvik. De manera inversa, estn los Managed Callable Wrappers que son proxies que son proxies
generados
generados en en Java
Java que
que lele permiten
permiten a a las
las aplicaciones
aplicaciones ejecutando
ejecutando en en Dalvik,
Dalvik, poder
poder acceder
acceder a a los
los
componentes desarrollados en .NET que ejecutan en Mono. Gracias a esta coexistencia,
componentes desarrollados en .NET que ejecutan en Mono. Gracias a esta coexistencia, aplicaciones aplicaciones
nativas
nativas desarrolladas
desarrolladas enen Java
Java pueden
pueden interactuar
interactuar con
con las
las desarrolladas
desarrolladas en en .NET
.NET de
de manera
manera natural
natural aa
nivel de API.
nivel de API.
De manera experimental, Xamarin port el cdigo de Android, de Java a
C#, eliminando la dependencia con Dalvik y logrando un Android 100%
en C# (proyecto XobotOS). Como resultado se obtuvo un incremento
notable en el rendimiento del sistema. Este resultado se le atribuye a
caractersticas nicas que tiene la plataforma .NET con respecto a Java,
tales como la genericidad real, el uso de structs y las llamadas P/Invoke.
La herramienta de conversin de cdigo de Java a C#, desarrollada por
Xamarin para este experimento, le permite a esta compaa mejorar
Mono for Android en tanto se puedan ir eliminando las dependencias con
Dalvik posibilitando la ejecucin directa del cdigo sobre el Kernel de
Linux.
MI PRIMERA APLICACIN CON
XAMARIN STUDIO O VISUAL

STUDIO
Para empezar a desarrollar aplicaciones para Android tenemos dos posibles entornos de
desarrollo (IDE):

1. Xamarin Studio.

2. Visual Studio.

Xamarin Studio es una versin personalizada para desarrollo mvil de MonoDevelop, que
es el IDE oficial de Mono. Mono for Android, cuenta con una extensin para Visual Studio
que habilita la compilacin y la depuracin de aplicaciones Android. Lo interesante es que
el mismo proyecto/solucin sirve tanto en Visual Studio como Xamarin Studio y se puede
utilizar indistintamente tanto uno como el otro, ya que MonoDevelop, en el cual se basa
Xamarin Studio, utiliza el mismo formato (.sln y .csproj) que Visual Studio.
Antes de empezar, se tiene que tener instalado el Android SDK y una mquina virtual con Android que
es donde se probar y depurar la aplicacin. Utilizando el Android SDK Manager (Figura 2) se
pueden descargar de Internet as imgenes (mquinas virtuales) de Android tanto para ARM como para
x86. El desarrollo para Android debe realizarse sobre un procesador Intel con Virtualization Technology
(VTx) e instalar el componente Intel HAXM, que permitir la ejecucin nativa de Android en el PC. En
caso de que se tenga un procesador AMD o se utilice una imagen de Android con arquitectura ARM, la
ejecucin y depuracin de la aplicacin ser un poco tortuosa producto de la lentitud de conversin de
instrucciones ARM a x86 o la carencia de VTx. En tal caso (AMD) se recomienda el uso de VirtualBox
con una imagen x86 de Android conectada a travs de la red utilizando adb. A pesar de que esta
variante es un hack y se pierde la integracin con el IDE, es preferible producto de la ganancia en
velocidad, si no esta conforme con todo lo anterior puede optar por utilizar un emulador externo,
Genymotion, es una buena opciones y su versin pagada facilita la intergracion a nuestros telfonos
en tiempo real.
Aquellos que no estn familiarizados con un entorno de desarrollo para Android,
pueden descargar el Xamarin Installer desde el sitio web oficial de Xamarin, y
ste se encargar de bajar de internet todos los componentes necesarios,
instalarlos y configurarlos, dejando lista la PC para empezar a desarrollar.
Existen diferentes tipos de proyectos de Android. Estos tipos de proyectos estn
disponibles tanto desde Xamarin Studio como desde Visual Studio 2012:
1. Android Application (incluyendo las versiones para Tablets, HC y ICS): Es la
plantilla de proyectos predeterminada. Permite crear una aplicacin de Android con
interfaz de usuario (UI) y genera manera predeterminada un Activity de ejemplo.
2. Android OpenGL Application: Permite crear una aplicacin OpenGL para Android.
Usualmente Juegos y multimedia.
3. Android Class Library: Es el equivalente al proyecto Class Library de .NET lo que
utilizando las referencias de Mono for Android.
4. Java Binding Library: Proyecto que permite importar un .jar de Java al ecosistema
.NET. Similar a losWrappers que en .Net se le hacen a los objetos COM, pero en este
caso son objetos Java. til por ejemplo para referenciar componentes como Google
Maps library que estn disponibles solo para Java.
Realizacin de Proyecto con
Visual Studio 2012
En el caso de la plantilla Android Application, el proyecto que se
genera se organiza igual a como se hace en Java. De hecho, se respetan
los convenios propuestos por Android en cuanto a nombre de carpetas y
elementos a almacenar. Existen dos carpetas importantes, Assets y
Resources. En la carpeta Assets se almacena cualquier fichero que se
quiera tener disponible como recurso (un fichero html, texto, un binario,
etc). En la carpeta Resources, se almacenan recursos especializados,
que pueden ser Layouts (interfaz grfica UI), Drawables (imgenes) y
Values (recursos de texto). Estos aspectos son especficos de Android.
Lo interesante de esta organizacin es que Mono no reinventa los componentes
de UI ni la disposicin del proyecto, por lo que el conocimiento de cmo disear
una interfaz para Android, se puede obtener de cualquier documentacin
orientada a Java y el cdigo AXML (lenguaje XML en que se especifica la UI en
Android) se puede reutilizar indistintamente.

Tanto Xamarin Studio (Figura 5) como Visual Studio (Figura 6) cuentan con las
mismas herramientas de desarrollo. Es posible disear una interfaz de usuario
grficamente arrastrando controles desde la barra de herramienta y asignndole
acciones a los eventos (OnClick por ejemplo) que cada componente define.
APLICACIN DE EJEMPLO EN XAMARIN STUDIO. SE MUESTRA EL DISEADOR
GRFICO DE LA INTERFAZ DE USUARIO
El cdigo del Layout (Interfaz de Usuario) de la aplicacin de ejemplo, se
muestra en el Listado 1. Aquellos que hayan trabajado con XAML/WPF
en .NET notarn cierta semejanza con el AXML de Android para definir la
interfaz de usuario. En este caso, se define un LinearLayout de raz,
que es un esquema que posiciona los controles interiores de forma lineal
con orientacin horizontal o vertical segn se especifique. Los controles
anidados, en este caso el Button, pueden definir el ajuste de ancho y
alto con respecto al layout padre utilizando las propiedades layout_width
y layout_height.
LAYOUT QUE MUESTRA UN
BOTN CON EL TEXTO HELLO
WORLD, CLICK ME!
<?xml version="1.0" encoding="utf8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/MyButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content
android:text="@string/Hello" />
</LinearLayout>
Hay que resaltar que existe una separacin entre el diseo de la interfaz
y la funcionalidad. En el AXML slo se define la forma. Android sigue una
filosofa ModeloVistaControlador (MVC) que potencia la separacin de
responsabilidades (SoC). En este caso, el Layout sera la Vista y el
controlador sera el Activity. En Android, cada pantalla visible es un
Activity. El Activity es quien ensambla el funcionamiento con la vista
(Layout) y se escribe en cdigo C#.
APLICACIN DE EJEMPLO EN VISUAL STUDIO.
SE MUESTRA EL DISEADOR GRFICO DE LA
INTERFAZ DE USUARIO
Como se puede observar, en C# un Activity hereda de la clase Activity e
implementa al menos el mtodo OnCreate que se ejecuta cada vez que
se lance el Activity. Aqu se utiliza el mtodo SetContentView para
asociar la vista, que en este caso se liga con el Layout Main.axml y
luego se localizan los controles dado su ID y se le asocia funcionalidad
mediante un delegado.
CDIGO FUENTE EN C# DE UN
ACTIVITY
[Activity(Label = "Borrar", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity{
int count = 1;
protected override void OnCreate(Bundle bundle){
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
// Get our button from the layout resource,
// and attach an event to it
Button button = FindViewById<Button>(Resource.Id.MyButton);
button.Click += delegate {button.Text = string.Format("{0} clicks!", count++);};
}
}
El Activity principal, aquel que se lanza por primera vez cuando se carga
la aplicacin de Android, se identifica utilizando el parmetro
MainLauncher del atributo [Activity] con que se decora la clase. Es
interesante notar cmo el cdigo del Activity se beneficia de las
caractersticas del lenguaje C# y la plataforma .NET. Los desarrolladores
de Xamarin han realizado un buen trabajo incorporando, ya que no han
portado directamente el cdigo de Java a C#, sino que han mejorado la
sintaxis utilizando caractersticas como delegados, genericidad y
propiedades.
En java, el cdigo equivalente a la localizacin del botn y la asignacin
del click sera el siguiente:
final Button myButton = (Button)findViewById(R.id.myButton);
myButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0){
myButton.setText(String.format("{0} clicks!", count++));
}
});
Como se puede observar, los cast (Button) se reemplazaron por
genericidad <Button>, los Listeners de Java por eventos de C# y el
accesor .setText del tipo Button se remplaz por la propiedad Text,
haciendo el cdigo ms legible y corto. Adicionalmente se reescribi la
API para cumplir convenios de calidad de cdigo (por ejemplo,
findViewById se llev a FindViewById para seguir el convenido de la
mayscula en mtodos).

Vous aimerez peut-être aussi