Quando criamos um novo projeto Android, temos uma estrutura de pastas diferentes do que estamos acostumados com Java. As aplicações Android tem uma estrutura especial para aproveitar o uso de resources facilmente para a aplicação.

Resources

Voce deve externalizar resources como imagens e strings do código da sua aplicação, para poder mante-los independentemente. Externalizar também prove resources alternativos para suportar configurações especificas como a linguagem do device, tamanho da tela, orientação e etc.., o que é muito importante, já que o Android vem sendo distribuido em diversas configurações. Para garantir compatibilidade é necessario organizar os resources do projeto na pasta res, usando varias sub-pastas que junte os resources por tipo e configuração.

Para qualquer tipo de resource, voce pode especificar um default ou varias alternativas para sua aplicação:

  • Default resources são aqueles para serem usados sem configurações especificas ou então quando nenhuma alternativa é encontrado para a configuração atual do device.
  • Alternativas são feitas para configurações especificas. Para especificar um grupo para certa configuração, adicione um qualificador apropriado para a alternativa no nome do diretorio.

Por exemplo, enquanto o default UI layout é salvo em res/layout, voce pode especificar um UI layout para ser usado na orientação landscape salvando ele com o mesmo nome mas em uma pasta chamada res/layout-land. O Android automaticamente verifica seus resources e ajusta de acordo com as configurações fornecidas pelo aparelho.

Estrutura da aplicação

As pastas criadas automaticamente no nosso projeto que serão usadas pela aplicação são:

  • src: É onde fica o código fonte da nossa aplicação.
  • res: Pasta de resources da aplicação, aqui ficarão arquivos de layout, imagens, XML de configuração, XML com strings internacionalizaveis, raw files, sons, etc..

As pastas criados por default para resources são:

  1. res/drawable-<screen cfg>: é onde deve se colocar as imagens, a divisão entre hdpi (High dpi), mdpi (Medium dpi), ldpi (Low dpi)  é para guardar as imagens em resoluções diferentes.
  2. res/layout: é onde fica os arquivos XMLs que representam o layout das nossas Activities.
  3. res/values: XMLs que guardam Strings que podem ser usadas na aplicação.

Por default, um arquivo strings.xml é criado nessa pasta, os valores são guardados através de tags com a seguinte estrutura “<string name=”nomeString”>Valor String</string>”

Na pasta res é possivel adicionar mais subpastas para representar mais resources para aplicação ou alternativas para os resources, como por exemplo uma pasta ‘xml’ para guardar informações de configurações.

  • gen: Generated source folder

Essa pasta também guarda código fontes, mas ela só fica com uma unica classe gerada automaticamente pelo plugin do eclipse chamada ‘R’ no mesmo pacote que informamos em “package name” quando criamos nosso projeto. Essa classe R contém ids para todos os itens que temos na pasta res, e é através desses ids que podemos usar todos os resources facilmente na nossa aplicação.

  • assets: Arquivos raw – A diferença de colocar arquivos raw aqui do que em algo como res/raw é que resources são acessiveis por id atrabés da classe R, arquivos nessa pasta podem ser abertos por stream dentro da aplicação como um byte array.

Ainda é possivel adicionar mais pastas no nosso projeto, para criar aplicações nativas é criado uma pasta chamada jni que guarda os códigos nativos e AndroidMakeFiles que o Android NDK (Native Development Kit) usa para criar a shared lib para aplicação, como Android é uma distro unix, a shared lib é um arquivo com extenção ‘.so’, os arquivos gerados pelo NDK ainda vai para outra pasta chamada libs, essa pasta contém as shared libs que podem ser usadas na aplicação em Runtime, que pode ser carregada com um System.loadLibrary(“nomeLib”).

 

O Android tem uma arquitetura bem legal, em breve falarei mais sobre ela, até aqui aprendemos a estrutura basica da aplicação, no proximo artigo começaremos a criar uma tela, adicionar componentes e como criar layouts, so cya!