You are on page 1of 6

EstructuradeunproyectoAndroid(AndroidStudio)

bySgoliveron28/12/2014inAndroid,Programacin

ElritmodeactualizacionesdeAndroidStudioesbastantealto,porloquealgunosdetallesdeesteartculopuedennoajustarse
exactamentealaltimaversindelaaplicacin.EsteartculoseencuentraactualizadoparalaversindeAndroidStudio1.0.2

SeguimosconelCursodeProgramacinAndroid.ParaempezaracomprendercmoseconstruyeunaaplicacinAndroidvamosacrearun
nuevoproyectoAndroidenAndroidStudioyecharemosunvistazoalaestructurageneraldelproyectocreadopordefecto.
ParacrearunnuevoproyectoejecutaremosAndroidStudioydesdelapantalladebienvenidapulsaremoslaopcinStartanewAndroid
Studioprojectparainiciarelasistentedecreacindeunnuevoproyecto.

SiyahabamosabiertoanteriormenteAndroidStudioesposiblequeseabradirectamentelaaplicacinprincipalenvezdelapantallade
bienvenida.EnesecasoaccederemosalmenFile/Newprojectparacrearelnuevoproyecto.
ElasistentedecreacindelproyectonosguiarporlasdistintasopcionesdecreacinyconfiguracindeunnuevoproyectoAndroid.
Enlaprimerapantallaindicaremos,poresteorden,elnombredelaaplicacin,eldominiodelacompaa,ylarutadondecrearelprojecto.El
segundodelosdatosindicadostansloseutilizarcomopaquetedenuestrasclasesjava.As,siporejemploindicamoscomoenmi
casoandroid.sgoliver.net,elpaquetejavaprincipalutilizadoparamisclasessernet.sgoliver.android.holausuario.Entucasopuedesutilizar
cualquierotrodominio.

EnlasiguientepantalladelasistenteconfiguraremoslasplataformasyAPIsquevaautilizarnuestraaplicacin.Nosotrosnoscentraremosen
aplicacionesparatelfonosytablets,encuyocasotanslotendremosqueseleccionarlaAPImnima(esdecir,laversinmnimadeAndroid)
quesoportarlaaplicacin.Comoyaindiquenelcaptulosobrelainstalacindelentornodedesarrollo,enestecursonoscentraremosen
Android4.0.3comoversinmnima(API15).

Laversinmnimaqueseleccionemosenestapantallaimplicarquenuestraaplicacinsepuedaejecutarenmsomenosdispositivos.De
estaforma,cuantomenorseasta,amsdispositivospodrllegarnuestraaplicacin,peromscomplicadoserconseguirqueseejecute
correctamenteentodaslasversionesdeAndroid.Parahacernosunaideadelnmerodedispositivosquecubrimosconcadaversin
podemospulsarsobreelenlaceHelpmechoose,quemostrarelporcentajededispositivosqueejecutanactualmentecadaversinde
Android.Porejemplo,enelmomentodeescribiresteartculo,siseleccionamoscomoAPImnimala15conseguiramoscubrirun89.7%de
losdispositivosactuales.Comoinformacinadicional,sipulsamossobrecadaversindeAndroidenestapantallapodremosverunalistade
lasnovedadesintroducidaspordichaversin.

Enlasiguientepantalladelasistenteelegiremoseltipodeactividadprincipaldelaaplicacin.Entenderemosporahoraqueunaactividades
unaventanaopantalladelaaplicacin.ParaempezarseleccionaremosBlankActivity,queeseltipomssencillo.

Porltimo,enelsiguientepasodelasistenteindicaremoslosdatosasociadosaestaactividadprincipalqueacabamosdeelegir,indicandoel
nombredesuclasejavaasociada(ActivityName)yelnombredesulayoutxml(algoascomolainterfazgrficadelaactividad,loveremos
msadelante),suttulo,yelnombredelrecursoXMLcorrespondienteasumenprincipal.Nonospreocuparemosmuchoporahorade
todosestosdatosporloquepodemosdejartodoslosvalorespordefecto.Msadelanteenelcursoexplicaremoscmoyparaquutilizar
estoselementos.

UnavezconfiguradotodopulsamoselbotnFinishyAndroidStudiocrearpornosotrostodalaestructuradelproyectoyloselementos
indispensablesquedebecontener.SitodovabienaparecerlapantallaprincipaldeAndroidStudioconelnuevoproyectocreado.

Enocasiones,laversinactualdeAndroidStudionorealizacorrectamenteestaprimeracargadelproyectoyesposiblequeosencontris
conelerrorqueveisenlasiguienteimagen(RenderingProblems).Parasolucionarlonotenismsquecerrarlaventanadeleditor
grfico(1)yvolverlaaabrirpulsandosobreelficheroactivity_main.xmlquepodisverenelexploradordelaparteizquierda(2).

Enlaparteizquierda,podemosobservartodosloselementoscreadosinicialmenteparaelnuevoproyectoAndroid,sinembargopordefecto
losvemosdeunaformauntantopeculiarquepodrallevarnosaconfusin.Paraentendermejorlaestructuradelproyectovamosacambiar
momentneamentelaformaenlaqueAndroidStudionoslamuestra.Paraello,pulsaremossobrelalistadesplegablesituadaenlaparte
superiorizquierda,ycambiaremoslavistadeproyectoaProject.

Trashaceresto,laestructuradelproyectocambiaunpocodeaspectoypasaasercomoseobservaenlasiguienteimagen:

Enlossiguientesapartadosdescribiremosloselementosprincipalesdeestaestructura.
Loprimeroquedebemosdistinguirsonlosconceptosdeproyectoymdulo.Laentidadproyectoesnica,yenglobaatodoslosdems
elementos.Dentrodeunproyectopodemosincluirvariosmdulos,quepuedenrepresentaraplicacionesdistintas,versionesdiferentesde
unamismaaplicacin,odistintoscomponentesdeunsistema(aplicacinmvil,aplicacinservidor,libreras,).Enlamayoradeloscasos,
trabajaremosconunproyectoquecontendrunslomdulocorrespondienteanuestraaplicacinprincipal.Porejemploenestecasoque
estamoscreandotenemoselproyectoandroidholausuarioquecontienealmduloappquecontendrtodoelsoftwaredelaaplicacinde
ejemplo.

Acontinuacindescribiremosloscontenidosprincipalesdenuestromduloprincipal.
Carpeta/app/src/main/java
Estacarpetacontendrtodoelcdigofuentedelaaplicacin,clasesauxiliares,etc.Inicialmente,AndroidStudiocrearpornosotroselcdigo
bsicodelapantalla(actividadoactivity)principaldelaaplicacin,querecordemosqueennuestrocasoeraMainActivity,ysiemprebajo
laestructuradelpaquetejavadefinidodurantelacreacindelproyecto.

Carpeta/app/src/main/res/
Contienetodoslosficherosderecursosnecesariosparaelproyecto:imgenes,layouts,cadenasdetexto,etc.Losdiferentestiposde

recursossepuedendistribuirentrelassiguientessubcarpetas:
Carpeta

Descripcin

/res/drawable/

Contienelasimgenes[yotroselementosgrficos]usadosenporlaaplicacin.
Parapoderdefinirdiferentesrecursosdependiendodelaresolucinydensidad
delapantalladeldispositivosesueledividirenvariassubcarpetas:
/drawable(recursosindependientesdeladensidad)
/drawableldpi(densidadbaja)
/drawablemdpi(densidadmedia)
/drawablehdpi(densidadalta)
/drawablexhdpi(densidadmuyalta)
/drawablexxhdpi(densidadmuymuyalta:)

/res/layout/

ContienelosficherosdedefinicinXMLdelasdiferentespantallasdelainterfaz
grfica.Paradefinirdistintoslayoutsdependiendodelaorientacindel
dispositivosepuededividirtambinensubcarpetas:
/layout(vertical)
/layoutland(horizontal)

/res/anim/
/res/animator/

Contienenladefinicindelasanimacionesutilizadasporlaaplicacin.

/res/color/

ContieneficherosXMLdedefinicindecoloressegnestado.

/res/menu/

ContieneladefinicinXMLdelosmensdelaaplicacin.

/res/xml/

ContieneotrosficherosXMLdedatosutilizadosporlaaplicacin.

/res/raw/

Contienerecursosadicionales,normalmenteenformatodistintoaXML,queno
seincluyanenelrestodecarpetasderecursos.

/res/values/

ContieneotrosficherosXMLderecursosdelaaplicacin,comoporejemplo
cadenasdetexto(strings.xml),estilos(styles.xml),colores(colors.xml),arrays
devalores(arrays.xml),tamaos(dimens.xml),etc.

NotodasestascarpetastienenporquaparecerencadaproyectoAndroid,tanslolasquesenecesiten.Iremosviendoduranteelcurso
qutipodeelementossepuedenincluirencadaunadeellasycmoseutilizan.
Comoejemplo,paraunproyectonuevoAndroidcomoelquehemoscreado,tendremospordefectolossiguientesrecursosparalaaplicacin:

Comosepuedeobservar,existenalgunascarpetasencuyonombreseincluyeunsufijoadicional,comoporejemplovaluesw820dp.Estos,
yotrossufijos,seempleanparadefinirrecursosindependientesparadeterminadosdispositivossegnsuscaractersticas.Deestaforma,por
ejemplo,losrecursosincluidosenlacarpetavaluesw820dpseaplicaransloapantallasconmsde820dpdeancho,olosincluidosen
unacarpetallamadavaluesv11seaplicarantansloadispositivoscuyaversindeAndroidseala3.0(API11)osuperior.Aligualquelos
sufijoswyvexistenotrosmuchosparareferirseaotrascaractersticasdelterminal,puedeconsultarselalistacompletaen
ladocumentacinoficialdelAndroid.
Entrelosrecursoscreadospordefectocabedestacarloslayouts,ennuestrocasoslotendremosporahoraelllamadoactivity_main.xml,
quecontienenladefinicindelainterfazgrficadelapantallaprincipaldelaaplicacin.SihacemosdobleclicsobreesteficheroAndroid
Studionosmostrarestainterfazensueditorgrfico,ycomopodremoscomprobar,enprincipiocontienetanslounaetiquetadetextocon
elmensajeHelloWorld!.

PulsandosobrelaspestaasinferioresDesignyTextpodremosalternarentreeleditorgrfico(tipoarrastrarysoltar),mostradoenla
imagenanterior,yeleditorXMLquesemuestraenlaimagensiguiente:

Duranteelcursonoutilizaremosdemasiadoeleditorgrfico,sinoquemodificaremoslainterfazdenuestraspantallasmanipulando
directamentesuficheroXMLasociado.Estoenprincipiopuedeparecermuchomscomplicadoqueutilizareleditorgrfico[noesnada
complicadoenrealidad],peroporelcontrarionospermitiraprendermuchosdelosentresijosdeAndroidmsrpidamente.
Fichero/app/src/main/AndroidManifest.xml
ContieneladefinicinenXMLdemuchosdelosaspectosprincipalesdelaaplicacin,comoporejemplosuidentificacin(nombre,icono,),
suscomponentes(pantallas,servicios,),olospermisosnecesariosparasuejecucin.Veremosmsadelantemsdetallesdeestefichero.
Fichero/app/build.gradle
Contieneinformacinnecesariaparalacompilacindelproyecto,porejemplolaversindelSDKdeAndroidutilizadaparacompilar,la
mnimaversindeAndroidquesoportarlaaplicacin,referenciasalaslibrerasexternasutilizadas,etc.Msadelanteveremostambinms
detallesdeestefichero.
Enunproyectopuedenexistirvariosficherosbuild.gradle,paradefinirdeterminadosparmetrosadistintosniveles.Porejemplo,ennuestro
proyectopodemosverqueexisteunficherobuild.gradleaniveldeproyecto,yotroaniveldemdulodentrodelacarpeta/app.Elprimerode
ellosdefinirparmetrosglobalesatodoslosmdulosdelproyecto,yelsegundoslotendrefectoparaelmdulocorrespondiente.
Carpeta/app/libs
Puedecontenerlaslibrerasjavaexternas(ficheros.jar)queutilicenuestraaplicacin.Normalmenteharemosreferenciaadichaslibreraen
elficherobuild.gradledescritoenelpuntoanterior,deformaqueentrenenelprocesodecompilacindenuestraaplicacin.Veremosalgn
ejemplomsadelante.
Carpeta/app/build/
Contieneunaseriedeelementosdecdigogeneradosautomticamentealcompilarelproyecto.Cadavezquecompilamosnuestro
proyecto,lamaquinariadecompilacindeAndroidgenerapornosotrosunaseriedeficherosfuentejavadirigidos,entreotrasmuchascosas,
alcontroldelosrecursosdelaaplicacin.Importante:dadoqueestosficherossegeneranautomticamentetrascadacompilacindel
proyectoesimportantequenosemodifiquenmanualmentebajoningunacircunstancia.

Adestacarsobretodoelficheroqueaparecedesplegadoenlaimagenanterior,llamadoR.java,dondesedefinelaclaseR.Esta
claseRcontendrentodomomentounaseriedeconstantesconlosidentificadores(ID)detodoslosrecursosdelaaplicacinincluidosenla
carpeta/app/src/main/res/,deformaquepodamosaccederfcilmenteaestosrecursosdesdenuestrocdigoatravsdedichodato.As,por

ejemplo,laconstanteR.layout.activity_maincontendrelIDdellayoutactivity_main.xmlcontenidoenlacarpeta/app/src/main/res/layout/.

YconestotodosloselementosprincipalesdeunproyectoAndroid.Nopierdasdevistaesteproyectodeejemploquehemoscreadoyaquelo
utilizaremosenbrevecomobaseparacrearnuestraprimeraaplicacin.Peroantes,enelsiguienteapartadohablaremosdeloscomponentes
softwareprincipalesconlosquepodemosconstruirunaaplicacinAndroid.