Download - 2. Estructura de un proyecto Android (Android Studio) _ sgoliver.pdf

Transcript
  • 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.