sábado, 15 de setembro de 2012

Criando primeiro programa

Olá a todos.

Agora que já foi explicado como se instala o Eclipse e o Android, iremos começar a abordar a criação de programas para Android.

A criação de um programa em Android pode ser dividida em diversas etapas.Vamos a elas.

Passo 1 - Criar o projeto de Android no Eclipse
Para criar um programa em Android, primeiro precisamos criar um projeto para este programa. A imagem abaixo demonstra isto:


Em seguida, escolhemos a opção "Android Application Project", como mostrado abaixo.


Então será mostrada uma nova janela onde teremos que digitar o nome do projeto. Utilizarei o nome ExemploAndroid para este projeto. Repare que à medida que preenchemos o nome do projeto, a caixa de texto "Package Name" é completada com o nome do pacote padrão do projeto.

OBS.: Um pacote é uma estrutura de diretórios em que os arquivos do projeto serão separados. Isto será mais detalhado abaixo.


Repare também que a caixa de texto "Build SDK" possui o valor "Android 2.3.3 (API 10)", e a caixa de texto "Minimum Required SDK" possui o valor "API 8: Android 2.2 (Froyo)". Isso significa que a versão mínima suportada para este aplicativo é a 2.2, e a recomendada é a 2.3.3. Assim, este programa NÃO RODARÁ em celular com versões inferiores à 2.2 (como as versões 1.5 - Cupcake, 1.6 - Donut, e 2.1 - Eclair).

A próxima tela na criação do projeto é demonstrada abaixo. Nela, temos a opção de layout para as telas do programa que estamos criando. Neste caso, usaremos a opção "BlankActivity".



Por fim, temos a última tela antes de criarmos de fato o projeto do nosso programa em Android. Nesta tela, escolheremos o nome do arquivo que conterá a interface gráfica da tela inicial do nosso programa. Neste caso foi escolhido o nome activity_main.


Ao fim de todo esse processo, será criado o nosso projeto:


O conteúdo de cada pasta do nosso projeto será explicado abaixo, na próxima etapa.

Passo 2 - Entendendo a estrutura do nosso projeto em Android
Um projeto de programa em Android possui uma estrutura rigidamente definida. Ele se divide em:

  • AndroidManifest.xml → Este é o arquivo principal do nosso projeto.

    Neste arquivo de XML temos as configurações gerais do nosso programa, como o número de versão do nosso programa (android:versionCode="1") e as versões de SDK mínima e máxima suportadas.
    Neste caso, a versão mínima é o SDK 8, correspondente à versão 2.2 (comumente chamada de Froyo), e a máxima é o SDK 10, correspondente à versão 2.3.3 (comumente chamada de Gingerbread).

    Temos também outras informações, como o ícone do nosso programa (android:icon="@drawable/ic_launcher"), seu tema de layout ( android:theme="@style/AppTheme"), o nome do programa (android:label="@string/app_name"), sua tela principal (android:name=".MainActivity"), e outras informações que agora não são tão importantes.

  • src/ → Nesta pasta temos todo o código-fonte em Java.

    Quando criamos nosso projeto, apenas o arquivo MainActivity.java é criado. Este é o arquivo que contém a tela inicial do nosso programa. Em Android, uma tela é conhecida como uma Activity. Assim, se queremos criar uma tela, temos que extender a classe em questão de uma Activity.

    Uma Activity possui um "ciclo de vida", que é melhor explicado aqui, mais especificamente na seção "Activity Lifecycle". Em suma, uma Activity (que a partir de agora chamaremos de "tela") possui eventos que são ativados quando o foco do programa vai para esta tela pela primeira vez (onCreate), quando o foco simplesmente vai para o programa (onResume), quando minimizamos o programa (onPause) e quando finalizamos o programa (onDestroy), dentre outros.

    Cada tela deve possuir OBRIGATORIAMENTE uma interface gráfica associada a ela. Isso é feito através do método setContentView(), que deve ser implementado no evento onCreate. No nosso programa, setamos o layout da MainActivity com o layout activity_main, que é setado como argumento do método setContentView(). Assim, temos nossa tela e seu layout setados corretamente.

    Outros pontos acerca do código-fonte da MainActivity (como o que é o evento onCreateOptionsMenu e porque o argumento do método setContentView() é R.layout.activity_main e não simplesmente activity_main) serão explicados mais abaixo.


  • res/ → Nesta pasta temos outros arquivos de configuração, como as strings, menus, cores, estilos de layout, e também todas os arquivos de mídia (imagens, arquivos de áudio e de vídeo) do nosso programa.

    Repare na figura logo abaixo que possuímos 4 pastas cujo prefixo é drawable. É nesta pasta que armazenamos as imagens e animações do nosso projeto. Mas, por que são 4 pastas e não apenas uma?

    Diferentemente do sistema operacional mobile iOS, que possui apenas um tipo de celular (iPhone) e um tipo de tablet (iPad), em Android podemos ter centenas de celulares e de tablets. Assim, teremos também uma grande infinidade de tamanhos de tela possíveis em que um aplicativo Android irá rodar. Prevendo esta característica, a Google optou por criar 4 diferentes tipos de tamanhos de tela: ldpi, mdpi, hdpi e xhdpi.

    A sigla ldpi significa "low density of pixels", a mdpi significa "medium density of pixels", hdpi significa "high density of pixels" e xhdpi significa "extremely high density of pixels". Em suma, respectivamente, podemos interpretar essas siglas como "tamanho de tela pequeno" (por exemplo, o celular Sony Ericsson Xperia Mini) , "tamanho de tela médio" (Motorola Atrix), "tamanho de tela grande" (Samsung Galaxy S 5) e "tamanho de tela bem grande" (geralmente tablets). Maiores detalhes aqui.

    Seguindo nosso detalhamento, temos a pasta layout/ (onde temos todas as interfaces gráficas à serem utilizadas no nosso projeto), a pasta menu/ (onde teremos todos os menus do nosso projeto), e a pasta values/ (onde podemos ter diversos tipos de estruturas comuns ao nosso projeto, como strings, temas de layout, arrays, cores, dentre outras).

    O layout de cada tela do Android será melhor explicado em outro tópico, assim como os menus. Quanto às strings, uma dúvida comum é entender porque precisamos declarar todas as strings em um arquivo de XML, e não no próprio código-fonte em Java.

    Esta é mais uma prática bem pensada pela Google. Como o sistema operacional mobile Android é o mais usado do mundo, sendo utilizados em centenas de países diferentes, é necessário haver um suporte à internacionalização. Ou seja, que haja um meio bem facilitado para que um programa em uma língua seja mudado para outra língua. A solução que a Google encontrou foi criar o diretório res/, um diretório específico para armazenar certas estruturas do nosso programa. Neste caso, as strings.

    Assim, bastaria modificar apenas o texto constante no arquivo strings.xml para que nosso programa passasse a ter suporte para diversas línguas. Em suma, é bem mais simples modificar o conteúdo do arquivo strings.xml do que sair modificando, um a um, todos os arquivos Java do nosso projeto.



  • R → Esta é a classe mais importante de qualquer programa em Android. É aqui que são armazenadas todas as posições de memória dos componentes utilizados no nosso programa (classes Java, arquivos XML, imagens, arquivos de som e áudio, tudo).

    Essas posições de memória são basicamente números inteiros. Se, por exemplo, quisermos referenciar um arquivo de imagem como o arquivo ic_launcher.png (o ícone do nosso programa), basta chamarmos a posição de memória em que esta imagem esta armazenada. Embora isso soe algo complicado, é mais simples do que parece. Para isto, basta chamarmos a imagem da seguinte maneira: R.drawable.ic_launcher. Ou seja, R.<diretório da imagem>.<nome da imagem>.

    Por isso, no método setContentView() da classe MainActivity.java, o argumento que passamos é R.layout.activity_main, e não activity_main.

    OBS.: Esta classe é auto-gerada. Ou seja, mesmo que a modifiquemos manualmente, automaticamente ela será re-gerada novamente.

Agora que entendemos um pouco a estrutura do nosso projeto, precisamos executá-lo para ver como um programa Android é executado via Eclipse. Isto é explicado na etapa abaixo.

Passo 3 - Executando nosso projeto
Para executar nosso projeto, primeiramente, precisamos criar um emulador do sistema operacional Android. Isto é bem simples de ser feito. Basta clicar no menu "Window" da barra de menus do Eclipse, e depois em "AVD Manager" (Android Virtual Devices Manager, ou seja, Gerenciador de Dispositivos Virtuais do Android). Em seguida, na nova janela aberta, basta clicar em "New". Então, a janela abaixo será aberta.


Agora, basta escolhermos o nome do nosso emulador, seu "Target" (versão de SDK do Android), seu tamanho de tela no check button "Built-in", e então clicar em "Create AVD". E pronto, temos um emulador de Android pronto para ser usado.

Para executar nosso programa, basta clicarmos com o botão direito no nome do projeto, no "Package Explorer" (ou até mesmo dentro de qualquer arquivo do nosso projeto), e clicar na opção "Run As", e em seguida em "Android Application". Assim, o emulador será aberto, e nosso programa será executado.


Abaixo podemos conferir a execução do nosso programa.



E pronto! Conseguimos criar nosso primeiro programa em Android! Ele é um programa simples, que apenas mostra na tela um texto.

-----

Nos próximos tópicos, serão mostrados programas mais interessantes de serem feitos.

Caso alguém tenha uma dúvida, crítica ou sugestão, sinta-se à vontade.