7
 Estructura de un proyecto Android (Android Studio) by Sgoliver  on 28/12/2014 in Android, Programación El ritmo de actualizaciones de Android Studio es bastante alto, por lo que algunos detalles de este artículo pueden no ajustarse exactamente a la última versión de la aplicación. Este artículo se encuentra actualizado para la versión de Android Studio 1.0.2 Seguimos con el Curso de Programación Android. Para empezar a comprender cómo se construye una aplicación Android vamos a crear un nuevo proyecto Android en Android Studio y echaremos un vistazo a la estructura general del proyecto creado por defecto. Para crear un nuevo proyecto ejecutaremo s Android Studio y desde la pantalla de bienvenida pulsaremos la opción “Start a new Android Studio project” para iniciar el asistente de c reación de un nuevo proyecto. Si ya habíamos abierto anteriormente Andr oid Studio es posible que se abra directamente la aplicación principal en vez de la pantalla de bienvenida. En ese caso accederemos al menú “File / New project…” para crear el nuevo proyecto. El asistente de creación del proyecto nos guiará por las distintas opciones de creación y configuración de un nuevo proyecto Android. En la primera pantalla indicaremos, por este orden, el nombre de la aplicación, el dominio de la compañía, y la ruta donde crear el projecto. El segundo de los datos indicados tan sólo se utilizará como paquete de nuestras clases java. Así, si por ejemplo indicamos como en mi caso android.sgoliver.net , el paquete java principal utilizado para mis clases será net.sgoliver.android.holausuario . En tu caso puedes utilizar cualqui er otro dominio. En la siguiente pantalla del asistente configuraremos las plataformas y APIs que va a utilizar nuestra aplicación. Nosotros nos centraremos en aplicaciones para teléfonos y tablets, en cuyo caso tan sólo tendremos que seleccionar la API mínima (es decir, la versión mínima de Android) que soportará la aplicación. Como ya indiqué en el capítulo sobre la instalación del entorno de desarrollo , en este curso nos centraremos en  Android 4.0.3 como versión mínima (API 15) . La versión mínima que seleccionemos en esta pantalla implicará que nuestra aplicación se pueda ejecutar en más o menos dispositivos. De esta forma, cuanto menor sea ésta, a más dispositivos podrá llegar nuestra aplicación, pero más complicado será conseguir que se ejecute correctamente en todas las versiones de Android. Para hacernos una idea del número de dispositivos que cubrimos con cada versión podemos pulsar sobre el enlace “Help me choose”, que mostrará el porcentaje de dispositivos que ejecutan actualmente cada versión de  Android. Por ejemplo, en el moment o de escribir este artículo, si seleccionamos como API mínima la 15 conseguiríam os cubrir un 89.7% d e

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

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.