Professional Documents
Culture Documents
Captulo
8
Desenvolvimento de Aplicativos para Android
Dyego Carlos Sales de Morais, Ivan Fillipe Rodrigues dos Santos
Abstract
In this mini-course will introduce the Android platform, a platform on the rise in
development applications for mobile devices. In this mini-course will show the steps
required for installing and configuring the development environment, presentation of
the file structure, demonstrating the use of the main components of layout,
implementation of concepts, and finally execution of an example mobile device.
Resumo
Nesse minicurso iremos apresentar a plataforma Android, uma plataforma em ascenso
no desenvolvimento de aplicativos para dispositivos mveis. Nesse minicurso sero
mostrados os passos necessrios para a instalao e configurao do ambiente de
desenvolvimento, apresentao da estrutura de arquivos, demonstrao do uso dos
principais componentes de layout, implementao de conceitos e por fim execuo de
um exemplo no dispositivo mvel.
No permitido fazer cpia integral ou parcial deste trabalho visando o lucro ou vantagem comercial.
Este trabalho foi publicado nos Anais da XII Escola Regional de Computao dos Estados da Bahia,
Alagoas e Sergipe, em abril de 2012 UNIVASF -www.erbase2012.univasf.edu.br- ISSN 2177-4692.
221
8.1.3. Tratamento dado ao tema
Inicialmente ser realizada uma viso geral sobre o estado da arte no desenvolvimento
de aplicaes para dispositivos mveis. Em seguida ser apresentado um comparativo
entre as principais tecnologias de desenvolvimento para plataformas mveis, em
especial Android. Por fim, ser demonstrada a codificao de alguns conceitos na
prtica, incluindo instalao em dispositivo real.
8.1.4. Perfil desejado dos participantes
O minicurso melhor aproveitado por desenvolvedores (profissionais ou estudantes)
que dominam o paradigma orientado a objetos, de preferncia Java.
8.1.5. Infra-estrutura fsica necessria para a apresentao
1.1
222
223
oferecer funcionalidades especficas dos diversos dispositivos; uniformidade, para
manter uma arquitetura comum; alm de ser orientada a objetos, que permite cdigo
pouco acoplado e altamente coeso.
As principais caractersticas do Android so:
Application framework: proporciona a reutilizao e substituio de
componentes;
Dalvik virtual machine: otimizada para dispositivos mveis;
Browser Integrado: baseado no webkit engine;
Grficos Otimizados: (acelerao de hardware opcional);
SQLite: um poderoso e leve engine de banco de dados relacional disponvel
para todas as aplicaes
Suporte multimdia para udio, vdeo e formatos de imagem (MPEG4, H.264,
MP3, AAC, AMR, JPG, PNG, GIF);
Telefonia GSM (dependente de hardware);
Bluetooth, EDGE, 3G, e Wi-Fi (dependente de hardware);
Cmera, GPS, compasso, e acelermetro (dependente de hardware);
Rico ambiente de desenvolvimento, incluindo um emulador de dispositivo,
ferramentas de depurao, memria, performance e um plugin para o Eclipse
(ADT).
Ademais, outros dados relevantes sobre o Android so que ele possui mais de
200 milhes de dispositivos ativados, com uma mdia de 550 mil ativaes dirias; est
presente em 137 pases e regies; e, conforme mostra grfico apresentado na figura 8.2,
apenas no terceiro trimestre de 2011, os usurios baixaram 2,4 bilhes de aplicaes
para os seus dispositivos mveis com Android [Google 2011].
224
Figura 8.2. Grfico de download de aplicativos para Android at o terceiro
trimestre de 2011 [Google 2011].
225
diversas outras plataformas como tablets e netbooks, e seu uso tem se expandido cada
vez mais em dispositivos portteis e sistemas embarcados em geral, inclusive relgios.
No subtpico seguinte abordado mais sobre esse SO e sua arquitetura.
8.2.2. Introduo ao Desenvolvimento de Aplicaes Mveis
A plataforma de desenvolvimento Android possui as seguintes principais caractersticas:
possui grande parte de seu cdigo livre; as aplicaes do Google j vm integradas no
sistema do Android; e permite que com uma mesma conta seja possvel acessar uma
srie de ferramentas: Email, chat, sites, docs, grupos, calendrios, etc; alm de utilizar
uma mquina virtual (Dalvik) projetada para aperfeioar a memria e os recursos de
hardware em um dispositivo mvel (Figura 8.3)[Android 2010].
No desenvolvimento do SO foi utilizada a verso 2,6 do kernel do Linux para os
servios centrais do sistema, tais como segurana, gesto de memria, gesto de
processos, etc. O kernel tambm atua como uma camada de abstrao entre o hardware
e o resto do software.
Toda aplicao Android roda em seu prprio processo, com sua prpria
instncia da mquina virtual Dalvik. O Dalvik no consome byte-code Java, mas sim
dexcode. Para isso, o Google desenvolveu uma ferramenta, chamada dx, que converte
Java bytecodes (*.class) em dexcodes (*.dex).
Alm disso, desde a verso 2.2 (Froyo), o Android possui uma implementao
de JIT (Just-in-time), que compila dexcodes para a arquitetura-alvo em tempo de
execuo, tornando a execuo dos processos consideravelmente mais rpidas, j que
no precisa ficar interpretando dexcodes.
Como linguagem de programao base para desenvolvimento de suas
aplicaes, o Android utiliza o Java, alm de fazer uso de um conjunto de bibliotecas
226
C/C++ usadas por diversos componentes expostas para os desenvolvedores atravs do
framework. Abaixo esto algumas das principais bibliotecas disponveis:
Android SDK
Eclipse IDE
227
Caso seja exibida a mensagem Java SE Development Kit (JDK) not found.
mesmo j tendo instalado o JDK, deve-se voltar e avanar novamente no instalador. A
mensagem no se repetir.
Utilizar o caminho de instalao: C:\Android\Android-sdk.
Ao trmino da instalao, rodar o SDK Manager, no qual sero identificadas e
disponibilizadas atualizaes das diversas Plataformas (verses) do sistema Android. A
verso utilizada no minicurso ser a Android 2.2 API 8, no entanto aconselhvel
instalar todos os pacotes. Clicar em "Accept All" e em seguida, "Install".
8.2.6. Instalando o Eclipse IDE
O Eclipse uma ferramenta de integrao da linguagem de programao Java. Nele,
tambm necessrio integrar o Android SDK para o desenvolvimento de aplicaes
Android. O Eclipse IDE pode ser baixado no link a seguir:
http://www.eclipse.org/downloads/
Dentre as opes apresentadas no website da IDE, ser utilizada nesse minicurso
o Eclipse IDE for Java Developers.
Para o Eclipse no necessrio instalao, pois os arquivos rodam direto da
pasta onde foram descompactados, basta extrair o contedo do arquivo baixado para o
local desejado.
8.2.7. Instalando o ADT Plugin
O ADT (Android Development Tools) um plug-in para o Eclipse que foi projetado
para fornecer um ambiente poderoso para desenvolvimento de aplicativos para Android.
Seguem os passos para sua instalao:
1. Inicie o Eclipse, clique em Help > Install New Software.
2. Clique no boto Add.
3. Na janela que abrir digite ADT Plugin para Name e a URL https://dlssl.google.com/Android/eclipse/ para Location.
4. Aps dar OK, na janela que segue, selecione Developer Tools e avance.
5. Ser exibida a lista de ferramentas que sero baixadas. Avance novamente.
6. Aceite os termos de licena e clique em Finalizar.
7. Aguarde o trmino da instalao e reinicie o Eclipse.
8.2.8. Configurando o Android SDK e instanciando uma AVD
Estando instalado o ADT Plugin necessrio alterar as suas opes no Eclipse IDE para
que aponte para a pasta de instalao do SDK Android. Seguem os passos para a
configurao:
1. Acesse o caminho Windows > Preferences > Android.
2. Clique em Browser, localize a pasta de instalao da SDK Android
(C:\Android\Android-sdk) e clique em Ok.
228
Pode-se executar uma aplicao desenvolvida atravs de um Dispositivo Virtual,
que nada mais que um emulador.
Para configurar um Dispositivo Virtual, abrir o SDK Manager (pode ser feito
pelo Eclipse IDE acessando Windows > Android SDK e AVD Manager) e clicar em
new.
Na tela em seguida, preencher os dados como segue na figura 8.4. Em seguida,
clicando em Create AVD, um dispositivo criado e est pronto para emular aplicaes
Android em seu computador. Selecione o dispositivo criado e clique em Start para
inicializar o emulador.
229
Obs.: Caso no veja o Project Explorer, pode ir em Windows > Show View >
Project Explorer.
Na tela seguinte, em Project Name digite um nome para seu projeto, nesse
exemplo do minicurso utilizaremos o nome MyApp. Deixe selecionada a opo
Create New Project in Workspace e Use Default Location. Ento, pressione Next.
Feito isso, repare no Project Explorer que so gerados alguns arquivos por
padro. A prxima subseo explica os arquivos gerados.
8.2.10. Apresentao da estrutura de arquivos a partir do projeto criado
A estrutura bsica de um projeto para Android composta pelos seguintes elementos,
ilustrados na figura 8.8:
230
231
aplicao. O manifest faz uma quantidade de tarefas em adio declarao de
componentes da aplicao, como:
232
Na tela que se abrir deve-se no lado esquerdo selecionar New_configuration
(que est em Android Application) e no lado direito deve-se selecionar o projeto, no
exemplo MyApp, ao clicar em browser. possvel tambm alterar o nome da
configurao, nesse exemplo utilizou-se MyApp_Sim.
233
8.2.12. Ferramentas de depurao
A plataforma Android possui algumas funcionalidades para auxiliar no trabalho de
desenvolvimento de aplicativos. A seguir ser mostrado o uso de duas ferramentas
muito utilizadas no processo de simulao. Para utilizar essas ferramentas na IDE
Eclipse o usurio deve navegar no menu Window at a opo Show View. Nesse menu,
entre as opes mostradas se encontram o LogCat e o File Explorer que sero as
ferramentas que irmos analisar.
Quando executamos uma aplicao escrita na linguagem Java o console do
Eclipse exerce a funo de mostrar as sadas do programas, que podem ser mensagem
que o programador deseja que sejam exibidas ou at mesmo excees que ocorreram
durante a execuo do cdigo. No entanto, quando estamos utilizando o simulador o
console se torna o responsvel por mostrar informaes relacionadas ao estado da
simulao. Para observar informaes sobre a execuo do cdigo foi criado o LogCat.
O LogCat traz informaes sobre a execuo do simulador e das aplicaes.
Caso ocorra uma exceo no cdigo como uma exceo de ponteiro nulo, o erro
aparecer no LogCat. Essa ferramenta ajuda o desenvolvedor a achar erros de execuo
com maior facilidade.
234
Figura 8.14. File Explorer.
Activity
Services
Content Providers
235
exemplo, o sistema Android prov um Content Provider que gerencia as informaes
dos contatos do usurio. Desta forma, qualquer aplicao com as permisses
apropriadas pode consultar parte do Content Provider (como um ContactsContract.Data)
para ler e escrever informaes sobre uma pessoa em particular.
Content Providers tambm so teis para ler e escrever dados que esto privados
na sua aplicao e no so compartilhados. Por exemplo, salvar notas pessoais.
Um Content Provider implementado como uma subclasse de ContentProvider
e deve implementar um conjunto de APIs que permite a outras aplicaes executarem
transaes. Devido ao foco do minicurso no sero trabalhados mais a fundo.
Broadcast Receivers
236
pode ativar diretamente um componente de outra aplicao. O sistema Android,
entretanto, pode. Ento, para ativar um componente de outra aplicao, voc deve
entregar uma mensagem para o sistema que especifica sua inteno (Intent) de iniciar
um componente em particular. O sistema ento ativa o componente para voc.
Nas subsees seguintes so abordados conceitos e aplicaes relacionadas ao
componente Activity. Adicionalmente, apresentado o Intent, que exprime uma
inteno de realizao de algo da aplicao para o Sistema Operacional atravs de
mensagens, e necessrio, dentre outras funcionalidades, para a navegao entre
Activities.
8.3 Activity
Uma Activity uma classe que herda de Android.app.Activity ou suas subclasses.
Activity responsvel por tratar os eventos da tela como, por exemplo, tratar o clique
do boto na tela, escrever um texto dinamicamente na tela, etc. As Activities
sobrescrevem o mtodo onCreate(Bundle) que responsvel por realizar a
inicializao da tela atravs do mtodo setContentView(view), essa view passada como
parmetro a tela que ser inicializada. Podemos interpretar Activity como tela.
No exemplo utilizado at aqui o cdigo da Activity o seguinte:
237
todos os objetos grandes, como conexes de rede ou banco de dados. Quando a da
Activity recomea, voc pode readquirir os recursos necessrios e retomar as aes que
foram interrompidas. Estas transies de estado so parte do ciclo de Activity.
Um Exemplo prtico quando voc est jogando. A Activity que esta no topo da
pilha a Activity do jogo, as demais Activities que esto abaixo da pilha, podem estar
em modo de pausa, totalmente parado ou executando em segundo plano. Mas se voc
est jogando e recebe uma ligao na hora do pnalti. O que acontecer?
O Android colocar a aplicao de ligao no topo da pilha e a aplicao do jogo
abaixo, temporariamente parada. Existem alguns mtodos que controlam o ciclo de vida
de uma aplicao. So eles, onCreate(), onStart(), onResume(), onPause(),onStop() e o
onDestroy(). Tambm existem subnveis de um ciclo de vida, so eles, entire lifetime,
visibile lifetime e o foreground lifetime. Abaixo est ilustrado o ciclo de vida da
Activity, seguido de uma breve explicao sobre cada mtodo de retorno.
238
239
Em pausa: Outra atividade est em primeiro plano e tem foco, mas este
ainda visvel. Ou seja, outra atividade visvel na parte superior de um
presente e que a atividade parcialmente transparente ou no cobre a tela
inteira. Uma atividade em pausa est completamente viva (o objeto
Activity mantido na memria, ele mantm todas as informaes do
estado e membro, e permanece preso ao gerenciador de janelas), mas pode
ser morta pelo sistema em situaes de pouca memria.
240
(figura 8.18). Alm de passar uma String como parmetro e inicializar uma nova
Activity.
Importante lembrar que toda nova Activity criada deve ser declarada no
Manifest, sendo assim, este foi alterado tambm da seguinte forma:
<Activity Android:name=".Tela2" />
Criou-se uma nova classe que extende Activity com o nome de Tela2 que
recebe a String passada pela Activity que a inicializou e exibindo-a no Log.
8.3.3. ListActivity
Quando necessrio listar dados em uma tela ou apresentar mapas existem tipos
especficos (nesses casos, ListActivity e MapActivity, respectivamente) que encapsulam
diversas caractersticas para facilitar ao programador. Por exemplo, a ListActivity j
241
implementa o componente ListView. Nessa subseo ser visto como usar uma
ListActivity para mostrar ao usurio uma lista de dados. Para tal, foi adicionada ao
projeto MyApp uma nova Activity chamada ListActivity1, na qual criado um array de
String e utilizado um adapter passando os dados do array para a lista da tela.
242
8.3.4. Adapters
Adapters so classes responsveis por fazer o que chamado de bind: Receber os
dados de um Cursor (ou de alguma outra fonte de dados) e coloc-los nos seus
respectivos lugares no layout da Activity.
Para Activities complexas, tipicamente so criadas subclasses da classe
CursorAdapter (Adapter dedicado a tratar cursores). No exemplo utilizou-se apenas um
ArrayAdapter que posua um array de Strings. Ademais, utilizou-se um mtodo para
setar o ListActivity com esse array, chamado (setListAdapter).
8.3.5. Intent
Intent refere-se s intenes. So determinados comandos que se pode enviar ao
Sistema Operacional Android para realizar alguma ao. Com Intents pode-se enviar ou
recuperar dados. O mtodo startActivity(Intent Intent) envia dados e requisies de
telas, o mtodo getIntent() recupera uma Intent enviada por meio do startActivity(), o
mtodo putExtra(nome_de_identificao, valor) insere na Intent algum valor, ou seja,
o primeiro parmetro um nome para que possa ser identificado mais tarde e o segundo
parmetro um valor que pode ser String, boolean, int, float, etc. O
getStringExtra(nome_de_identificao) pode recurar, por exemplo, uma String
inserido na Intent atravs do putExtra(nome_de_identificao, valor).
243
8.3.6. Navegao entre telas e envio de parmetros
Conforme mostrado no exemplo da subseo de Activities, possvel iniciar outra
atividade, chamando startActivity(), passando-lhe uma Intent que descreve a atividade
que deseja iniciar. A inteno especifica qualquer atividade exatamente o que deseja
iniciar ou descreve o tipo de ao que deseja executar (e o sistema seleciona a atividade
adequada para voc, que pode mesmo ser de um aplicativo diferente). A inteno
tambm pode transportar pequenas quantidades de dados a serem utilizados pela
atividade que iniciada.
s vezes, pode-se querer receber um resultado da atividade que for
inicializada a partir de outra. Nesse caso, deve-se iniciar a atividade chamando
startActivityForResult() em vez de startActivity(). Para ento receber o resultado da
atividade subseqente, aplicar o onActivityResult(), mtodo de retorno. Quando a
atividade subseqente feita, ele retorna um resultado de uma Intent para o seu mtodo
onActivityResult().
Por exemplo, talvez voc queira que o usurio escolha um de seus contatos, para
que sua atividade possa fazer algo com as informaes desse contato. Pode-se ver como
criar uma inteno e manipular o resultado com o cdigo que segue:
private void pickContact() {
URI Intent Intent = new Intent(Intent.ACTION_PICK,
Contacts.CONTENT_URI); startActivityForResult(Intent,
PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == Activity.RESULT_OK && requestCode ==
PICK_CONTACT_REQUEST) {
Cursor cursor = getContentResolver().query(data.getData(), new
String[] { Contacts.DISPLAY_NAME}, null, null, null);
if (cursor.moveToFirst()) {
Index = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(columnIndex);
}
}
}
244
Quando a segunda Activity terminar a sua execuo, a funo
onActivityResult() ser invocada, com o resultado como parmetro. Mas como uma
Activity define o seu resultado, a ser lido por aquela que a chamou ao invocar-se a
funo setResult (int resultCode), como por exemplo:
setResult(Intent.RESULT_OK);
Apesar da criao desse arquivo de layout ser uma tarefa simples. Existem
ferramentas que permitem o desenho dessas telas no modo grfico, o que facilita na
criao de novas aplicaes e manuteno de aplicaes existentes. Observe a imagem
abaixo onde apresentada a interface de desenho de interface do Eclipse. Nessa
interface os componentes so arrastados para tela, sem que haja a necessidade de
escrever o arquivo de layout.
245
Uma vez montado o layout o cdigo da aplicao pode fazer uso dos
componentes que foram adicionados. Para manipular os componentes como objetos
preciso declarar uma varivel do tipo do componente e fazer a ligao entre essa
varivel e o componente. Para estabelecer essa ligao utilizado o mtodo
findViewById(id) herdado da classe Activity. O mtodo nos retorna um objeto do tipo
View e por isso h a necessidade de fazer uma operao de converso de tipo antes de
atribuir seu retorno a varivel.
No exemplo abaixo a varivel edit do tipo EditText recebe um valor vindo
do mtodo de ligao. Depois que a ligao estabelecida as mudanas deitas na
varivel mudaram a forma e comportamento do componente. No exemplo o texto do
componente est sendo alterado pelo mtodo setText().
246
A seguir sero apresentados alguns componentes grficos disponveis na
plataforma. O objetivo dessa seo mostrar as caractersticas de cada componente e
demonstrar seu uso com exemplos.
8.4.1. TextView
Esse componente responsvel por mostrar textos que no podem ser editado pelo
usurio final. Esse componente comumente usado para fazer rtulos de outros
componentes (label) e inserir textos que devem apenas ser lidos pelo usurio final.
247
8.4.3. Alert
Esse elemento serve para mostrar uma mensagem de alerta para o usurio. A mensagem
de alerta se sobrepe a aplicao, s sendo possvel continuar a execuo quando a
janela de alerta concluir sua tarefa.
248
dialogo.setTitle("Resultado");
dialogo.setMessage("Teste alerta");
dialogo.setNeutralButton("Ok",null);
dialogo.show();
8.4.4. Toast
O componente Toast utilizado para mostrar mensagens ao usurio que no precisam
de confirmao. Esse componente geralmente utilizado para informar ao usurio que
alguma tarefa foi concluda.
249
Como o Alert esse componente no declarado no arquivo de layout, pois sua
chamada geralmente relacionada a um evento. A seguir observe um exemplo do
cdigo necessrio para montar o Toast.
Toast.makeText(getBaseContext(),"Alguma mensagem", Toast.LENGTH_SHORT).show();
8.4.5. Button
O Button o componente que representa um boto. Esse componente geralmente
utilizado para disparar eventos quando o mesmo clicado. Botes so componentes
muito utilizados em aplicaes tradicionais. A eles so delegadas tarefas como mudar
de trela e execuo de aes
Para inserir esse elemento no layout utilizado a tag Button, que possui uma
srie de propriedades para alterar sua forma.
<Button
Android:id="@+id/button1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Boto" />
250
251
Android:id="@+id/radio2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="RadioButton" />
</RadioGroup>
8.4.7. CheckBox
Checkbox um elemento que possui dois estados, marcado ou desmarcado. A diferena
do Checkbox em relao ao RadioButton que as aes que ocorrem em um elemento
Checkbox no interfere no estado de outros Checkbox. O elemento Checkbox
geralmente utilizado quando em um grupo de opes mais de uma pode ser selecionada.
252
8.4.8. ImageView
ImageView o componente responsvel por mostrar imagens na tela. Essas imagens
podem estar entre os arquivos do projeto, por fazer parte do layout da aplicao ou pode
estar numa pasta externa e ser includa em tempo de execuo no componente.
253
254
8.4.11. ListView
ListView um componente que mostra um ou mais uma lista. Assim como o Spinner,
esse componente pode possuir vrios valores pr-estabelecidos.
255
256
6. Em seguida escolha um local para salvar o arquivo .apk dando um nome a ele e
clique em Finish.
Para instalar o .apk gerado no seu dispositivo mvel real, siga os passos a seguir.
1- Habilite no smartphone ou tablet (em configuraes > aplicativos) a opo
permitir instalar aplicativos desconhecidos.
2- Conecte o seu smartphone ou tablet ao computador.
3- Ao conectar ser necessrio escolher a opo de conexo USB, deve-se
escolher a opo armazenamento de dados.
7. Obs.: Esta escolha pode no ser solicitada, nestes casos deve-se ir na barra de
notificaes e clicar em conexo USB e depois escolher a opo armazenamento
de dados.
4- Copie o blackbox.apk para seu smartphone ou tablet.
5- Desconecte o USB.
6- Execute o arquivo "blackbox.apk" no seu aparelho.
7- A instalao prosseguir. D permisso para acesso a Internet.
257
Google. Android Developers. 2011. Disponvel em: <http://developer.Android.com>.
Acesso em: 10 de dezembro de 2011.
Lecheta, R. R. Google Android: aprenda a criar aplicaes para dispositivos mveis
com o Android SDK. 2 Edio Revisada e Ampliada. So Paulo: Novatec Editora,
2010.
Lee, Valentino et al. (2004). Mobile Applications: Architecture, Design, and
Development, Prentice Hall
Nokia (2010) Symbian. http://symbian.nokia.com/.
Portal Android - Comunidade de Desenvolvedores da Plataforma Android. 2011.
Disponvel em: <http://www.portalAndroid.org/comunidade/>. Acesso em: 11 de
dezembro de 2011.
StatCounter. 2012. Disponvel em: <http://gs.statcounter.com/#mobile_os-ww-monthly201201-201203-bar>. Acesso em Fevereiro de 2012.
Silveira, F. 2011. Curso Desenvolvendo para Android. Disponvel em:
<http://www.felipesilveira.com.br/desenvolvendo-para-Android/>. Acesso em
Fevereiro de 2012.