Está en la página 1de 28

Android: Definiciones Bsicas y Desarrollo de

Aplicaciones
Federico Cristina, Sebastin Dapoto, Fernando G. Tinetti
(1)
III-LIDI, Facultad de Informtica, UNLP
(!
"omisi#n de In$% "ient&ficas, Pro$% de Buenos Aires
'eporte ()cnico UNLP-PD-*+*-
A,osto *+*
(a-la de "ontenidos
Android : Definiciones Bsicas y Desarrollo de Aplicaciones
1 !ntrod"cci#n
1.1 $ersiones ( A%! &e'els )
1.1.1 (oot en Android
1.) !ncidencia en el *ercado
) Ar+"itect"ra
).1 Dal'i, $irt"al *ac-ine ( D$* )
).) Diferencias entre .$* 's D$*
/ Desarrollo de Aplicaciones para Android en .a'a
/.1 (e+"isitos para Desarrollar desde 0clipse
/.1.1 !nstalaci#n y confi1"raci#n
/.1.) Alternati'as de dep"raci#n y e2ec"ci#n
/.1.).1 Dispositi'o real
/.1.).) Android $irt"al De'ice
/.1.)./ Android 3 45
/.) (e+"isitos para Desarrollar desde A!D0
/.).1 !nstalaci#n y confi1"raci#n de A!D0 en "n e+"ipo 6#'il
/.).) !nstalaci#n y confi1"raci#n de A!D0 desde %C
7 Desarrollo de Aplicaciones para Android en C 8C 99
: Ciclo de $ida de Aplicaciones
5 02e6plo : Desarrollo de "na Aplicaci#n Android en 0clipse
5.1 Creaci#n y confi1"raci#n inicial del proyecto
5.) Co6ponentes principales
5./ !6ple6entaci#n de ; <ello =orld >
5.7 !nstalaci#n *ediante A%?
@ Co6"nicaci#n entre Dispositi'os
@.1 Soc,ets en .a'a
@.) 02e6plo Soc,ets TC%
@./ 02e6plo Soc,ets AD%
@.7 Soc,ets en Android
@.7.1 *"lticasts en Android
ApBndice A : %rctica
- Introducci#n
Android es un sistema operativo mvil basado en Linux, que junto con aplicaciones
middleware est enfocado para ser utilizado en dispositivos mviles como telfonos
inteligentes, tabletas, oogle !" # otros dispositivos$ %s desarrollado por la &pen 'andset
Alliance, la cual es liderada por oogle$
-ttp :88 es .Ci,ipedia .or1 8Ci,i 8Android
Dri1inal6ente diseEado para ar+"itect"ra A(*, act"al6ente -ay ports no oficiales tanto para
345 co6o para *!%S. 0l c#di1o f"ente se enc"entra disponible ba2o licencias de softCare libre
(Apac-e o GFA General %"blic &icense 'ersi#n )). 0l 6is6o es 1eneral6ente liberado l"e1o
de cada n"e'a 'ersi#n.
% - .ersiones (API Le$els!
03isten distintas 'ersiones de Android: las lGneas 1.33, ).33, /.33 y 7.33. &a pri6era de Bstas ya
sin act"aliHaciones desde )IIJ. &a lGnea ).33 es la "tiliHada en dispositi'os 6#'iles, 6ientras
+"e la /.33 f"e pensada especGfica6ente para tablets.
Debido al a'ance en la capacidad de procesa6iento de dispositi'os 6#'iles (y 6s
especGfica6ente en el caso de los telBfonos inteli1entes), la lGnea 7.33 "nifica s" "so para
c"al+"ier dispositi'o.
&a Fi1. 1 6"estra la cantidad de dispositi'os con Android por 'ersi#n del siste6a operati'o, de
ac"erdo a la infor6aci#n pro'ista por Dpen Si1nal *aps en Abril de )I1).
Fi1"ra 1. Distrib"ci#n de Android se1Kn s" 'ersi#n. !nfor6aci#n correspondiente al 6es de Abril
de )I1) se1Kn Dpen Si1nal *aps. -ttp :88 opensi1nal6aps .co6 8reports 8fra16entation .p-p
0n lo +"e respecta a las polGticas de act"aliHaci#n, las 6is6as p"eden lle1ar a 'ariar
dependiendo 'arios factores, tales co6o fabricante del dispositi'o, pro'eedora del ser'icio de
telefonGa 6#'il, etc. 0n ocasiones, las act"aliHaciones ori1inal6ente estip"ladas l"e1o no se
c"6plen por 6oti'os e3ternos a Goo1le. %or e2e6plo, el dispositi'o Sa6s"n1 Gala3y S!!
(ori1inal6ente con Android )././) tiene planificada s" act"aliHaci#n a 'ersi#n 7L la c"al ya se
efecti'iH# para e+"ipos liberados. Sin e6bar1o la act"aliHaci#n para dispositi'os ba2o carriers
toda'Ga se enc"entra pendiente dado +"e cada co6paEGa "s"al6ente realiHa "na adaptacin
definiti'a de la 'ersi#n. 0n al1"nos casos, la act"aliHaci#n n"nca lle1a de 6anera a"to6tica,
sino +"e +"e es necesario ;rootear> (tBr6ino +"e se e3plica a contin"aci#n) el aparato e instalar
"na 'ersi#n 6s act"al de for6a 6an"al.
%% - 'oot en Android
Confi1"rar "n dispositi'o Android en 6odo root per6ite tener "n control co6pleto del siste6a.
&os pasos para realiHar esta tarea 'arGa en f"nci#n de cada dispositi'o, pero en tBr6inos
1enerales es necesario conectar el e+"ipo a "na %C, confi1"rar Android en 6odo dep"raci#n
ASB, reiniciar el e+"ipo en 6odo descar1a y e2ec"tar "n pro1ra6a especGfco desde "na %C
(co6o por e2e6plo Ddin) para efecti'iHar los ca6bios sobre el e+"ipo.
%* - Incidencia en el /ercado
Act"al6ente Android es la platafor6a +"e lidera el mar(et s)are (cantidad de dispositi'os con
Android), por enci6a de iDS, Sy6bian DS, (!* DS y =indoCs *obile. &a Fi1. ) 6"estra los
porcenta2es de co6ercialiHaci#n de telBfonos inteli1entes se1Kn el siste6a operati'o instalado
a partir del aEo )II@ -asta el )I11 se1Kn la infor6aci#n proporcionada en
-ttp :88 en .Ci,ipedia .or1 8 Ci,i 8*obile M operatin1 M syste6 .
Fi1"ra ). 0'ol"ci#n de 'entas de dispositi'os se1Kn s" Siste6a Dperati'o, se1Kn
-ttp :88 en .Ci,ipedia .or1 8Ci,i 8*obile M operatin1 M syste6 (conte6plando solo smartp)ones).
* - Ar0uitectura
Co6o siste6a operati'o, Android est or1aniHado en capas y bibliotecas con diferentes
f"ncionalidades, ser'icios e interacciones con las de6s partes o s"bsiste6as del siste6a
operati'o.
*% - Dal$i1 .irtual /ac2ine (D./!
0l ,ernel de Android se enc"entra basado en el de &in"3, con librerGas escritas en C, y
aplicaciones corriendo sobre "n fra6eCor, de soporte para la 6+"ina 'irt"al Dal'i, (D$*:
Dal'i, $irt"al *ac-ine) con co6pilaci#n *ust+,n+!ime (.!T), con trad"cci#n de b#tecodes de
.a'a (.!T a partir de Android ).)).
Fi1"ra /. Ar+"itect"ra de co6ponentes +"e confor6an Android.
-ttp :88 de'eloper .android .co6 81"ide 8basics 8C-at is android .-t6l
&a Fi1. / 6"estra la or1aniHaci#n en capas de Android. &a capa de 6s ba2o ni'el o 6s
cercana al -ardCare es la basada en &in"3 y directa6ente sobre ella se podrGa decir +"e se
"bica la capa de ;trad"cci#n> a lo +"e es propio de Android, donde se p"eden identificar dos
partes en esta capa:
N Bibliotecas: al1"nas de las c"ales, +"iHs identificables co6o las clsicas de &in"3, tal
co6o libc y otras 6s propias o adaptadas para Android, co6o por e2e6plo -edia
.ramewor(.
N Android ("nti6e: es +"iHs la parte de esta se1"nda capa 6s especGfica de Android y
diferenciada de lo +"e estarGa a este ni'el en "n siste6a operati'o &in"3, +"e contiene
las bibliotecas 6s i6portantes y la D$*.
Oa las capas s"periores son total6ente especGficas de Android, a"n+"e por s"p"esto no son
esencial6ente diferentes de lo +"e se define en "n siste6a operati'o en capas de ni'el de
abstracci#n si6ilares.
*%* - Diferencias entre 3./ $s D./
A"n+"e desde el p"nto de 'ista de la aplicaci#n no -ay 6"c-as diferencias entre la .$* y la
D$*, ar+"itect"ral6ente a6bas difieren de 6anera considerable. SintBtica6ente, el c#di1o
f"ente .a'a es co6pilado a "n arc-i'o .class. %osterior6ente, dic-o arc-i'o es procesado por
dexer ("na -erra6ienta +"e es parte de la SD? de Android), a fin de 1enerar el arc-i'o con
for6ato D0P +"e contiene los bytecodes Dal'i,. 0sto si1nifica +"e la D$* serGa si6ilar a la
.$* en tBr6inos prcticos (o actuar/a como tal), 1racias a la co6pilaci#n *ust+,n+!ime de
bytecodes de .a'a a c#di1o e2ec"table Dal'i, o de3code (0alvi( %xecutable).
*s propia6ente, D$* es "na 6+"ina 'irt"al de proceso tal co6o la .$*, con el a1re1ado
de tener "n .!T para arc-i'os de clase (.class) de .a'a o prod"cidos por "n co6pilador .a'a
para "na .$* estndar. &a Tabla 1 6"estra al1"nas de las diferencias 6s i6portantes entre
la D$* y la .$* Q1R Q)R.
D./ 3./
Ar+"itect"ra
Soporte S.D.
Clases
%ool de constantes
Aplicaci#n
(e1istros
Android
De3
%or aplicaci#n
A%?
%ila
*Kltiples
Class
%or clase
.A(
Tabla 1. Diferencias entre D$* y .$*.
(eferencias:
Q1R -ttp :88 CCC .6o6ob .in 8)I1I8 1eneral 8b-a'is 8difference of d'6 and 2'6 in t-e android Corld 8
Q)R -ttp :88 CCC .1oo1le .co6 8e'ents 8io 8)I1I8 sessions 82it co6piler androids dal'i, '6 .-t6l
4 - Desarrollo de Aplicaciones para Android en 3a$a
03isten 'arias alternati'as para desarrollar aplicaciones Android: en 0clipse desde "na %C, o
bien en A!D0 desde "na %C o directa6ente en "n dispositi'o 6#'il. A contin"aci#n se detallan
los pasos para la creaci#n y confi1"raci#n de las 6is6as.
4% - 'e0uisitos para Desarrollar desde 5clipse
0l desarrollo desde 0clipse es el 6ecanis6o 6s tradicional. %ara Bsto, es necesario contar
con "na serie de -erra6ientas:
N .a'a De'elop6ent ?it (.D?), act"al6ente 'ersi#n 1.5 o s"perior
N 0clipse /.: o s"perior. Ta6biBn es posible "tiliHar FetBeans
N Android Standard De'elop6ent ?it (SD?)
N %l"1in Android De'eloper Tools (ADT) para 0clipse
N Ano o 6s dispositi'os para e2ec"tar la aplicaci#n. &as alternati'as disponibles son:
S Dispositi'o real
S Android $irt"al De'ices (A$D)
S Android345
1$2$2 + ,nstalacin # configuracin
Sie6pre es reco6endable se1"ir los pasos indicados en el sitio de desarrolladores Android
(-ttp :88 de'eloper .android .co6 ), debido a +"e las 'ersiones 'an ca6biando a lo lar1o del tie6po.
0n tBr6inos 1enerales los pasos son los si1"ientes:
1. Descar1ar la .D? desde el site de Dracle e instalar.
). Descar1ar 0clipse.
/. Descar1ar la SD? de Android e instalar, lo c"al ta6biBn nos facilitar las opciones para
descar1ar los A$Ds (la descar1a de los A$Ds re+"erir "n tie6po considerable).
7. !nstalar el pl"1in ADT desde 0clipse (<elp T !nstall FeC SoftCare).
*s infor6acion en: -ttp :88 de'eloper .android .co6 8sd, 8inde3 .-t6l
Ana 'eH +"e estn todos los co6ponentes instalados, ya podre6os crear aplicaciones y
e2ec"tarlas en "n dispositi'o.
1$2$3 + Alternativas de depuracin # ejecucin
Co6o se detall# anterior6ente, e3isten tres alternati'as para dep"rar en tie6po real las
aplicaciones desarrolladas: 6ediante "n dispositi'o real o dos alternati'as de e6"laci#n, +"e
se detallan en los si1"ientes apartados.
4%%*% - Dispositi$o real
!deal6ente se debe contar con "n dispositi'o real. Db'ia6ente Bsta es la 6e2or alternati'a,
dado +"e los e6"ladores presentan ciertos faltantes en s"s f"ncionalidades (por e2e6plo no
c"entan con soporte de e6"laci#n =iFi), ade6s +"e la perfor6ance se enc"entra
considerable6ente de1radada.
4%%*%* - Android .irtual De$ice
%ara crear "n A$D desde 0clipse se debe seleccionar la opci#n ;6indo7 T A.D /ana,er%%%>
y l"e1o la opci#n ;Ne7%%%>. 0n la 'entana de creaci#n es necesario co6pletar el no6bre del
n"e'o dispositi'o y las caracterGsticas con las +"e contar el 6is6o, tales co6o ni'el de la A%!,
ta6aEo de la SD Card, resol"ci#n de la pantalla, etc. ($er Fi1. 7). Ana 'eH creado, se p"ede
'is"aliHar el n"e'o dispositi'o en la lista de A$Ds disponibles, tal co6o se obser'a en la Fi1.
00.
A s" 'eH, es posible seleccionar sobre +"B dispositi'o se e2ec"tar "na aplicaci#n. %ara realiHar
esto se debe ele1ir la opci#n ;'un T 'un "onfi,urations%%%> y l"e1o entrar en la pestaEa
;(ar,et>, en donde se p"ede 'is"aliHar la lista de dispositi'os co6patibles con la aplicaci#n a
e2ec"tar. Fotar +"e si n"estra aplicaci#n est confi1"rada por e2e6plo para "na 'ersi#n 6Gni6a
del SD? i1"al a J, entonces no se 'is"aliHarn los dispositi'os +"e tienen "na 'ersi#n anterior a
Bsta.
Fi1"ra 7. Creaci#n de "n A$D en 0clipse.
Fi1"ra :. &ista de A$Ds disponibles.
4%%*%4 - Android-89:
%ara instalar la platafor6a Android345 se deben se1"ir "na serie de pasos +"e se en"6eran a
contin"aci#n.
1. Descar1ar e instalar $irt"alBo3, el c"al ser'ir para instalar Android 345 en "na
6+"ina 'irt"al.
). Descar1ar Android 345. 03isten 'arias 'ersiones de Android +"e se p"eden "tiliHar. &a
'ersi#n ).) de Android 345 es s"ficiente.
/. Crear "na n"e'a 6+"ina 'irt"al e instalar Android 345 co6o Siste6a Dperati'o
(-ttp :88 androidspin .co6 8)I118I18)78 -oCto install android 3 45)) in 'irt"albo3 8)
7. Confi1"rar co6o ;puente> el adaptador de red de la 6+"ina 'irt"al. 0sto es necesario
para +"e al dispositi'o se le asi1ne "n !% real y entonces sea posible conectarse al
6is6o para ser "tiliHado desde 0clipse.
Ana 'eH +"e este6os e2ec"tando la 6+"ina 'irt"al con Android 345, se debe realiHar la
cone3i#n al dispositi'o. 0sto se lle'a a cabo desde lGnea de co6ando -aciendo "so de la
-erra6ienta Android De-u, Brid,e (ADB!. 0sta -erra6ienta se enc"entra en el s"bdirectorio
Uplatfor6toolsV del SD? (e2: C:Wr"taMSD?Wplatfor6tools). %ara realiHar la cone3i#n se debe
e2ec"tar el si1"iente co6ando:
> adb connect IPdispositivo
%ara a'eri1"ar el !% +"e le f"e asi1nado a n"estra 6+"ina 'irt"al, es Ktil el co6ando Unetcf,V
+"e se p"ede "sar desde la consola de android. %ara entrar a la consola se debe presionar las
teclas ;alt<F= y para salir las teclas ;alt<F>=.
0n c"anto el dispositi'o 'irt"al estB conectado aparecer dentro de la ;lista de dispositi'os en
e2ec"ci#n> en el entorno 0clipse, p"diendo ser ele1ido para dep"rar n"estras aplicaciones.
4%* - 'e0uisitos para Desarrollar desde AID5
A!D0 es "n entorno de desarrollo Android para Android, el c"al per6ite la creaci#n de
aplicaciones directa6ente en el dispositi'o 6#'il. A"n+"e las caracterGsticas del 6is6o son "n
tanto red"cidas (no pro'ee "n editor 'is"al de 'entanas, ni "n deb"11er en tie6po real), es "na
alternati'a si6ple e interesante para dar los pri6eros pasos.
1$3$2 + ,nstalacin # configuracin de A,0% en un equipo mvil
&os pasos para esta alternati'a se red"cen si6ple6ente a acceder al *ar,et y descar1ar e
instalar la aplicaci#n.
1$3$3 + ,nstalacin # configuracin de A,0% desde 45
Alternati'a6ente, pode6os instalar A!D0 en "na %C. 0sta sol"ci#n p"ede ser Ktil en caso de
no contar con "n dispositi'o 6#'il, o bien si +"ere6os "tiliHar "n teclado fGsico en caso +"e el
dispositi'o con el +"e conta6os no lo pro'ee.
%ara lle'ar a cabo la instalaci#n se debe pri6era6ente instalar "na 6+"ina 'irt"al con el
siste6a operati'o Android 345 si1"iendo los pasos 'istos en la secci#n /.1.)./. Ana 'eH +"e
este6os e2ec"tando Android 345 se procede con la instalaci#n de A!D0. <acerlo desde el
6ar,et en la 6+"ina 'irt"al p"ede traer co6plicaciones, con lo c"al es 6s fcil descar1ar el
A%? de A!D0 desde el na'e1ador de Android, alo2ado en ap,tops, e instalarlo.
(-ttp :88 CCC .ap,tops .co6 8aide android 2a'a ide 1I beta 15. -t6l ).
? - Desarrollo de Aplicaciones para Android en "@"<<
Ade6s de desarrollo en .a'a, es posible i6ple6entar partes del c#di1o en C8C99. %ara Bsto,
es necesario "tiliHar la Android FD? o Fati'e De'elop6ent ?it:
-ttp :88 de'eloper .android .co6 8sd, 8nd, 8inde3 .-t6l
si6ilar a la .F! de .a'a:
-ttp :88 docs .oracle .co6 82a'ase 81.:.I8 docs 81"ide 82ni 8spec 82niTDC .-t6l .
Dic-a FD? es "na -erra6ienta co6ple6entaria a la SD? +"e per6ite desarrollar partes de "na
aplicaci#n ideal6ente las crGticas en c"anto a perfor6ance en c#di1o nati'o. &a 6is6a
pro'ee los encabeHados y librerGas +"e per6iten crear activities, 6ane2ar perifBricos, acceder a
rec"rsos de otros aplicaciones, etc. pro1ra6ando en C8C99. 0l 6odelo f"nda6ental de
aplicaci#n Android no ca6bia. !ncl"so en estos casos, la aplicaci#n final ser e6pa+"etada en
"n arc-i'o .ap, y correr dentro de "na 6+"ina 'irt"al en el dispositi'o.
$ale destacar +"e con la "tiliHaci#n de c#di1o nati'o se pierde la portabilidad y no res"lta en
"na 6e2ora de la perfor6ance de 6anera directa, dependiendo en 1ran parte del conte3to de la
aplicaci#n. Al1"nos e2e6plos donde p"ede ser necesario desarrollar c#di1o nati'o son: tie6po
real, procesa6iento de seEales, si6"laciones, etc. 0ste te6a e3cede la finalidad del presente
doc"6ento.
A - "iclo de .ida de Aplicaciones
&a Fi1. 5 presenta el 1rfico del ciclo de 'ida 1eneral de "na aplicaci#n Android, en donde la
clase inicial de la 6is6a e3tiende de la clase Activit#.
Fi1"ra 5. Ciclo de $ida -ttp :88 CCC .android2a'adoc .co6 81.IM r1M src 8android 8app 8Acti'ity .-t6l
&os e'entos definidos por la clase Acti$ity son los si1"ientes:
N onCreate(): in'ocado c"ando la acti'idad es creada por pri6era 'eH.
N onStart(): in'ocado c"ando la acti'idad se -ace 'isible para el "s"ario.
N on(es"6e(): in'ocado c"ando la acti'idad co6ienHa a interact"ar con el "s"ario.
N on%a"se(): in'ocado c"ando la acti'idad act"al se pa"sa y la acti'idad anterior se
rean"da.
N onStop(): in'ocado c"ando la acti'idad ya no es 'isible para el "s"ario.
N onDestroy(): in'ocado antes de +"e el siste6a destr"ya la acti'idad (ya sea de 6anera
6an"al o por el siste6a para conser'ar 6e6oria).
N on(estart(): in'ocado c"ando la acti'idad -a sido detenida y se est reiniciando.
Cada "no de estos e'entos es in'ocado a fin de poder e2ec"tar la l#1ica en c"esti#n en el
6o6ento correspondiente. De todas 6aneras, no sie6pre es necesario redefinir todos los
6Btodos. De 6anera si6plificada, podrGa ser s"ficiente la i6ple6entaci#n de los 6Btodos
onCreate(), onResume(), onPause(), a"n+"e esto 'ariar se1Kn las necesidades en cada
caso.
: - 5Bemplo: Desarrollo de una Aplicaci#n Android en 5clipse
:% - "reaci#n y confi,uraci#n inicial del proyecto
A contin"aci#n se en"6eran los pasos necesarios para crear y confi1"rar "n proyecto android
en el entorno 0clipse. A 6odo de e2e6plo se crea el proyecto de la aplicaci#n ;<ello =orld> +"e
se i6ple6entar 6as adelante.
1. Seleccionar ;File T Ne7 T ProBectC>. Ana 'eH dentro del 6enK, ele1ir la opci#n
;Android ProBect> dentro de la carpeta de Android. (Fi1. @)
Fi1"ra @. Creaci#n de "n n"e'o proyecto Android.
Nota: d"rante el tie6po de elaboraci#n de este reporte, la i6a1en y las opciones de
selecci#n del tipo de proyecto ca6biaron. 0s 6"y probable +"e d"rante los si1"ientes
6eses '"el'an a ca6biar, pero concept"al6ente las opciones de creaci#n de proyectos
se 6antienen bsica6ente in'ariantes.
). Co6o se obser'a en la Fi1. 4, es necesario co6pletar "na serie de datos para la
confi1"raci#n inicial del proyecto (entre parBntesis se indican los 'alores car1ados en el
e2e6plo, a"n+"e p"eden 'ariar se1Kn sea necesario):
N Fo6bre al proyecto (;Dello6orld>).
N $ersi#n de Android a "tiliHar (*%4%).
N Fo6bre de la aplicaci#n (;Dello6orld>).
N Fo6bre del pac,a1e. &a con'enci#n reco6endada es "tiliHar el no6bre del
do6inio en orden in'erso, se1"ido del no6bre del proyecto
(;com%pro,ramaciondistri-uida%Dello6orld>)
N Fo6bre de la acti'idad principal (;/ainActi$ity>)
N $ersi#n 6Gni6a del A%! (;E>)
Fi1"ra 4. Confi1"raci#n inicial del proyecto Android.
/. Al presionar sobre el bot#n ;Finis2> se crear la estr"ct"ra de la aplicaci#n.

:%* - "omponentes principales
0n este 6o6ento ya es posible 'is"aliHar la estr"ct"ra de n"estra aplicaci#n android. &a 6is6a
c"enta con "n con2"nto de carpetas y arc-i'os +"e se detallarn a contin"aci#n:
N src: contiene los arc-i'os de c#di1o f"ente (.2a'a) del proyecto. 0n n"estro e2e6plo
e3iste el arc-i'o ;*ainActi'ity.2a'a>.
N ,en: contiene el arc-i'o ;(.2a'a>, a"to1enerado por el co6pilador.
N Android *%4%: contiene la librerGa de android )./.1 (;android.2ar>).
N assets: contiene todos los ;assets> "sados por la aplicaci#n, tales co6o <T*&, arc-i'os
de te3to, bases de datos, etc.
N -in: contiene las clases co6piladas (.class) de n"estra aplicaci#n.
N res: contiene los rec"rsos "sados por la aplicaci#n. %osee las si1"ientes s"bcarpetas:
S dra7a-le-2dpi, dra7a-le-mdpi, dra7a-le-ldpi: contiene i6a1enes tales co6o
los iconos de la aplicaci#n en diferentes resol"ciones (-i1-, 6edi"6, loC
respecti'a6ente).
S layout: contiene el arc-i'o ;6ain.36l> en donde se enc"entra especificada la
interfaH de "s"ario (A!) en for6ato P*&.
S $alues: contiene el arc-i'o ;strin1s.36l>. 0l 6is6o sir'e para definir todos los
strin1s +"e conten1a n"estra aplicaci#n, para l"e1o ser referenciados. 0s
reco6endable "tiliHarlo, ya +"e si en al1Kn 6o6ento se necesita trad"cir la
aplicaci#n a otro idio6a, solo es necesario ree6plaHar el arc-i'o strin1s.36l con
otro e+"i'alente en el n"e'o idio6a.
N Android/anifest%8ml: este es el arc-i'o de 6anifiesto de n"estra aplicaci#n. 0n el
6is6o se especifica los per6isos re+"eridos por la aplicaci#n, s" orientaci#n
(landscape o portrait), el A%! 6Gni6o necesario, la clase principal, etc..
N pro,uard%cf,: arc-i'o de confi1"raci#n a"to1enerado por %roG"ard para opti6iHar8
of"scar el c#di1o de la aplicaci#n. Fo se debe 6odificar.
N proBect%properties: arc-i'o de confi1"raci#n a"to1enerado por Android Tools. Fo se
debe 6odificar.

:%4 - Implementaci#n de FDello 6orldG
Contin"ando con el proyecto creado anterior6ente, se detalla el c#di1o a i6ple6entar en cada
co6ponente para finaliHar la aplicaci#n ;<ello =orld>.
H Android/anifest%8ml: 0n este arc-i'o se indica el pac,a1e, la 'ersi#n de la aplicaci#n,
s" no6bre, y la clase encar1ada de iniciar la aplicaci#n (6ain la"nc-er). &os 'alores
indicados con arroba referencian a otros arc-i'os (por e2e6plo Xstrin18appMna6e
referencia al arc-i'o strings.xml).
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http:schemas.android.comap!resandroid"
pac!age="com.programaciondistri"uida.#ello$orld"
android:version%ode="1"
android:version&ame="1.0" >
<uses-sd! android:min'd!(ersion=")" >
<application
android:icon="*dra+a"leic,launcher"
android:la"el="*stringapp,name" >
<activit-
android:la"el="*stringapp,name"
android:name="..ain/ctivit-" >
<intent-filter>
<action android:name="android.intent.action../0&" >
<categor- android:name="android.intent.categor-.1/2&%#34" >
<intent-filter>
<activit->
<application>
<manifest>
N main%8ml: es posible crear la interfaH 1rfica desde c#di1o, o bien 1enerar "n arc-i'o
P*& donde se defina la 6is6a. %ara esta Klti6a opci#n se p"ede "tiliHar el rap)ical
La#out, el c"al es "na -erra6ienta 'is"al de diseEo, parte del ADT. 0n este e2e6plo se
definieron dos !ext"iew y "n 6utton (notar +"e no es obli1atorio el "so de strings.xml).
<?xml version="1.0" encoding="utf-8"?>
<1inear1a-out xmlns:android="http : schemas .android .com ap! res android "
android:id="*5idla-out"
android:la-out,+idth="fill,parent"
android:la-out,height="fill,parent"
android:orientation="vertical" >
<6ext(ie+
android:la-out,+idth="fill,parent"
android:la-out,height="+rap,content"
android:text="*stringhello" >
<6ext(ie+
android:la-out,+idth="fill,parent"
android:la-out,height="+rap,content"
android:text="3sta es la aplicaci7n de prue"a #ello $orld" >
<1inear1a-out>
H strin,s%8ml: 0ste arc-i'o al6acenar los te3tos en for6ato cla'e8'alor.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">#ello $orld8 .ain/ctivit-9<string>
<string name="app,name">#ello$orld<string>
<resources>
H /ainActi$ity%Ba$a: A6pliare6os el 6Btodo onCreate() a fin de incorporar
din6ica6ente "n bot#n, el c"al ade6s presentar "n 6ensa2e al ser clic,eado:
pu"lic void on%reate:;undle saved0nstance'tate< =
super.on%reate:saved0nstance'tate<>
set%ontent(ie+:4.la-out.main<>
;utton a;utton = ne+ ;utton:get;ase%ontext:<<>
a;utton.set6ext:"? este es un "ot7n de prue"a"<>
a;utton.set@n%lic!1istener:ne+ (ie+.@n%lic!1istener:< =
pu"lic void on%lic!:(ie+ v< =
6oast.ma!e6ext:get;ase%ontext:<8 "%lic!ed"8 6oast.13&A6#,1@&A<.sho+:<>
B
B<>
1inear1a-out la-out = :1inear1a-out<find(ie+;-0d:4.id.la-out<>
la-out.add(ie+:a;utton<>
B
Al e2ec"tar la aplicaci#n en el e6"lador 'ere6os "na pantalla si6ilar a la de la Fi1. J. &a Fi1.
1I 6"estra el res"ltado de clic,ear el bot#n de la aplicaci#n.
Fi1"ra J. 02ec"ci#n de la aplicaci#n
Fi1"ra 1I. *ensa2e al clic,ear el bot#n
Al e2ec"tar la aplicaci#n en el e6"lador 'ere6os "na pantalla si6ilar a la de la Fi1. J. &a Fi1.
1I 6"estra el res"ltado de clic,ear el bot#n de la aplicaci#n.
:%? - Instalaci#n /ediante API
Alternati'a6ente a la e2ec"ci#n de la aplicaci#n desde 0clipse, es posible realiHar "na
instalaci#n tradicional de Bsta 6ediante el for6ato de arc-i'o A%?.
%ri6era6ente se debe 1enerar el A%? definiti'o de la aplicaci#n. Desde 0clipse, se debe
acceder a FFile J 58port J 58port Android ApplicationG, y co6pletar la infor6aci#n
re+"erida (Fi1. 11). Ana 'eH finaliHados los pasos de e3portaci#n, se contar con el A%? listo
para ser instalado en el dispositi'o.
%ara realiHar la instalaci#n del A%? solo se necesita poder acceder al 6is6o y descar1arlo
desde donde estB alo2ado (Ceb ser'er, 6ail, dropbo3, etc.).
Fi1"ra 11. Generaci#n de A%? de instalaci#n.
> - "omunicaci#n entre Dispositi$os
>% - Koc1ets en 3a$a
.a'e pro'ee las clases principales para la co6"nicaci#n 6ediante Soc,ets:
N TC%
S Ba$a%net%Ker$erKoc1et: 0sta clase i6ple6enta soc,ets de tipo ser'idor, el c"al
espera requests a tra'Bs de la red.
L Ba$a%net%Koc1et: 0sta clase i6ple6enta soc,ets de tipo cliente, el c"al realiHa
requests -acia "n Ser'erSoc,et.
L Ba$a%io%InputKtream, Ba$a%io%MutputKtream: Asadas para el en'Go de datos
entre el cliente y el ser'idor (y 'ice'ersa).
N AD%
S Ba$a%net%Data,ramKoc1et: 0sta clase es "sada para en'iar y recibir datagram
pac(ets.. Fo se 1arantiHa +"e los pa+"etes lle1"en a destino ni +"e lle1"en en
el 6is6o orden en +"e f"eron en'iados.
S Ba$a%net%Data,ramPac1et: 0sta es la clase +"e se 'a a en'iar y recibir co6o
6ensa2e.
S Ba$a%net%/ulticastKoc1et: 0s "n Data1ra6Soc,et con capacidades adicionales
de 6"lticast. 0s Ktil para en'iar y recibir 6"lticast pac,ets.
>%* - 5Bemplo Koc1ets ("P
0l si1"iente e2e6plo instancia dos t-reads encar1ados de realiHar "na cone3i#n clienteser'idor
6ediante soc,ets TC%: Ser'er y Client. 0l pri6ero +"edar en espera -asta +"e el se1"ndo
realice la cone3i#n correspondiente.
import Cava.io.@"Cect0nput'tream>
import Cava.io.@"Cect@utput'tream>
import Cava.net.'erver'oc!et>
import Cava.net.'oc!et>
pu"lic class 6est6%D =

static final int PORT = 8EFG>
static final 'tring HOST = "localhost">
pu"lic static void main:'tringHI args<
=
ne+ 6est6%D:<>
B
pu"lic 6est6%D:<
=
'erver server = ne+ 'erver:<>
6hread server6hread = ne+ 6hread:server<>
server6hread.start:<>
%lient client = ne+ %lient:<>
6hread client6hread = ne+ 6hread:client<>
client6hread.start:<>
B
pu"lic class 'erver implements 4unna"le =
pu"lic void run:< =
tr- =
'-stem.out.println:"H'erverI 3sperando mensaCe..."<>
'erver'oc!et server%onn = ne+ 'erver'oc!et:D@46<>
'oc!et soc!et = server%onn.accept:<>
@"Cect0nput'tream from;uffer = ne+ @"Cect0nput'tream:soc!et.get0nput'tream:<<>
'tring datos = :'tring<from;uffer.read@"Cect:<>
from;uffer.close:<>
soc!et.close:<>
server%onn.close:<>
'-stem.out.println:"H'erverI 4eci"ido: " 5 datos<>
B
catch :3xception e< =
e.print'tac!6race:<>
B
B
B
pu"lic class %lient implements 4unna"le =
pu"lic void run:< =
tr- =
'oc!et soc!et = ne+ 'oc!et:HOST8 PORT<>
@"Cect@utput'tream to;uffer = ne+
@"Cect@utput'tream:soc!et.get@utput'tream:<<>
'-stem.out.println:"H%lientI 3nviando mensaCe"<>
to;uffer.+rite@"Cect:".3&'/J3"<>
to;uffer.flush:<>
to;uffer.close:<>
soc!et.close:<>
B
catch :3xception e< =
e.print'tac!6race:<>
B
B
B
B
>%4 - 5Bemplo Koc1ets UDP
0l si1"iente e2e6plo es si6ilar al anterior, pero "tiliHando AD% en l"1ar de TC%. Fotar +"e en
este e2e6plo se traba2a 6ediante array de bytes, el en'Go es no blo+"eante, y se est "tiliHando
-ulticast7oc(ets a fin de +"e los -osts destinatarios p"edan ser 'arios en l"1ar de solo "no.
import Cava.net.KatagramDac!et>
import Cava.net.0net/ddress>
import Cava.net..ulticast'oc!et>
pu"lic class 6est2KD =
pu"lic static final int PORT_UDP = )))8>
pu"lic static final 'tring GROUP_IP = "LM0.0.0.1">
pu"lic static void main:'tringHI args< =
ne+ 6est2KD:<>
B
pu"lic 6est2KD:< =
'erver server = ne+ 'erver:<>
6hread server6hread = ne+ 6hread:server<>
server6hread.start:<>

%lient client = ne+ %lient:<>
6hread client6hread = ne+ 6hread:client<>
client6hread.start:<>
B

pu"lic class %lient extends 6hread =
pu"lic void run:< =
tr-
=
demoramos a fin de Nue el server estO esperando a reci"ir
6hread.sleep:1000<>
"-teHI "uf = ne+ "-teHLGFI>
"uf = ".3&'/J3".get;-tes:<>
0net/ddress group = 0net/ddress.get;-&ame:GROUP_IP<>
KatagramDac!et pac!et = ne+ KatagramDac!et:"uf8 "uf.length8 group8 PORT_UDP<>
.ulticast'oc!et soc!et = ne+ .ulticast'oc!et:PORT_UDP<>
'-stem.out.println:"H%lientI 3nviando mensaCe"<>
soc!et.send:pac!et<>
B
catch :3xception e<
=
e.print'tac!6race:<>
B
B
B

pu"lic class 'erver extends 6hread =
pu"lic void run:< =
tr-
=
.ulticast'oc!et soc!et = ne+ .ulticast'oc!et:PORT_UDP<>
0net/ddress group = 0net/ddress.get;-&ame:GROUP_IP<>
soc!et.CoinAroup:group<>
KatagramDac!et pac!et>
"-teHI "uf = ne+ "-teHLGFI>
pac!et = ne+ KatagramDac!et:"uf8 "uf.length<>
'-stem.out.println:"H'erverI 3sperando mensaCe..."<>
soc!et.receive:pac!et<>
'tring received = ne+ 'tring:pac!et.getKata:<<>
'-stem.out.println:"H'erverI 4eci"ido: " 5 received<>
soc!et.leaveAroup:group<>
soc!et.close:<>
B
catch :3xception e< =
e.print'tac!6race:<>
B
B
B
B
>%? - Koc1ets en Android
&a A%! de Soc,ets para Android es i1"al a la de .a'a, con lo c"al se si6plifica el desarrollo de
aplicaciones -etero1Bneas, dado +"e es posible i6ple6entar "na Knica librerGa en co6Kn +"e
conten1a la f"ncionalidad de acceso y "so de soc,ets.
%or e2e6plo, en 0clipse es posible crear "n proyecto en co6Kn +"e ser "tiliHado tanto por
aplicaciones .a'a tradicionales co6o por aplicaciones Android. &"e1o, este proyecto p"ede
ser referenciado desde desde otro proyecto, en la confi1"raci#n *ava 6uild 4at) de este Klti6o.
>%?% /ulticasts en Android
Cabe destacar "na consideraci#n especial en lo +"e respecta a recepciones 6"lticast. A
6enos +"e se confi1"re e3plGcita6ente otra cosa, las 6is6as son filtradas, bsica6ente por
raHones de cons"6o de ener1Ga del e+"ipo:
;For6ally t-e =ifi stac, filters o"t pac,ets not e3plicitly addressed to t-is de'ice.
Ac+"rin1 a *"lticast&oc, Cill ca"se t-e stac, to recei'e pac,ets addressed to 6"lticast
addresses. %rocessin1 t-ese e3tra pac,ets can ca"se a noticable battery drain and
s-o"ld be disabled C-en not needed.>
.uente8 )ttp 899 developer $android $com 9reference 9android 9net 9wifi 9:ifi-anager $-ulticastLoc( $)tml
%ara poder recibir pa+"etes 6"lticast, es necesario obtener el loc, correspondiente. 0sta tarea
se 1eneral6ente se realiHa en tres pasos: 1) !nstanciar y confi1"rar el 6"lticast&oc, en el
6Btodo onCreate(). )) (e+"erir en el 6Btodo onResume(). /) &iberar en el 6Btodo
onPause().
pu"lic void on%reate:;undle saved0nstance'tate< =
...
$ifi.anager +m = :$ifi.anager<get'-stem'ervice:%ontext.$0P0,'34(0%3<>
$ifi.anager..ulticast1oc! multicast1oc! = +m.create.ulticast1oc!:"m-Ke"ug6ag"<>
B
protected void on4esume:< =
super.on4esume:<>
if :multicast1oc!9=null QQ 9multicast1oc!.is#eld:<<
multicast1oc!.acNuire:<>
B

protected void onDause:< =
super.onDause:<>
if :multicast1oc!9=null QQ multicast1oc!.is#eld:<<
multicast1oc!.release:<>
B

Ap)ndice A: Prctica
1. %roponer "na sol"ci#n +"e in'ol"cre la instanciaci#n din6ica y car1a de datos de "n
ob2eto desde "na aplicaci#n cliente Android y s" posterior en'Go a "n ser'idorL
indicndole a este Klti6o el o los 6Btodos +"e debe e2ec"tar, para l"e1o retornar el
'alor res"ltante.
). !6ple6entar 6ediante soc,ets TC% "n control remoto ,4; para dispositi'o 6#'il
encar1ado de co6andar "n ser'icio (corriendo por e2e6plo en "n e+"ipo des,top) co6o
el de reprod"cci#n de 6Ksica (acciones de reprod"cci#n, pa"sa, etc.) o na'e1aci#n de
foto1rafGas (si1"iente, anterior, etc.).
/. Desarrollar "tiliHando soc,ets AD% "n notificador de )osts conectados en una LA<;,
teniendo en c"enta +"e no ser necesario contar con "n ser'idor central para esta
tarea, sino +"e cada dispositi'o 6#'il deber 6antener act"aliHada s" tabla de -osts
conectados.

También podría gustarte