Upload
alejo-acosta
View
7
Download
0
Embed Size (px)
Citation preview
EstructuradeunproyectoAndroid(AndroidStudio)bySgoliveron28/12/2014inAndroid,Programacin
ElritmodeactualizacionesdeAndroidStudioesbastantealto,porloquealgunosdetallesdeesteartculopuedennoajustarseexactamentealaltimaversindelaaplicacin.EsteartculoseencuentraactualizadoparalaversindeAndroidStudio1.0.2
SeguimosconelCursodeProgramacinAndroid.ParaempezaracomprendercmoseconstruyeunaaplicacinAndroidvamosacrearunnuevoproyectoAndroidenAndroidStudioyecharemosunvistazoalaestructurageneraldelproyectocreadopordefecto.
ParacrearunnuevoproyectoejecutaremosAndroidStudioydesdelapantalladebienvenidapulsaremoslaopcinStartanewAndroidStudioprojectparainiciarelasistentedecreacindeunnuevoproyecto.
SiyahabamosabiertoanteriormenteAndroidStudioesposiblequeseabradirectamentelaaplicacinprincipalenvezdelapantalladebienvenida.EnesecasoaccederemosalmenFile/Newprojectparacrearelnuevoproyecto.
ElasistentedecreacindelproyectonosguiarporlasdistintasopcionesdecreacinyconfiguracindeunnuevoproyectoAndroid.
Enlaprimerapantallaindicaremos,poresteorden,elnombredelaaplicacin,eldominiodelacompaa,ylarutadondecrearelprojecto.Elsegundodelosdatosindicadostansloseutilizarcomopaquetedenuestrasclasesjava.As,siporejemploindicamoscomoenmicasoandroid.sgoliver.net,elpaquetejavaprincipalutilizadoparamisclasessernet.sgoliver.android.holausuario.Entucasopuedesutilizarcualquierotrodominio.
EnlasiguientepantalladelasistenteconfiguraremoslasplataformasyAPIsquevaautilizarnuestraaplicacin.Nosotrosnoscentraremosenaplicacionesparatelfonosytablets,encuyocasotanslotendremosqueseleccionarlaAPImnima(esdecir,laversinmnimadeAndroid)quesoportarlaaplicacin.Comoyaindiquenelcaptulosobrelainstalacindelentornodedesarrollo,enestecursonoscentraremosenAndroid4.0.3comoversinmnima(API15).
Laversinmnimaqueseleccionemosenestapantallaimplicarquenuestraaplicacinsepuedaejecutarenmsomenosdispositivos.Deestaforma,cuantomenorseasta,amsdispositivospodrllegarnuestraaplicacin,peromscomplicadoserconseguirqueseejecutecorrectamenteentodaslasversionesdeAndroid.ParahacernosunaideadelnmerodedispositivosquecubrimosconcadaversinpodemospulsarsobreelenlaceHelpmechoose,quemostrarelporcentajededispositivosqueejecutanactualmentecadaversindeAndroid.Porejemplo,enelmomentodeescribiresteartculo,siseleccionamoscomoAPImnimala15conseguiramoscubrirun89.7%delosdispositivosactuales.Comoinformacinadicional,sipulsamossobrecadaversindeAndroidenestapantallapodremosverunalistadelasnovedadesintroducidaspordichaversin.
Enlasiguientepantalladelasistenteelegiremoseltipodeactividadprincipaldelaaplicacin.Entenderemosporahoraqueunaactividadesunaventanaopantalladelaaplicacin.ParaempezarseleccionaremosBlankActivity,queeseltipomssencillo.
Porltimo,enelsiguientepasodelasistenteindicaremoslosdatosasociadosaestaactividadprincipalqueacabamosdeelegir,indicandoelnombredesuclasejavaasociada(ActivityName)yelnombredesulayoutxml(algoascomolainterfazgrficadelaactividad,loveremosmsadelante),suttulo,yelnombredelrecursoXMLcorrespondienteasumenprincipal.Nonospreocuparemosmuchoporahoradetodosestosdatosporloquepodemosdejartodoslosvalorespordefecto.Msadelanteenelcursoexplicaremoscmoyparaquutilizarestoselementos.
UnavezconfiguradotodopulsamoselbotnFinishyAndroidStudiocrearpornosotrostodalaestructuradelproyectoyloselementosindispensablesquedebecontener.SitodovabienaparecerlapantallaprincipaldeAndroidStudioconelnuevoproyectocreado.
Enocasiones,laversinactualdeAndroidStudionorealizacorrectamenteestaprimeracargadelproyectoyesposiblequeosencontrisconelerrorqueveisenlasiguienteimagen(RenderingProblems).Parasolucionarlonotenismsquecerrarlaventanadeleditorgrfico(1)yvolverlaaabrirpulsandosobreelficheroactivity_main.xmlquepodisverenelexploradordelaparteizquierda(2).
Enlaparteizquierda,podemosobservartodosloselementoscreadosinicialmenteparaelnuevoproyectoAndroid,sinembargopordefectolosvemosdeunaformauntantopeculiarquepodrallevarnosaconfusin.ParaentendermejorlaestructuradelproyectovamosacambiarmomentneamentelaformaenlaqueAndroidStudionoslamuestra.Paraello,pulsaremossobrelalistadesplegablesituadaenlapartesuperiorizquierda,ycambiaremoslavistadeproyectoaProject.
Trashaceresto,laestructuradelproyectocambiaunpocodeaspectoypasaasercomoseobservaenlasiguienteimagen:
Enlossiguientesapartadosdescribiremosloselementosprincipalesdeestaestructura.
Loprimeroquedebemosdistinguirsonlosconceptosdeproyectoymdulo.Laentidadproyectoesnica,yenglobaatodoslosdemselementos.Dentrodeunproyectopodemosincluirvariosmdulos,quepuedenrepresentaraplicacionesdistintas,versionesdiferentesdeunamismaaplicacin,odistintoscomponentesdeunsistema(aplicacinmvil,aplicacinservidor,libreras,).Enlamayoradeloscasos,trabajaremosconunproyectoquecontendrunslomdulocorrespondienteanuestraaplicacinprincipal.Porejemploenestecasoqueestamoscreandotenemoselproyectoandroidholausuarioquecontienealmduloappquecontendrtodoelsoftwaredelaaplicacindeejemplo.
Acontinuacindescribiremosloscontenidosprincipalesdenuestromduloprincipal.
Carpeta/app/src/main/java
Estacarpetacontendrtodoelcdigofuentedelaaplicacin,clasesauxiliares,etc.Inicialmente,AndroidStudiocrearpornosotroselcdigobsicodelapantalla(actividadoactivity)principaldelaaplicacin,querecordemosqueennuestrocasoeraMainActivity,ysiemprebajolaestructuradelpaquetejavadefinidodurantelacreacindelproyecto.
Carpeta/app/src/main/res/
Contienetodoslosficherosderecursosnecesariosparaelproyecto:imgenes,layouts,cadenasdetexto,etc.Losdiferentestiposde
recursossepuedendistribuirentrelassiguientessubcarpetas:
Carpeta Descripcin
/res/drawable/ Contienelasimgenes[yotroselementosgrficos]usadosenporlaaplicacin.Parapoderdefinirdiferentesrecursosdependiendodelaresolucinydensidaddelapantalladeldispositivosesueledividirenvariassubcarpetas:
/drawable(recursosindependientesdeladensidad)/drawableldpi(densidadbaja)/drawablemdpi(densidadmedia)/drawablehdpi(densidadalta)/drawablexhdpi(densidadmuyalta)/drawablexxhdpi(densidadmuymuyalta:)
/res/layout/ ContienelosficherosdedefinicinXMLdelasdiferentespantallasdelainterfazgrfica.Paradefinirdistintoslayoutsdependiendodelaorientacindeldispositivosepuededividirtambinensubcarpetas:
/layout(vertical)/layoutland(horizontal)
/res/anim//res/animator/
Contienenladefinicindelasanimacionesutilizadasporlaaplicacin.
/res/color/ ContieneficherosXMLdedefinicindecoloressegnestado.
/res/menu/ ContieneladefinicinXMLdelosmensdelaaplicacin.
/res/xml/ ContieneotrosficherosXMLdedatosutilizadosporlaaplicacin.
/res/raw/ Contienerecursosadicionales,normalmenteenformatodistintoaXML,quenoseincluyanenelrestodecarpetasderecursos.
/res/values/ ContieneotrosficherosXMLderecursosdelaaplicacin,comoporejemplocadenasdetexto(strings.xml),estilos(styles.xml),colores(colors.xml),arraysdevalores(arrays.xml),tamaos(dimens.xml),etc.
NotodasestascarpetastienenporquaparecerencadaproyectoAndroid,tanslolasquesenecesiten.Iremosviendoduranteelcursoqutipodeelementossepuedenincluirencadaunadeellasycmoseutilizan.
Comoejemplo,paraunproyectonuevoAndroidcomoelquehemoscreado,tendremospordefectolossiguientesrecursosparalaaplicacin:
Comosepuedeobservar,existenalgunascarpetasencuyonombreseincluyeunsufijoadicional,comoporejemplovaluesw820dp.Estos,yotrossufijos,seempleanparadefinirrecursosindependientesparadeterminadosdispositivossegnsuscaractersticas.Deestaforma,porejemplo,losrecursosincluidosenlacarpetavaluesw820dpseaplicaransloapantallasconmsde820dpdeancho,olosincluidosenunacarpetallamadavaluesv11seaplicarantansloadispositivoscuyaversindeAndroidseala3.0(API11)osuperior.Aligualquelossufijoswyvexistenotrosmuchosparareferirseaotrascaractersticasdelterminal,puedeconsultarselalistacompletaenladocumentacinoficialdelAndroid.
Entrelosrecursoscreadospordefectocabedestacarloslayouts,ennuestrocasoslotendremosporahoraelllamadoactivity_main.xml,quecontienenladefinicindelainterfazgrficadelapantallaprincipaldelaaplicacin.SihacemosdobleclicsobreesteficheroAndroidStudionosmostrarestainterfazensueditorgrfico,ycomopodremoscomprobar,enprincipiocontienetanslounaetiquetadetextoconelmensajeHelloWorld!.
PulsandosobrelaspestaasinferioresDesignyTextpodremosalternarentreeleditorgrfico(tipoarrastrarysoltar),mostradoenlaimagenanterior,yeleditorXMLquesemuestraenlaimagensiguiente:
Duranteelcursonoutilizaremosdemasiadoeleditorgrfico,sinoquemodificaremoslainterfazdenuestraspantallasmanipulandodirectamentesuficheroXMLasociado.Estoenprincipiopuedeparecermuchomscomplicadoqueutilizareleditorgrfico[noesnadacomplicadoenrealidad],peroporelcontrarionospermitiraprendermuchosdelosentresijosdeAndroidmsrpidamente.
Fichero/app/src/main/AndroidManifest.xml
ContieneladefinicinenXMLdemuchosdelosaspectosprincipalesdelaaplicacin,comoporejemplosuidentificacin(nombre,icono,),suscomponentes(pantallas,servicios,),olospermisosnecesariosparasuejecucin.Veremosmsadelantemsdetallesdeestefichero.
Fichero/app/build.gradle
Contieneinformacinnecesariaparalacompilacindelproyecto,porejemplolaversindelSDKdeAndroidutilizadaparacompilar,lamnimaversindeAndroidquesoportarlaaplicacin,referenciasalaslibrerasexternasutilizadas,etc.Msadelanteveremostambinmsdetallesdeestefichero.
Enunproyectopuedenexistirvariosficherosbuild.gradle,paradefinirdeterminadosparmetrosadistintosniveles.Porejemplo,ennuestroproyectopodemosverqueexisteunficherobuild.gradleaniveldeproyecto,yotroaniveldemdulodentrodelacarpeta/app.Elprimerodeellosdefinirparmetrosglobalesatodoslosmdulosdelproyecto,yelsegundoslotendrefectoparaelmdulocorrespondiente.
Carpeta/app/libs
Puedecontenerlaslibrerasjavaexternas(ficheros.jar)queutilicenuestraaplicacin.Normalmenteharemosreferenciaadichaslibreraenelficherobuild.gradledescritoenelpuntoanterior,deformaqueentrenenelprocesodecompilacindenuestraaplicacin.Veremosalgnejemplomsadelante.
Carpeta/app/build/
Contieneunaseriedeelementosdecdigogeneradosautomticamentealcompilarelproyecto.Cadavezquecompilamosnuestroproyecto,lamaquinariadecompilacindeAndroidgenerapornosotrosunaseriedeficherosfuentejavadirigidos,entreotrasmuchascosas,alcontroldelosrecursosdelaaplicacin.Importante:dadoqueestosficherossegeneranautomticamentetrascadacompilacindelproyectoesimportantequenosemodifiquenmanualmentebajoningunacircunstancia.
Adestacarsobretodoelficheroqueaparecedesplegadoenlaimagenanterior,llamadoR.java,dondesedefinelaclaseR.EstaclaseRcontendrentodomomentounaseriedeconstantesconlosidentificadores(ID)detodoslosrecursosdelaaplicacinincluidosenlacarpeta/app/src/main/res/,deformaquepodamosaccederfcilmenteaestosrecursosdesdenuestrocdigoatravsdedichodato.As,por
ejemplo,laconstanteR.layout.activity_maincontendrelIDdellayoutactivity_main.xmlcontenidoenlacarpeta/app/src/main/res/layout/.
YconestotodosloselementosprincipalesdeunproyectoAndroid.Nopierdasdevistaesteproyectodeejemploquehemoscreadoyaqueloutilizaremosenbrevecomobaseparacrearnuestraprimeraaplicacin.Peroantes,enelsiguienteapartadohablaremosdeloscomponentessoftwareprincipalesconlosquepodemosconstruirunaaplicacinAndroid.