You are on page 1of 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 345 /.) (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 C8C99 : 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:88es.Ci,ipedia.or18Ci,i8Android 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:88opensi1nal6aps.co68reports8fra16entation.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:88en.Ci,ipedia.or18 Ci,i8*obileMoperatin1Msyste6.

Fi1"ra ). 0'ol"ci#n de 'entas de dispositi'os se1Kn s" Siste6a Dperati'o, se1Kn -ttp:88en.Ci,ipedia.or18Ci,i8*obileMoperatin1Msyste6 (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:88de'eloper.android.co681"ide8basics8C-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 de3 code (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./ Ar+"itect"ra Soporte S.D. Clases %ool de constantes Aplicaci#n (e1istros Android De3 %or aplicaci#n A%? 3./ %ila *Kltiples Class %or clase .A(

Tabla 1. Diferencias entre D$* y .$*. (eferencias: Q1R -ttp:88CCC.6o6ob.in8)I1I81eneral8b-a'is8difference of d'6 and 2'6 in t-e android Corld8 Q)R -ttp:88CCC.1oo1le.co68e'ents8io8)I1I8sessions82it 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 Android 345

1$2$2 + ,nstalacin # configuracin Sie6pre es reco6endable se1"ir los pasos indicados en el sitio de desarrolladores Android (-ttp:88de'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:88de'eloper.android.co68sd,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 Android 345 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:88androidspin.co68)I118I18)78-oCto install android 345 ) ) in 'irt"albo38) 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 Uplatfor6 toolsV del SD? (e2: C:Wr"taMSD?Wplatfor6 tools). %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 U netcf,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:88CCC .ap,tops.co68aide android 2a'a ide 1 I beta15.-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:88de'eloper.android.co68sd,8nd,8inde3.-t6l si6ilar a la .F! de .a'a: -ttp:88docs.oracle.co682a'ase81.:.I8docs81"ide82ni8spec82niTDC.-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:88CCC .android2a'adoc.co681.IMr1Msrc8android8app8Acti'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 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). 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

N N

(;com%pro,ramaciondistri-uida%Dello6orld>) Fo6bre de la acti'idad principal (;/ainActi$ity>) $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:

N N

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. 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.. 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. 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.com ap! res android" 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"le ic,launcher" android:la"el="*string app,name" > <activitandroid:la"el="*string app,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>

>

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="*5id la-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="*string hello" > <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>

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>

/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 cliente ser'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 import import import Cava.io.@"Cect0nput'tream> Cava.io.@"Cect@utput'tream> Cava.net.'erver'oc!et> 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 )ttp899developer$android$com9reference9android9net9wifi9: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.