Desenvolvimento de Aplicativos Wireless para AndroidTM Volume 1 Fundamentos do Android Terceira Edição Lauren Darcey Shane Conder Do original: Android Wireless Application Development Vol. 1: Android Essentials – Third Edition Copyright© © 2012 Editora Ciência Moderna © © ! " # $ % && ' ()* +%,- Editor: Paulo André P. Marques Produtora Editorial: Laura Santos Souza Diagramação: Daniel Jara Tradução: Angelo Giuseppe Meira Costa (angico) Capa: Daniel Jara (Baseada na Original) Assistente Editorial: Amanda Lima da Costa Várias Marcas Registradas aparecem no decorrer deste livro. Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de exploração, ou ainda imprimir os logotipos das mesmas, o editor declara estar utilizando tais nomes apenas para fins editoriais, em benefício exclusivo do dono da Marca Registrada, sem intenção de infringir as regras de sua utilização. Qualquer semelhança em nomes próprios e acontecimentos será mera coincidência. FICHA CATALOGRÁFICA DARCEY, Lauren. CONDER, Shane. Desenvolvimento de Aplicativos Wireless para Android Vol. 1 – Fundamentos do Android – Terceira Edição Rio de Janeiro: Editora Ciência Moderna Ltda., 2012. 1. Informática; 2. Linguagem de programação. I — Título ISBN: 978-85-399-0316-0 CDD 001.642 005.133 !"#$%#&'%# (!)"'*""#'&"+,!)"'*""#'&-$ &.! / 0 111 0 #$+'" Dedicatória Este livro é dedicado a Chickpea. Introdução Tendo por pioneira a Open Handset Alliance e o Google, o Android é uma popular plataforma móvel de código aberto e gratuita que abalou o mundo sem fios. Este livro, e o próximo volume, Android Wireless Application Development Volume II: Advanced Topics, oferece diretriz abrangente para equipes de desenvolvimento de software sobre projeto, desenvolvimento, teste, depuração e distribuição de aplicativos Android profissionais. Se você é desenvolvedor móvel veterano, poderá encontrar dicas e truques para organizar o processo de desenvolvimento e tirar vantagem das funcionalidades únicas do Android. Se você é novo no desenvolvimento móvel, estes livros fornecerão tudo de que você precisa para realizar uma transição transparente do desenvolvimento de software tradicional para o desenvolvimento móvel – especificamente, sua plataforma mais promissora: o Android. Quem deve ler este livro Este livro inclui dicas para o desenvolvimento móvel de sucesso com base em nossos anos na indústria móvel, e cobre tudo o que você precisa saber para levar um projeto Android de sucesso, do conceito à finalização. Nós cobrimos como o processo de software móvel difere do desenvolvimento de software tradicional, incluindo truques para poupar tempo valioso e as armadilhas a evitar. Independente do tamanho de seu projeto, este livro é para você. Este livro foi escrito para várias públicos: ѩ ѩ Desenvolvedores de software que querem aprender a desenvolver aplicativos Android profissionais. A massa deste livro é destinada aos desenvolvedores de software com experiência em Java que não necessariamente têm experiência no desenvolvimento móvel. Desenvolvedores mais maduros de aplicativos móveis podem aprender a tirar vantagem do Android e de como ele difere de outras tecnologias do mercado atual de desenvolvimento móvel; Pessoal de controle de qualidade com a tarefa de testar aplicativos Android. Sejam eles de teste interno ou externo, os engenheiros de controle de qualidade podem achar este livro valioso. Nós dedicamos vários capítulos às questões de CQ móvel, incluindo tópicos tais como o desenvolvimento de sólidos planos de teste e de sistemas de rastreamento de defeitos para aplicativos móveis, como gerenciar aparelhos, e como testar aplicativos exaustivamente, usando todas as ferramentas Android disponíveis; VI Desenvolvimento de Aplicativos Wireless para Android ѩ ѩ Gerentes de projeto planejando e gerenciando equipes de desenvolvimento Android. Os gerentes podem usar este livro para ajudar a planejar, contratar e executar projetos Android do começo ao fim. Nós cobrimos o gerenciamento de riscos de projeto e como manter os projetos Android rodando sem problemas; Outros públicos. Este livro é útil não só para o desenvolvedor de software, mas também para a empresa em busca de potenciais aplicativos de mercado vertical, para o empreendedor que está pensando num aplicativo bacana para celular, e para quem procura alguma diversão com seu novo celular. Empresas procurando avaliar o Android para suas necessidades específicas (incluindo análise de viabilidade) também podem achar valiosa a informação fornecida. Qualquer pessoa com um aparelho Android e uma boa ideia para um aplicativo móvel pode pôr em uso a informação fornecida neste livro para diversão e ganho. Questões chaves respondidas neste volume Este volume do livro responde as seguintes questões: 1. Que é o Android? Como as versões do SDK diferem? 2. Como o Android é diferente de outras tecnologias móveis, e como os desenvolvedores podem tirar vantagem dessas diferenças? 3. Como os desenvolvedores usam o Ambiente de Desenvolvimento Eclipse para Java para desenvolver e depurar aplicativos Android no simulador e nos aparelhos? 4. Como os aplicativos Android são estruturados? 5. Como os desenvolvedores projetam interfaces de usuário robustas para móveis – especificamente para o Android? 6. Que capacidades o SDK do Android tem e como os desenvolvedores podem usá-las? 7. Como o processo de desenvolvimento móvel difere do desenvolvimento para desktop tradicional? 8. Que estratégias de desenvolvimento funcionam melhor para o desenvolvimento Android? 9. O que os gerentes, desenvolvedores e testadores precisa procurar, quando planejando, desenvolvendo e testando um aplicativo de desenvolvimento móvel? 10. Como as equipes móveis projetam aplicativos Android à prova de falhas para publicação? Introdução VII 11. Como as equipes móveis empacotam aplicativos Android para distribuição? 12. Como as equipes móveis ganham dinheiro com aplicativos Android? 13. E, por fim, o que há de novo nesta edição do livro? Como estes livros estão estruturados Nós escrevemos a primeira edição deste livro antes do SDK do Android ser liberado. Agora, três anos e 14 liberações do SDK do Android depois, há tanta coisa a falar que tivemos de dividir o conteúdo do Desenvolvimento de Aplicativos Wireless para o Android em dois volumes separados para esta terceira edição. O Desenvolvimento de Aplicativos Wireless para o Android Volume I: Fundamentos do Android foca nos fundamentos do Android, incluindo a configuração de seu ambiente de desenvolvimento, o entendimento do ciclo de vida do aplicativo, o design da interface de usuário, o desenvolvimento para diferentes tipos de dispositivos, e o processo do software móvel, do design e desenvolvimento até os testes e a publicação de aplicativos de nível comercial. O Android Wireless Application Development Volume II: Advanced Topics foca nos tópicos avançados, incluindo a exploração de várias APIs do Android para segmentação, rede, serviços baseados em localização, sensores de hardware, animação, gráficos, e outros mais. A cobertura dos componentes avançados dos aplicativos Android, tais como serviços, bases de dados de aplicativos, provedores de conteúdo e intenções, também está incluída. Os desenvolvedores aprendem a projetar componentes avançados de interface de usuário e integrar profundamente seus aplicativos na plataforma. Por fim, os desenvolvedores aprendem a estender seus aplicativos além dos limites tradicionais, usando funcionalidades opcionais da plataforma Android, incluindo o Android Native Development Kit (NDK), o serviço Cloud-To-Device Messaging (C2DM), as APIs In-Application Billing do Android Market, as APIs do Google Analytics, e outros mais. O Desenvolvimento de Aplicativos Wireless para o Android Volume I: Fundamentos do Android está dividido em seis partes. As quatro primeiras partes são primariamente de interesse dos desenvolvedores; a parte V fornece muitas informações úteis para gerentes de projeto e pessoal de controle de qualidade, bem como para desenvolvedores. A parte VI inclui vários apêndices úteis para ajudar você a ficar a par das ferramentas mais importantes do Android. Aqui está uma visão geral das várias partes deste livro: VIII Desenvolvimento de Aplicativos Wireless para Android ʘ Parte I: Visão Geral da Plataforma Android A parte I oferece uma introdução ao Android, explicando como ele difere de outras plataformas móveis. Você se familiarizará com o SDK do Android e suas ferramentas, instalará as ferramentas de desenvolvimento, e escreverá e rodará seu primeiro aplicativo Android – no simulador e num aparelho; ʘ Parte II: Fundamentos de aplicativos Android A parte II apresenta os princípios de design necessários para se escrever aplicativos Android. Você aprenderá como os aplicativos Android são estruturados e como incluir recursos, tais como strings, gráficos e componentes da interface de usuário em seus projetos; ʘ Parte III: Fundamentos de design de interfaces de usuário do Android A parte III mergulha mais fundo em como as interfaces de usuário são projetadas no Android. Você aprenderá sobre o elemento central da interface de usuário no Android: a View. Você também aprenderá sobre os controles mais comuns da interface de usuário fornecidos no SDK do Android; ʘ Parte IV: O essencial do design de aplicativos Android A parte IV cobre as funcionalidades usadas pela maioria dos aplicativos Android, incluindo o armazenamento persistente de dados de aplicativos usando preferências e o trabalho com arquivos, diretórios e provedores de conteúdo. Você também aprenderá a projetar aplicativos que rodarão sem problemas em muitos dispositivos Android diferentes; ʘ Parte V: Publicando e distribuindo aplicativos Android A parte V cobre o processo de desenvolvimento de software para móveis, do início ao fim, com dicas e truques para o gerentes de projetos, desenvolvedores de software, e pessoal de controle de qualidade; ʘ Parte VI: Apêndices A parte VI inclui dois guias úteis de iniciação rápida para as ferramentas de desenvolvimento Android – o simulador e o DDMS – bem como um apêndice de dicas e truques para o Eclipse. Visão geral das mudanças nesta edição Quando começamos a escrever a primeira edição deste livro, não havia dispositivos Android no mercado. Um dispositivo Android se tornou disponível Introdução IX logo depois que começamos a escrever, e ele só estava disponível nos Estados Unidos. Hoje, há centenas de dispositivos sendo lançados em todo o mundo – smartphones, tablets, leitores de e-books, e dispositivos especiais, tal como a Google TV. A plataforma Android passou por mudanças extensivas, desde que a primeira edição deste livro foi publicada. O SDK do Android tem muitas novas funcionalidades e as ferramentas de desenvolvimento receberam muitas atualizações muito necessárias. O Android, como tecnologia, agora está num sólido patamar, dentro do mercado móvel. Nesta nova edição, nós aproveitamos a oportunidade para fazer um sério exame do conteúdo do livro. Mas não se preocupe, ele ainda é o livro que os leitores adoraram da primeira (e segunda!) vez; ele só está maior, melhor e mais abrangente. Para cobrir mais dos empolgantes tópicos disponíveis para os desenvolvedores Android, nós tivemos de dividir o livro em dois volumes. Além de adicionar toneladas de conteúdo novo, nós refizemos os testes e atualizamos todo o conteúdo existente (texto e código de amostra) para uso com os SDKs do Android mais recentes disponíveis, mantendo, ao mesmo tempo, a compatibilidade retroativa. A comunidade de desenvolvimento Android é diversa, e nós objetivamos suportar todos os desenvolvedores, independente dos dispositivos para os quais eles estão desenvolvendo. Isso inclui desenvolvedores que precisam objetivar quase todas as plataformas, de forma que a cobertura em algumas áreas chaves de SDKs mais antigos continua a ser incluída, porque essa é, frequentemente, a opção mais razoável para compatibilidade. Aqui estão alguns dos destaques dos acréscimos e melhorias que fizemos nesta edição: ѩ ѩ ѩ ѩ ѩ ѩ Cobertura das melhores e mais recentes ferramentas e utilitários do Android; Atualizações a todos os capítulos existentes, frequentemente com algumas seções inteiramente novas; Novos capítulos, que cobrem novas funcionalidades do SDK ou que se expandem além daquelas cobertas em edições anteriores; Aplicativos e código de amostra atualizados, convenientemente organizados por capítulo; Tópicos como os arquivos de manifesto do Android, provedores de conteúdo, projeto de aplicativos, e testes, agora têm seus próprios capítulos; Cobertura de tópicos quentes, como a compatibilidade de aplicativos, o projeto para diferentes dispositivos, e o trabalho com componentes de interface de usuário relativamente novos, tais como os fragmentos; X Desenvolvimento de Aplicativos Wireless para Android ѩ Ainda mais dicas e truques de primeira, para ajudar você a projetar, desenvolver e testar aplicativos para diferentes dispositivos alvos, incluindo um capítulo totalmente novo sobre o tratamento de problemas de compatibilidade. Como você pode ver, nós cobrimos muitas das funcionalidades mais quentes e empolgantes que o Android tem a oferecer. Nós não pegamos leve nesta revisão; tocamos em cada capítulo existente, atualizamos conteúdo e adicionamos muitos capítulos novos, também. Por fim, incluímos muitos acréscimos, esclarecimentos e, sim, até algumas correções com base no feedback de nossos fantásticos (e meticulosos) leitores. Obrigado! Ambiente de desenvolvimento usado neste livro O código Android neste livro foi escrito usando os seguintes ambientes de desenvolvimento: 1. 2. 3. 4. 5. Windows 7 e Mac OS X 10.7.x; IDE Eclipse Java versão 3.7 (Indigo) e versão 3.6 (Helios); Complemento JDT para o Eclipse e and Web Tools Platform (WTP); Kit de desenvolvimento Java SE (JDK) 6 Update 26; SDK do Android versão 2.3.4, API nível 10 (Gingerbread MR1); SDK do Android versão 3.2, API nível 13 (Honeycomb MR2); SDK do Android versão 4.0, API nível 14 (Ice Cream Sandwich) 6. Complemento ADT para o Eclipse 15.0.0; 7. Ferramentas do SDK revisão 15. Dispositivos Android: Samsung Nexus S, HTC Evo 4G, Motorola Droid 3, Samsung Galaxy Tab 10.1, Motorola Xoom, Motorola Atrix 4G, e Sony Ericsson Xperia Play. A plataforma Android continua a crescer agressivamente na partilha do mercado, contra as plataformas móveis comcorrentes, tais como o Apple iOS e o BlackBerry. Novos e excitantes tipos de dispositivos chegam às mãos dos consumidores numa razão furiosa, com novas edições da plataforma Android aparecendo a todo o tempo. Os desenvolvedores não podem mais ignorar o Android como plataforma alvo, se quiserem alcançar os usuários de smartphone (ou de dispositivos inteligentes) de hoje e amanhã. A mais recente atualização maior da plataforma Android, o Android 4.0 Introdução XI – frequentemente chamado pelo seu codinome, Ice Cream Sandwich, ou simplesmente ICS – combina as edições de plataforma Android 2.3.x (Gingerbread) centrada no smartphone, e Android 3.x (Honeycomb) centrada no tablet, num único SDK para todos os dispositivos inteligentes, sejam eles celulares, tablets, televisores, ou torradeiras. Este livro apresenta o SDK e as ferramentas mais recentes disponíveis, mas não foca neles em detrimento de versões populares legadas da plataforma. Este livro tem por objetivo ser uma referência geral para ajudar os desenvolvedores a suportar todos os dispositivos populares no mercado, hoje. Quando da escrita deste livro, apenas uma porcentagem muito pequena (menos de 5%) dos dispositivos de usuários estavam rodando o Android 3.0 ou 4.0. É claro que alguns desses dispositivo receberão atualizações, e os usuários comprarão novos dispositivos Ice Cream Sandwich, à medida que eles se tornarem disponíveis, mas, por ora, os desenvolvedores precisam preencher este espaço e suportar numerosas versões do Android para chegarem à maioria dos usuário em campo. Então, o que isso significa para este livro? Significa que nós oferecemos tanto suporte a APIs legadas quanto discutimos algumas das APIs mais novas, disponíveis apenas em versões mais recentes do SDK do Android. Discutimos estratégias para suportar todos (ou, pelo menos, a maioria dos) usuários, em termos de compatibilidade. E fornecemos capturas de tela que destacam diferentes versões do SDK do Android, porque cada revisão maior trouxe consigo uma mudança no visual e uso da plataforma em geral. Dito isso, nós estamos considerando que você está baixando as ferramentas mais recentes do Android, de modo que fornecemos capturas de tela e passos que suportam as ferramentas mais recentes disponíveis, no momento desta escrita, não das ferramentas legadas. Estes são os limites que definimos, quando tentamos determinar o que incluir ou deixar de fora deste livro. Materiais suplementares disponíveis O código fonte que acompanha este livro está disponível para download no website do editor: www.informit.com/title/9780321813831. O código fonte também está disponível para download a partir do website de nosso livro: http://androidbook.blogspot.com/p/book-codedownloads.html (http://goo. gl/kyAsN). Você também encontrará vários tópicos do Android discutidos no website de nosso livro (http://androidbook.blogspot.com). Por exemplo, nós apresentamos feedback de leitores, questões, e outras informações. Você também pode encontrar links para nossos vários artigos técnicos no website de nosso livro. XII Desenvolvimento de Aplicativos Wireless para Android Onde encontrar maiores informações Há uma vibrante e útil comunidade de desenvolvedores Android, na Web. Aqui está uma série de websites úteis para os desenvolvedores Android e seguidores da indústria wireless: ѩ ѩ ѩ ѩ ѩ ѩ ѩ ѩ ѩ ѩ ѩ ѩ O website Android Developer: o site de referência do desenvolvedor e do SDK do Android: http://developer.android.com or http://d.android.com Stack Overflow: o website do Android com excelentes informações técnicas (completo com marcas) e um fórum de suporte oficial para desenvolvedores: http://stackoverflow.com/questions/tagged/android A Open Handset Alliance: fabricantes, operadoras e desenvolvedores Android: http://www.openhandsetalliance.com O Android Market: compre e venda aplicativos Android: http://www.android.com/market Mobiletuts+: tutoriais de desenvolvimento móvel, incluindo o Android: http://mobile.tutsplus.com/category/tutorials/android anddev.org: fórum de desenvolvedor Android: http://www.anddev.org Aplicativos Android da equipe do Google: aplicativos Android de código aberto: http://apps-for-android.googlecode.com Site de projeto de ferramentas Android: a equipe de ferramentas discute atualizações e mudanças: https://sites.google.com/a/android.com/tools/recent FierceDeveloper: um jornal semanal para desenvolvedores sem fios: http://www.fiercedeveloper.com Rede de desenvolvedores Wireless: notícias diárias sobre a indústria wireless: http://www.wirelessdevnet.com XDA-Developers Android Forum: do desenvolvimento em geral até ROMs: http://forum.xda-developers.com/forumdisplay.php?f=564 Developer.com: um site orientado pelo desenvolvedor com artigos móveis: http://www.developer.com Introdução XIII Convenções usadas neste livro Este livro usa as seguintes convenções: ѩ ѩ ѩ é usado para significar aos leitores que os autores querem dizer aos leitores que o código continuado aparece na mesma linha. Nenhuma indentação deve ser feita na linha continuada; Código ou termos de programação são apresentados em texto monoespaçado; Sentenças import Java, tratamento de exceção e verificação de erros são frequentemente removidas dos exemplos de código impresso, a bem da clareza e para manter o livro com uma extensão razoável. Este livro também apresenta informações nas seguintes barras laterais: Dica Notas oferecem informações adicionais que podem ser interessantes ou relevantes. Nota Notas oferecem informações adicionais que podem ser interessantes ou relevantes. Aviso Avisos oferecem dicas sobre armadilhas que podem ser encontradas e como evitá-las. Sumário Resumido I - Visão Geral da Plataforma Android .......................................... 1 Capítulo 1 - Apresentando o Android............................................................................... 3 Capítulo 2 - Configurando seu ambiente de desenvolvimento Android .............33 Capítulo 3 - Escrevendo seu primeiro aplicativo Android........................................51 Capítulo 4 - Dominando as ferramentas de desenvolvimento do Android ........ 81 II - Fundamentos de aplicativos Android ................................. 101 Capítulo 5 - Entendendo a anatomia de um aplicativo Android .......................... 103 Capítulo 6 - Definindo seu aplicativo usando o arquivo de manifesto do Android ................................................................................................................................. 123 Capítulo 7 - Gerenciando recursos do aplicativo...................................................... 147 III - Fundamentos de design de interfaces de usuário do Android ............................................................................................189 Capítulo 8 - Explorando os elementos de tela da interface de usuário ...............191 Capítulo 9 - Projetando interfaces de usuário com arranjos .................................225 Capítulo 10 - Trabalhando com fragmentos ...............................................................265 Capítulo 11 - Trabalhando com diálogos .................................................................... 289 IV - O essencial do design de aplicativos Android ................. 303 Capítulo 12 - Usando preferências do Android ........................................................ 305 Capítulo 13 - Trabalhando com arquivos e diretórios ............................................. 319 Capítulo 14 - Usando provedores de conteúdo..........................................................333 Capítulo 15 - Projetando aplicativos compatíveis .....................................................355 V - Publicando e distribuindo aplicativos Android ................ 381 Capítulo 16 - O processo de desenvolvimento de Software Android..................383 Capítulo 17- Projetando e desenvolvendo aplicativos Android à prova de falhas ....................................................................................................................................... 411 Capítulo 18 - Testando aplicativos Android................................................................ 431 Capítulo 19 - Publicando seu aplicativo Android ...................................................... 451 VI - Apêndices.................................................................................475 Apêndice A - Guia de iniciação rápida do simulador do Android .......................477 Apêndice B - Guia de iniciação rápida do DDMS do Android ............................ 503 Apêndice C - IDE Eclipse Tipos e Truques ................................................................ 519 Índice ..................................................................................................................................... 531 Sumário I Visão Geral da Plataforma Android Capítulo 1 - Apresentando o Android ...................... 3 Breve história do desenvolvimento de software móvel..................................3 Tempos atrás .....................................................................................................................................3 “O tijolo”.............................................................................................................................................5 O Protocolo de Aplicativos Sem-Fios (WAP) ..........................................................................7 Plataformas Móveis Proprietárias ............................................................................................. 9 A Open Handset Alliance ....................................................................................12 Google se torna sem-fios.............................................................................................................12 Formando a Open Handset Alliance ........................................................................................12 Fabricantes: projetando dispositivos Android ......................................................................13 Operadoras móveis: oferecendo a experiência Android ....................................................15 Aplicativos impulsionam vendas de dispositivos: desenvolvendo aplicativos Android ............................................................................................................................................15 Tirando vantagem de tudo o que o Android tem para oferecer ......................................16 O mercado Android: onde estamos, agora .............................................................................16 Diferenças entre plataformas Android ............................................................18 Android: uma plataforma da próxima geração .....................................................................18 Gratuito e de Código Aberto .....................................................................................................19 Ferramentas de desenvolvimento familiares e baratas .......................................................19 Kit de desenvolvimento de software disponível gratuitamente......................................20 Linguagem familiar, ambientes de desenvolvimento familiares.....................................20 Curva de aprendizado razoável para desenvolvedores .....................................................20 Habilitando o desenvolvimento de aplicativos poderosos ...............................................20 XVIII Desenvolvimento de Aplicativos Wireless para Android Integração rica e segura de aplicativos ....................................................................................21 Nenhum obstáculo caro à publicação ......................................................................................21 Um “mercado livre” para aplicativos ...................................................................................... 22 Uma plataforma em crescimento ............................................................................................. 23 A plataforma Android..........................................................................................24 A arquitetura subjacente ao Android ...................................................................................... 25 O Sistema Operacional Linux................................................................................................... 26 Ambiente de tempo de execução de aplicativos Android ................................................. 26 Segurança e permissões .............................................................................................................. 26 Aplicativos como usuários do sistema operacional ............................................................ 26 Permissões de aplicativos explicitamente definidas ........................................................... 26 Permissões ad-hoc limitadas ..................................................................................................... 27 Assinatura de aplicativos para relacionamentos de confiança ........................................ 27 Registro do desenvolvedor no mercado................................................................................. 28 Desenvolvendo aplicativos Android ....................................................................................... 28 Opções de linguagem de programação Android ................................................................. 28 Nenhuma distinção feita entre aplicativos nativos e de terceiros .................................. 29 Pacotes comumente usados ....................................................................................................... 29 Estrutura do Aplicativo Android .............................................................................................30 Serviços da Plataforma Android ..............................................................................................30 Resumo ...................................................................................................................31 Referências e mais informações ................................................................................................ 31 Capítulo 2 - Configurando seu ambiente de desenvolvimento Android .................................................. 33 Configurando seu ambiente de desenvolvimento .........................................33 Configurando seu sistema operacional para depuração de dispositivos...................... 36 Configurando seu hardware Android para depuração...................................................... 36 Atualizando o SDK do Android ............................................................................................... 38 Problemas com o Kit de Desenvolvimento de Software Android.................................. 38 Explorando o SDK do Android ..........................................................................39 Entendendo o acordo de licença do SDK do Android ....................................................... 39 Lendo a documentação do SDK do Android........................................................................40 Explorando a estrutura central dos aplicativos Android ..................................................40 Explorando as ferramentas centrais do Android ................................................................44 O Eclipse e o complemento ADT ............................................................................................44 Sumário XIX O SDK do Android e os AVD Managers (controladores de AVD) .................................. 45 O simulador do Android ............................................................................................................ 47 Explorando os aplicativos Android de amostra...................................................................48 Resumo .................................................................................................................. 50 Referências e maiores informações .........................................................................................50 Capítulo 3 - Escrevendo seu primeiro aplicativo Android .........................................................................51 Testando seu ambiente de desenvolvimento................................................... 51 Criando um Dispositivo Android Virtual (AVD) para seu projeto Snake .................... 54 Criando uma configuração de inicialização para seu projeto Snake ............................. 56 Rodando o aplicativo Snake no Android Emulator ............................................................ 57 Construindo seu primeiro aplicativo Android ..............................................59 Criando e configurando um novo projeto Android ...........................................................60 Arquivos e diretórios centrais do aplicativo Android........................................................ 62 Criando um AVD para seu projeto .......................................................................................... 63 Criando uma configuração de iniciação para seu projeto ................................................64 Rodando seu aplicativo Android no simulador ................................................................... 65 Depurando seu aplicativo Android no simulador............................................................... 67 Adicionando suporte a registro a seu aplicativo Android ................................................70 Adicionando algum suporte a meios ao seu aplicativo ...................................................... 72 Adicionando serviços baseados em localização a seu aplicativo..................................... 75 Configurando a localização do simulador ............................................................................ 75 Encontrando a última localização conhecida....................................................................... 76 Depurando seu aplicativo no Hardware ................................................................................ 77 Resumo ...................................................................................................................79 Referências e maiores informações ......................................................................................... 79 Capítulo 4 - Dominando as ferramentas de desenvolvimento do Android ...................................81 Usando a documentação do Android ................................................................81 Explorando o simulador do Android .............................................................. 84 Visualizando dados registrados pelo aplicativo com o LogCat ...................85 XX Desenvolvimento de Aplicativos Wireless para Android Depurando aplicativos com o DDMS ...............................................................85 Usando o Android Debug Bridge (ADB) .......................................................... 86 Usando os editores de recursos e o UI Designer.............................................87 Usando o visualizador de hierarquia do Android ......................................... 89 Iniciando o Hierarchy Viewer ..................................................................................................90 Trabalhando no modo Layout View Mode ............................................................................91 Otimizando sua interface de usuário...................................................................................... 92 Trabalhando no modo Pixel Perfect ........................................................................................ 93 Trabalhando com gráficos esticáveis Nine-Patch ......................................... 94 Trabalhando com outras ferramentas do Android........................................97 Resumo .................................................................................................................. 98 Referências e maiores informações .........................................................................................98 II Fundamentos de aplicativos Android Capítulo 5 - Entendendo a anatomia de um aplicativo Android ...............................................................103 Dominando a importante terminologia do Android ..................................103 Usando o contexto do aplicativo ......................................................................105 Recuperando o contexto do aplicativo ................................................................................. 105 Usando o Contexto do aplicativo .......................................................................................... 105 Recuperando recursos do aplicativo ..................................................................................... 106 Acessando preferências do aplicativo ................................................................................... 106 Acessando arquivos e diretórios do aplicativo ................................................................... 106 Recuperando bens do aplicativo ............................................................................................ 106 Realizando tarefas do aplicativo com atividades .........................................106 O ciclo de vida de uma atividade do Android ...............................................107 Sumário XXI Usando rechamadas da Activity para gerenciar o estado e os recursos do aplicativo .... 108 Evitando que atividades sejam mortas ................................................................................... 111 Organizando componentes de atividades com fragmentos........................113 Gerenciando transições de atividades com intenções .................................115 Transitando entre atividades com intenções ....................................................................... 115 Organizando a navegação do aplicativo com atividades e intenções ........................... 118 Trabalhando com serviços ................................................................................ 119 Recebendo e difundindo intenções .................................................................120 Resumo ................................................................................................................. 121 Referências e maiores informações ........................................................................................122 Capítulo 6 - Definindo seu aplicativo usando o arquivo de manifesto do Android .........................123 Configurando aplicativos Android usando o arquivo de manifesto do Android .................................................................................................................123 Editando o arquivo de manifesto do Android.................................................................... 124 Gerenciando a identidade de seu aplicativo ..................................................129 Aplicando versão a seu aplicativo .......................................................................................... 129 Ajustando o nome e o ícone do aplicativo........................................................................... 130 Impondo requisitos de sistema do aplicativo ................................................131 Objetivando versões específicas do SDK .............................................................................. 131 Impondo requisitos de plataforma do aplicativo ...............................................................135 Trabalhando com bibliotecas externas ..................................................................................137 Outros ajustes e filtros de configuração do aplicativo......................................................138 Registrando atividades no manifesto do Android .......................................138 Designando uma atividade de ponto de entrada primário para seu aplicativo usando um filtro de intenção ...................................................................................................139 Configurando outros filtros de intenção ..............................................................................139 Registrando outros componentes do aplicativo ................................................................. 141 Trabalhando com permissões .......................................................................... 141 Registando as permissões de que seu aplicativo precisa .................................................. 141 Registrando permissões que seu aplicativo impõe ............................................................143 Explorando outros ajustes do arquivo de manifesto ........................................................ 144 XXII Desenvolvimento de Aplicativos Wireless para Android Resumo .................................................................................................................144 Referências e maiores informações ........................................................................................145 Capítulo 7 - Gerenciando recursos do aplicativo ....................................................................147 Que são recursos?................................................................................................147 Armazenando recursos do aplicativo ................................................................................... 148 Tipos de valor de recursos ....................................................................................................... 149 Armazenando gráficos e arquivos ..........................................................................................152 Armazenando outros tipos de recursos ................................................................................152 Entendendo como os recursos são resolvidos ....................................................................152 Acessando recursos programaticamente ..............................................................................153 Ajustando valores simples de recursos usando o Eclipse ...........................154 Trabalhando com diferentes tipos de recursos ............................................158 Trabalhando com recursos String ..........................................................................................158 Strings em negrito, itálico e sublinhadas ..............................................................................159 Usando recursos String programaticamente...................................................................... 160 Trabalhando com matrizes de String.................................................................................... 162 Trabalhando com recursos booleanos ...................................................................................163 Definindo recursos booleanos em XML...............................................................................163 Usando recursos booleanos programaticamente ...............................................................163 Trabalhando com recursos inteiros........................................................................................163 Definindo recursos inteiros em XML .................................................................................. 164 Usando recursos inteiros programaticamente ................................................................... 164 Trabalhando com cores............................................................................................................. 164 Definindo recursos de cor em XML ......................................................................................165 Usando recursos de cor programaticamente.......................................................................165 Trabalhando com dimensões ...................................................................................................165 Definindo recursos de dimensões em XML ........................................................................165 Usando recursos de dimensão programaticamente ..........................................................167 Trabalhando com desenháveis simples .................................................................................167 Definindo recursos desenháveis simples em XML ............................................................167 Usando recursos desenháveis simples programaticamente ........................................... 168 Trabalhando com imagens ....................................................................................................... 169 Trabalhando com gráficos esticáveis Nine-Patch ............................................................. 170 Usando recursos de imagem programaticamente............................................................. 170 Trabalhando com animações ...................................................................................................172 Sumário XXIII Trabalhando com menus ...........................................................................................................174 Trabalhando com arquivos XML ............................................................................................176 Trabalhando com arquivos crus ..............................................................................................177 Referências a recursos ................................................................................................................178 Trabalhando com arranjos ...............................................................................180 Referenciando recursos do sistema ................................................................185 Resumo .................................................................................................................187 Referências e maiores informações ........................................................................................187 III Fundamentos de design de interfaces de usuário do Android Capítulo 8 - Explorando os elementos de tela da interface de usuário.................................................. 191 Apresentando as vistas e os arranjos do Android ........................................ 191 Apresentando a View do Android .......................................................................................... 191 Apresentando os controles do Android ............................................................................... 192 Apresentando o arranjo do Android ..................................................................................... 192 Exibindo texto para os usuários com a TextView ........................................193 Configurando arranjo e tamanhos ........................................................................................ 194 Criando links contextuais no texto ........................................................................................195 Recuperando dados do usuário com EditText .............................................. 197 Recuperando entrada de texto usando controles EditText .............................................197 Restringindo a entrada do usuário com filtros de entrada ............................................. 199 Ajudando o usuário com autocompletamento ............................................200 Oferecendo opções ao usuário com controles Spinner ............................. 203 Permitindo seleções simples do usuário com botões, caixas de verificação, XXIV Desenvolvimento de Aplicativos Wireless para Android chaves e grupos de rádio.......................................................................................................... 204 Usando botões básicos ..............................................................................................................205 Usando os controles CheckBox e ToggleButton ...............................................................207 Usando RadioGroup e RadioButton .................................................................................... 209 Recebendo datas e horas do usuário ......................................................................................212 Usando indicadores para exibir dados ao usuário .............................................................215 Indicando progresso com ProgressBar .................................................................................215 Ajustando o progresso com SeekBar .....................................................................................217 Exibindo dados de avaliação com a RatingBar .................................................................. 218 Mostrando a passagem do tempo com o Chronometer ................................................. 220 Exibindo a hora ............................................................................................................................221 Usando o DigitalClock ...............................................................................................................221 Usando o AnalogClock ..............................................................................................................221 Resumo ................................................................................................................ 222 Referências e maiores informações .......................................................................................222 Capítulo 9 - Projetando interfaces de usuário com arranjos ...................................................................... 225 Criando interfaces de usuário no Android .................................................. 225 Criando arranjos com recursos XML...................................................................................226 Criando arranjos programaticamente ..................................................................................227 Organizando sua interface de usuário .......................................................... 230 Usando subclasses de ViewGroup para projeto de arranjo .............................................231 Usando subclasses de ViewGroup como contentores de View......................................231 Usando classes de arranjo embutidas ............................................................ 232 Usando FrameLayout ................................................................................................................234 Usando LinearLayout ................................................................................................................ 237 Usando RelativeLayout .............................................................................................................239 Usando TableLayout ..................................................................................................................243 Usando GridLayout ...................................................................................................................246 Usando múltiplos arranjos numa tela...................................................................................250 Usando classes de controles contentores .......................................................251 Usando contentores dirigidos por dados .............................................................................251 Organizando telas com abas.................................................................................................... 257 Adicionando suporte a rolagem ............................................................................................. 261 Explorando outros contentores de vistas ............................................................................262 Sumário XXV Resumo ................................................................................................................ 262 Referências e maiores informações .......................................................................................263 Capítulo 10 - Trabalhando com fragmentos....... 265 Entendendo os fragmentos .............................................................................. 265 Entendendo o ciclo de vida dos fragmentos .......................................................................267 Trabalhando com tipos especiais de fragmentos...............................................................270 Projetando aplicativos baseados em fragmentos................................................................271 Usando o Android Support Package .............................................................. 283 Adicionando suporte a fragmentos a aplicativos legados ...............................................283 Usando fragmentos em novos aplicativos objetivando plataformas mais antigas...284 Resumo ................................................................................................................ 286 Referências e maiores informações .......................................................................................286 Capítulo 11 - Trabalhando com diálogos ............ 289 Escolhendo a implementação de seu diálogo ............................................... 289 Explorando os diferentes tipos de diálogo ....................................................291 Trabalhando com diálogos: o método legado ............................................... 292 Traçando o ciclo de vida de um diálogo...............................................................................292 Trabalhando com diálogos personalizados .........................................................................296 Trabalhando com diálogos: o método com fragmentos............................. 296 Resumo ................................................................................................................300 Referências e maiores informações ....................................................................................... 301 IV O essencial do design de aplicativos Android XXVI Desenvolvimento de Aplicativos Wireless para Android Capítulo 12 - Usando preferências do Android.. 305 Trabalhando com preferências de aplicativo ............................................... 305 Determinando quando preferências são apropriadas ......................................................305 Armazenando diferentes tipos de valores de preferências .............................................306 Criando preferências privadas para uso por uma única atividade ...............................306 Criando preferências compartilhadas para uso por múltiplas atividades..................307 Procurando e lendo preferências .......................................................................................... 308 Adicionando, atualizando e excluindo preferências........................................................ 308 Reagindo a alterações de preferências .................................................................................. 310 Encontrando dados de preferências no sistema de arquivos do Android................... 311 Criando preferências de usuário gerenciáveis .............................................312 Criando um arquivo de recursos de preferências ..............................................................312 Usando a classe PreferenceActivity ........................................................................................315 Resumo .................................................................................................................317 Referências e maiores informações ........................................................................................318 Capítulo 13 - Trabalhando com arquivos e diretórios ....................................................................319 Trabalhando com dados do aplicativo no dispositivo .................................319 Praticando um bom gerenciamento de arquivos ........................................ 320 Entendendo as permissões de arquivo do Android .....................................321 Trabalhando com arquivos e diretórios ........................................................ 322 Explorando os diretórios de aplicativos Android .............................................................323 Trabalhando com outros diretórios e arquivos no sistema de arquivos do Android .........................................................................................................................................328 Resumo .................................................................................................................331 Referências e maiores informações ........................................................................................331 Capítulo 14 - Usando provedores de conteúdo .. 333 Explorando provedores de conteúdo do Android........................................333 Usando o provedor de conteúdo MediaStore .................................................................... 335 Usando o provedor de conteúdo CallLog ........................................................................... 337 Usando o provedor de conteúdo Browser ..........................................................................339 Sumário XXVII Usando o provedor de conteúdo CalendarContract .........................................................341 Usando o provedor de conteúdo UserDictionary .............................................................342 Usando o provedor de conteúdo VoicemailContract ......................................................342 Usando o provedor de conteúdo Settings ...........................................................................342 Usando o provedor de conteúdo Contacts .........................................................................342 Trabalhando com o provedor de conteúdo legado Contacts .........................................343 Modificando dados dos provedores de conteúdo ........................................ 349 Adicionando registros ...............................................................................................................349 Atualizando registros .................................................................................................................351 Excluindo registros .....................................................................................................................351 Usando provedores de conteúdo de terceiros ...............................................352 Resumo .................................................................................................................353 Referências e maiores informações ....................................................................................... 353 Capítulo 15 - Projetando aplicativos compatíveis ............................................................... 355 Maximizando a compatibilidade dos aplicativos .........................................355 Projetando interfaces de usuário para compatibilidade ........................... 358 Trabalhando com fragmentos .................................................................................................359 Explorando o Android Support Package .............................................................................360 Suportando tipos específicos de tela .....................................................................................360 Trabalhando com gráficos esticáveis Nine-Patch ..............................................................361 Usando o princípio do quadrado funcional ........................................................................362 Fornecendo recursos alternativos do aplicativo ......................................... 363 Entendendo como os recursos são resolvidos ...................................................................363 Organizando recursos alternativos com qualificadores..................................................365 Fornecendo recursos para diferentes orientações ............................................................ 373 Usando recursos alternativos programaticamente ........................................................... 373 Organizando recursos do aplicativo eficientemente .......................................................374 Projetando para Tablets, TVs e outros dispositivos novos ............................................. 375 Projetando para dispositivos Tablet ...................................................................................... 375 Projetando para dispositivos de TV Google ....................................................................... 377 Resumo .................................................................................................................379 Referências e maiores informações .......................................................................................379 XXVIII Desenvolvimento de Aplicativos Wireless para Android V Publicando e distribuindo aplicativos Android Capítulo 16 - O processo de desenvolvimento de Software Android ................................................... 383 Visão geral do processo de desenvolvimento móvel .................................. 383 Escolhendo uma metodologia de software ................................................... 384 Entendendo os perigos de abordagens em cascata ...........................................................384 Entendendo o valor da iteração .............................................................................................385 Coletando requisitos do aplicativo................................................................. 385 Determinando os requisitos do projeto ...............................................................................385 Desenvolvendo casos de uso para aplicativos móveis......................................................388 Incorporando requisitos de terceiros ...................................................................................389 Gerenciando uma base de dados de dispositivos ..............................................................389 Avaliando os riscos do projeto ........................................................................ 394 Identificando dispositivos alvos .............................................................................................394 Adquirindo dispositivos alvos ................................................................................................396 Determinando a viabilidade dos requisitos do aplicativo...............................................397 Entendendo os riscos do controle de qualidade ................................................................398 Escrevendo a documentação essencial do projeto ...................................... 399 Desenvolvendo planos de teste para fins de controle de qualidade ............................ 400 Fornecendo documentação exigida por terceiros ............................................................. 401 Fornecendo documentação para manutenção e portada ................................................ 401 Explorando os sistemas de gerenciamento de configuração .....................401 Escolhendo um sistema de controle de fontes ................................................................... 401 Implementando um sistema de versões de aplicativo que funcione ........................... 402 Desenvolvendo aplicativos móveis ................................................................ 406 Testando aplicativos móveis ............................................................................ 407 Sumário XXIX Distribuindo aplicativos móveis .................................................................... 407 Determinando os mercados alvos......................................................................................... 408 Suportando e mantendo aplicativos móveis ................................................ 408 Acompanhar e atender a falhas reportadas por usuários ............................................... 409 Testar atualizações de firmware ............................................................................................ 409 Manter uma adequada documentação do aplicativo....................................................... 409 Gerenciar mudanças ativas no servidor.............................................................................. 409 Identificar oportunidades de portada de baixo risco ....................................................... 410 Resumo .................................................................................................................410 Capítulo 17 - Projetando e desenvolvendo aplicativos Android à prova de falhas ................................ 411 Melhores práticas no projeto de aplicativos móveis à prova de falhas.... 411 Atendendo às exigências dos usuários móveis ................................................................... 412 Projetando interfaces de usuário para dispositivos móveis ........................................... 412 Projetando aplicativos móveis estáveis e responsivos ..................................................... 414 Projetando aplicativos móveis seguros ................................................................................ 416 Projetando aplicativos móveis para máximo lucro............................................................417 Explorando padrões de qualidade de terceiros .................................................................. 418 Projetando aplicativos móveis para facilidade de manutenção e atualização ........... 419 Explorando diagnósticos de aplicativos............................................................................... 419 Explorando ferramentas do Android para design de aplicativos ................................. 421 Evitando erros tolos no design de aplicativos Android ............................. 422 Melhores práticas no desenvolvimento de aplicativos móveis à prova de falhas .........................................................................................................422 Projetando um processo de desenvolvimento que funcione para o desenvolvimento móvel ............................................................................................................423 Testar a viabilidade de seu aplicativo antecipada e frequentemente ...........................423 Usando padrões de codificação, revisões e testes de unidade para melhorar a qualidade do código ...................................................................................................................424 Tratando defeitos que ocorrem num único dispositivo ..................................................427 Explorando ferramentas do Android para desenvolvimento ........................................428 Resumo ................................................................................................................ 429 Referências e maiores informações .......................................................................................429 XXX Desenvolvimento de Aplicativos Wireless para Android Capítulo 18 - Testando aplicativos Android ........431 Melhores práticas no teste de aplicativos móveis ........................................431 Projetando um sistema de rastreamento de defeitos em aplicativos móveis ............431 Gerenciando o ambiente de testes .........................................................................................433 Maximizando a cobertura dos testes ....................................................................................437 Explorando ferramentas do Android para teste de aplicativos Android....................447 Evitando erros tolos no teste de aplicativos Android ......................................................448 Resumo ................................................................................................................ 448 Capítulo 19 - Publicando seu aplicativo Android .......................................................................451 Escolhendo o modelo certo de distribuição ..................................................451 Protegendo sua propriedade intelectual ..............................................................................452 Cobrando ao usuário .................................................................................................................453 Empacotando seu aplicativo para publicação ....................................................................455 Preparando seu código para empacotamento ....................................................................455 Preparando o pacote de seu aplicativo para o Android Market....................................457 Empacotando e assinando seu aplicativo ............................................................................458 Testando a versão de liberação do pacote de seu aplicativo ........................................... 461 Distribuindo seu aplicativo...................................................................................................... 461 Publicando no Android Market .......................................................................461 Subscrevendo-se para uma conta de desenvolvedor no Android Market .................462 Transferindo seu aplicativo para o Android Market ........................................................464 Transferindo recursos de marketing do aplicativo ...........................................................465 Configurando detalhes da listagem do aplicativo .............................................................465 Configurando as opções de publicação do aplicativo ......................................................467 Configurando informações de contato e consentimento do aplicativo .....................468 Publicando seu aplicativo no Android Market ..................................................................469 Gerenciando seu aplicativo no Android Market ...............................................................469 Publicando com outras alternativas .............................................................. 470 Publicando seu aplicativo por conta própria......................................................................472 Resumo .................................................................................................................473 Referências e maiores informações .......................................................................................473 Sumário XXXI VI Apêndices Apêndice A - Guia de iniciação rápida do simulador do Android ......................................................... 477 Simulando a realidade: a finalidade do simulador ......................................477 Trabalhando com Dispositivos Android Virtuais (AVDs) ......................... 480 Usando o Android Virtual Device Manager ....................................................................... 481 Criando um AVD ........................................................................................................................482 Iniciando o simulador com um AVD específico .......................................... 487 Iniciando um simulador para rodar um aplicativo ...........................................................488 Iniciando um simulador a partir do Android Virtual Device Manager...................... 491 Configurando a localização de GPS do simulador .......................................491 Fazendo chamadas entre duas instâncias do simulador ............................ 493 Enviando mensagens entre duas instâncias de simulador........................ 494 Interagindo com o simulador através do console ....................................... 495 Usando o console para simular o recebimento de chamadas ........................................496 Usando o console para enviar coordenadas de GPS ........................................................498 Usando o console para monitorar o status da rede ..........................................................498 Usando o console para manipular os ajustes de alimentação ........................................498 Usando outros comandos do console ...................................................................................499 Curtindo o simulador .......................................................................................500 Entendendo as limitações do simulador ........................................................501 Referências e maiores informações ....................................................................................... 501 Apêndice B - Guia de iniciação rápida do DDMS do Android ................................................................503 Usando o DDMS com o Eclipse e como aplicativo isolado........................ 503 XXXII Desenvolvimento de Aplicativos Wireless para Android Preparando-se para usar funcionalidades chaves do DDMS .................... 505 Trabalhando com processos, segmentos e a área de alocação dinâmica 505 Anexando um depurador a um aplicativo Android ..........................................................506 Interrompendo um processo...................................................................................................506 Monitorando a atividade da área de alocação ....................................................................507 Solicitando a coleta de lixo ......................................................................................................509 Criando e usando um arquivo HPROF ................................................................................509 Usando o rastreador de alocação .....................................................................510 Trabalhando com o File Explorer ........................................................................................... 511 Navegando no sistema de arquivos de um simulador ou dispositivo ..........................512 Copiando arquivos do simulador ou dispositivo ...............................................................513 Copiando arquivos para o simulador ou dispositivo ........................................................514 Excluindo arquivos no simulador ou dispositivo...............................................................514 Trabalhando com o controle do simulador .........................................................................515 Simulando o recebimento de chamadas de voz ..................................................................515 Simulando o recebimento de mensagens SMS ...................................................................515 Enviando uma localização ........................................................................................................516 Fazendo capturas de tela do simulador e do dispositivo..................................................516 Trabalhando com registros de aplicativos ............................................................................517 Apêndice C - Eclipse IDE Tips and Tricks ...........519 Organizando seu espaço de trabalho do Eclipse...........................................519 Integrando com serviços de controle de fonte....................................................................519 Reposicionando abas dentro de perspectivas .....................................................................520 Maximizando janelas..................................................................................................................521 Minimizando janelas ..................................................................................................................521 Visualizando janelas lado a lado ..............................................................................................521 Visualizando duas seções do mesmo arquivo......................................................................521 Fechando abas indesejadas........................................................................................................521 Mantendo as janelas sob controle..........................................................................................522 Criando filtros de registro personalizados .........................................................................522 Procurando em seu projeto ..................................................................................................... 523 Organizando tarefas do Eclipse ............................................................................................. 523 Escrevendo código em Java .............................................................................. 524 Usando autocompletamento ...................................................................................................524 Organizando Imports................................................................................................................ 525 Sumário XXXIII Formatando código.............................................................................................525 Renomeando quase tudo .................................................................................. 526 Refazendo código ............................................................................................... 526 Reorganizando o código ................................................................................... 528 Usando o QuickFix ............................................................................................ 528 Fornecendo documentação no estilo Javadoc .............................................. 529 Resolvendo erros misteriosos de construção .............................................. 529 Índice ...........................................................................531 I Visão Geral da Plataforma Android 1. Apresentando o Android 2. Configurando seu ambiente de desenvolvimento Android 3. Escrevendo seu primeiro aplicativo Android 4. Dominando as ferramentas de desenvolvimento Android Capítulo 1 Apresentando o Android A comunidade de desenvolvimento móvel está num ponto de estabilização. Os usuários móveis exigem mais opções, mais oportunidades de personalizar seus dispositivos, e mais funcionalidades. As operadoras móveis querem fornecer conteúdo com valor agregado a seus assinantes de uma forma gerenciável e lucrativa. Os desenvolvedores móveis querem a liberdade de desenvolver os poderosos aplicativos móveis que os usuários exigem, com o mínimo de obstáculos para o sucesso. Por fim, os fabricantes de celulares querem uma plataforma estável, segura e acessível para impulsionar seus dispositivos. O Android surgiu como uma plataforma de virada de mesa para a comunidade de desenvolvimento móvel. Sendo uma plataforma inovadora e aberta, o Android está bem posicionado para atender às crescentes necessidades do mercado móvel, uma vez que ele continua a se expandir para além dos primeiros a adotar e comprar os sofisticados dispositivos inteligentes. Este capítulo explica o que é o Android, como e por que ele foi desenvolvido, e onde a plataforma se encaixa no bem estabelecido mercado móvel. A primeira metade deste capítulo foca a história, e a segunda se concentra em como a plataforma Android funciona. Breve história do desenvolvimento de software móvel Para entender o que torna o Android tão convincente, nós devemos examinar como o desenvolvimento móvel evoluiu e como o Android difere das plataformas concorrentes. Tempos atrás Você lembra de quando um telefone era apenas um telefone? De quando dependíamos de telefones fixos? De quando corríamos para o telefone, em vez de tirá-lo do bolso? De quando perdíamos nossos amigos num jogo de bola lotado e ficávamos horas esperando para nos reunirmos? De quando esquecíamos da 4 Desenvolvimento de Aplicativos Wireless para Android lista de compras (veja a figura 1.1) e tínhamos que encontrar um orelhão ou voltar novamente em casa para pegá-la? Esses dias vão longe. Hoje, problemas comuns como esses são facilmente resolvidos com uma discagem rápida de um botão ou uma mensagem de texto simples, como “kd vc?” Ou “20?” Ou “Leite e...?” Nossos celulares nos mantêm seguros e conectados. Agora, nós vagamos livremente, contando com nossos celulares não só para nos manter em contato com amigos, familiares e colegas de trabalho, mas também para nos dizer aonde ir, o que fazer e como fazê-lo. Mesmo os eventos mais domésticos parecem envolver meu celular, hoje em dia. Figura 1.1 Os celulares se tornaram um acessório de compras crucial. Considere a seguinte história real, que foi ligeiramente reforçada para dar um efeito: Certa vez, numa noite quente de verão, eu estava alegremente falando com meus botões e cuidando do jantar, na minha nova casa, na zona rural de New Hampshire, quando um morcego voou sobre minha cabeça, matandome de susto. A primeira coisa que fiz – enquanto me abaixava – foi pegar o celular e mandar uma mensagem de texto para meu marido, que estava do outro lado do país, na época. Eu digitei: “Há um morcego em casa!” Meu marido não respondeu de imediatato (um incidente digno de um divórcio, pensei na época), então eu liguei para meu pai e lhe pedi sugestões sobre como me livrar do morcego. Ele simplesmente riu. Irritada, eu tirei uma foto do morcego com meu celular a enviei para meu marido e meu blog, simultaneamente deixando-o com um sentimento de culpa e informando o mundo a respeito de meu traiçoeiro encontro com a vida selvagem doméstica. Por fim, eu procurei no Google “livrar-se de morcego” e depois segui as Capítulo 1 - Apresentando o Android 5 úteis instruções de faça-você-mesmo fornecidas na Web para pessoas na minha situação. Aprendi também que o final de agosto é quando os bebês morcegos frequentemente deixam o ninho pela primeira vez e aprendem a voar. Recéminformada de ter um bebê morcego em minhas mãos, eu calmamente peguei uma vassoura e consegui pôr o morcego pra fora de casa. Problema resolvido – e fiz tudo isso com a ajuda do meu celular de confiança, o velho LG VX9800. Meu ponto, aqui? Os dispositivos móveis de hoje não são chamados smartphones à toa. Eles podem resolver qualquer coisa – e nós contamos com eles para tudo, hoje em dia. Perceba que eu usei meia dúzia de diferentes aplicativos móveis, ao longo desta história. Cada aplicativo foi desenvolvido por uma empresa diferente e tinha uma interface de usuário diferente. Alguns foram bem projetados; outros nem tanto. Eu paguei por alguns deles, e outros já vieram com o celular. Como usuário, eu achei a experiência funcional, mas não terrivelmente inspiradora. Como desenvolvedor móvel, eu queria uma oportunidade para criar um aplicativo mais uniforme e poderoso, que pudesse cuidar de tudo o que eu fiz e muito mais. Eu queria construir uma melhor armadilha de morcegos, se você quisesse. Antes do Android, os desenvolvedores móveis enfrentavam muitos obstáculos, quando se tratava de escrever aplicativos. Construir o melhor aplicativo, o aplicativo único, o aplicativo da concorrência, o aplicativo híbrido, e incorporar muitas tarefas comuns, como mensagens e chamadas, de uma forma familiar, eram muitas vezes objetivos irreais. Para entender por quê, vamos dar uma breve olhada na história do desenvolvimento de software móvel. “O tijolo” O Motorola DynaTAC 8000X foi o primeiro celular portátil comercialmente disponível. Comercializado pela primeira vez em 1983, ele tinha 33 × 4,5 × 8,9 centímetros, pesava pouco mais de 1Kg, e permitia que você conversasse por pouco mais de meia hora. Era vendido por 3.995 dólares, além de pesadas taxas mensais de serviço e tarifas por minuto. Nós o chamávamos de “o tijolo”, e o apelido pegou para muitos daqueles antigos celulares que nós alternadamente amamos e odiamos. Com o tamanho aproximado de um tijolo, com bateria suficiente para apenas meia conversação, esses primeiros celulares eram vistos principalmente nas mãos de executivos em viagens de negócio, de pessoal de segurança, e de ricos. Os celulares de 6 Desenvolvimento de Aplicativos Wireless para Android primeira geração eram simplesmente caros demais. As simples taxas de serviços eram capazes de levar à falência uma pessoa média, especialmente quando em deslocamento. Os primeiros celulares não eram particularmente cheio de recursos (embora mesmo o Motorola DynaTAC, mostrado na figura 1.2, tivesse muitos dos botões com que nos familiarizamos, como o SEND, o END e o CLR). Estes primeiros celulares faziam pouco mais que fazer e receber chamadas e, se você tivesse sorte, havia um aplicativo simples de contatos que não era impossível de usar. Os celulares de primeira geração foram projetados e desenvolvidos por fabricantes de telefones. A competição era feroz e segredos comerciais eram muito bem guardados. Os fabricantes não queriam expor o funcionamento interno de seus aparelhos, de modo que eles geralmente desenvolviam o software do telefone a portas bem fechadas. Como desenvolvedor, se você não fizesse parte deste círculo íntimo, não teria oportunidade de escrever aplicativos para os celulares. Figura 1.2 O primeiro celular disponível no mercado: Motorola DynaTAC. Foi nessa época que vimos os primeiros jogos de passa-tempo começarem a aparecer. A Nokia ficou famosa por colocar o game Serpente, dos anos 1970, em alguns de seus primeiros celulares monocromáticas. Outros fabricantes seguiram o exemplo, adicionando jogos como Pong, Tetris, e o Jogo da Velha. Esses primeiros dispositivos eram falhos, mas fizeram algo de importante – eles mudaram a forma de se pensar em comunicação. À medida que os preços dos dispositivos móveis caía, que as baterias melhoravam, e que as áreas de recepção cresciam, mais e mais pessoas começavam a levar consigo esses úteis dispositivos. Logo os dispositivos móveis eram mais que simples novidade. Os clientes começaram a pressionar por mais funcionalidades e mais jogos. Mas havia um problema. Os fabricantes de aparelhos não tinham motivação ou recursos para construir todos os aplicativos que os usuários queriam. Eles precisavam de alguma forma de fornecer um portal de serviços de entretenimento e Capítulo 1 - Apresentando o Android 7 informação, sem permitir o acesso direto ao aparelho. Que melhor maneira de fornecer estes serviços que não a Internet? O Protocolo de Aplicativos Sem-Fios (WAP) Como ficou claro, permitir o acesso direto do telefone à Internet não se ajustava bem para celulares. A esta altura, os websites profissionais eram totalmente coloridos e cheios de textos, imagens e outros tipos de meios. Esses sites usavam JavaScript, Flash e outras tecnologias para aprimorar a experiência do usuário, e muitas vezes eram concebidos com uma resolução alvo igual ou superior a 800 × 600 pixels. Quando o primeiro celular flip, o Motorola StarTAC, foi lançado, em 1996, mal tinha um visor LCD segmentado de 10 dígitos (modelos posteriores adicionariam um visor de texto em matriz de pontos). Enquanto isso, a Nokia lançava um dos primeiros celulares deslizantes, o 8110 – carinhosamente conhecido como “o celular do Matrix”, porque foi muito usado em filmes. O 8110 podia exibir quatro linhas de texto com 13 caracteres por linha. A figura 1.3 mostra alguns dos formatos comuns de celulares. Figura 1.3 Vários formatos de celulares: a “barra de chocolate”, o deslizante (slider), e o flip. Com suas telas de baixa resolução com tamanho de um selo de postagem e poder de armazenamento e processamento limitado, esses celulares não podiam tratar as intensas operações de dados exigidas pelos tradicionais navegadores web. As exigências de largura de banda para transmissão de dados também eram caras para o usuário. O padrão do Protocolo de Aplicativos Sem-Fios (WAP, na sigla em inglês) surgiu para atender a estas questões. Simplificando, o WAP era uma versão reduzida do HTTP, que é o protocolo da espinha dorsal da World Wide Web. 8 Desenvolvimento de Aplicativos Wireless para Android Diferentemente dos navegadores web tradicionais, os navegadores WAP foram projetados para rodar dentro das limitações de memória e de largura de banda dos celulares. Os websites de terceiros serviam páginas escritas numa linguagem de marcação chamada Wireless Markup Language (WML). Estas páginas eram então exibidas no navegador WAP do celular. Os usuários navegavam como na Web, mas as páginas eram muito mais simples no design. A solução WAP foi ótima para os fabricantes de aparelhos. A pressão diminuía – eles podiam escrever um navegador WAP que acompanhasse o aparelho, e deixar que os desenvolvedores produzissem os conteúdos que os usuários queriam. A solução WAP foi ótima para as operadoras móveis. Elas podiam fornecer um portal WAP personalizado, direcionando seus assinantes para o conteúdo que queriam oferecer, e arrecadar as tarifas de dados associadas à navegação, que muitas vezes eram elevadas. Pela primeira vez, os desenvolvedores tiveram a oportunidade de desenvolver conteúdo para usuários de celulares, e alguns o fizeram, com sucesso limitado. Poucos ganharam algum impulso nos mercados de consumo, porque o conteúdo era de valor limitado e a experiência do usuário final deixava muito a desejar. A maioria dos primeiros sites WAP eram extensões dos websites de marcas mais populares, como o CNN.com e o ESPN.com, que estavam à procura de novas maneiras de estender seu alcance a leitores. De repente, os usuários de celulares acessavam notícias, cotações de ações e placares esportivos em seus telefones. A comercialização de aplicativos WAP era difícil, e não havia mecanismo de cobrança embutido. Alguns dos aplicativos WAP comerciais mais populares que surgiram neste tempo eram simples catálogos de sons de chamada e de papel de parede que permitiam pela primeira vez que os usuários personalizassem seus celulares. Por exemplo, um usuário navegava um site WAP e solicitava um item específico. Ele preenchia um formulário de pedido simples, com o número de seu celular e modelo de aparelho. Cabia ao provedor de conteúdo oferecer um arquivo de imagem ou áudio compatível com o dado celular. Pagamento e verificação eram tratados através de vários mecanismos de entrega por preço prêmio, tais como Short Message Service (SMS), Enhanced Messaging Service (EMS), Multimedia Messaging Service (MMS), e WAP Push. Os navegadores WAP, especialmente nos primeiros tempos, eram lentos e frustrantes. Digitar longos URLs com o teclado numérico era oneroso. Páginas WAP eram frequentemente difíceis de navegar. A maioria dos sites WAP eram escritos uma vez para todos os celulares e não levavam em conta as especificações Capítulo 1 - Apresentando o Android 9 de aparelhos individuais. Não importava se o celular do usuário final tinha uma grande tela colorida ou uma tela monocromática do tamanho de um selo; o desenvolvedor não podia adequar a experiência do usuário. O resultado era uma experiência medíocre e não muito atraente para todos os envolvidos. Os provedores de conteúdo frequentemente não se preocupavam com um site WAP e, ao invés, simplesmente anunciavam em breves códigos SMS na TV e em revistas. Neste caso, o usuário enviava uma mensagem SMS premium com um pedido de um papel de parede ou som específico, e o provedor de conteúdo o enviava de volta. As operadoras móveis, em geral, gostavam desses mecanismos de entrega, porque recebiam uma grande porção de cada taxa do serviço de mensagens. O WAP ficou aquém das expectativas comerciais. Em alguns mercados, como no japonês, ele floresceu, enquanto em outros, como nos Estados Unidos, ele não decolou. As telas de celulares eram muito pequenas para a navegação. Ler um fragmento de frase por vez, e depois esperar segundos que o próximo segmento baixasse, arruinou a experiência do usuário, especialmente porque cada segundo de download era frequentemente cobrado ao usuário. Os críticos começaram a chamar o WAP de “espere e pague” (em inglês, Wait And Pay). Por fim, as operadoras móveis que proviam o portal WAP (a página base omissiva carregada quando você iniciava seu navegador WAP), muitas vezes restringia os sites WAP que eram acessíveis. O portal permitia que a operadora restringisse o número de sites pelos quais os usuários poderiam navegar, e canalizar os assinantes para provedores de conteúdo preferenciais da operadora e excluir sites de concorrentes. Este tipo de abordagem de jardim murado desencorajou ainda mais os desenvolvedores de terceiros, que já enfrentavam dificuldades em remunerar os aplicativos, a escrever aplicativos. Plataformas Móveis Proprietárias Não era surpresa que os usuários queriam mais – eles sempre quererão mais. Escrever aplicativos robustos com WAP, tais como jogos de gráficos intensivos, era quase impossível. A doce população de 18 a 25 anos – as crianças com renda disponível mais provável de personalizar seus aparelhos com papéis de parede e sons de chamada – olhou para seus sistemas de jogos portáteis e pediu um dispositivo que fosse tanto um telefone quanto um dispositivo de jogos, ou um telefone e um reprodutor de músicas. Eles argumentaram que, se dispositivos tais como o Game Boy da Nintendo podiam proporcionar horas de entretenimento com apenas cinco botões, por que não bastava adicionar capacidades de telefone? Outros olhavam para suas câmeras digitais, Palms, Blackberries, iPods, e até para 10 Desenvolvimento de Aplicativos Wireless para Android seus laptops e faziam a mesma pergunta. O mercado parecia estar à beira de convergência dos dispositivos. Memória estava ficando mais barata, baterias estavam ficando cada melhores e PDAs e outros dispositivos embutidos estavam começando a rodar versões compactas de sistemas operacionais comuns, tais como Linux e Windows. O tradicional desenvolvedor de aplicativos de área de trabalho de repente se tornou um personagem no mercado de dispositivos embutidos, especialmente com tecnologias de smartphones como o Windows Mobile, que eles achavam familiares. Os fabricantes de aparelhos perceberam que, se quisessem continuar a vender os aparelhos tradicionais, eles precisavam mudar suas políticas protecionistas relativas ao design do aparelho e expor suas estruturas internas até certo ponto. Surgiu, então, uma série de diferentes plataformas proprietárias – e os desenvolvedores ainda estão ativamente criando aplicativos para elas. Alguns smartphones rodavam o Palm OS (mais tarde conhecido como Garnet OS) e o RIM BlackBerry OS. A Sun Microsystems levou sua popular plataforma Java, e o J2ME emergiu (agora conhecido como Java Micro Edition [ Java ME]). O fabricante de chipsets Qualcomm desenvolveu e licenciou seu Binary Runtime Environment for Wireless (ambiente de execução binária para sem-fios, ou BREW, na sigla em inglês). Outras plataformas, como o Symbian OS, foram desenvolvidos por fabricantes de aparelhos, tais como Nokia, Sony Ericsson, Motorola, e Samsung. O iPhone OS da Apple (OS X iPhone) entrou para as fileiras em 2008. A figura 1.4 mostra vários celulares diferentes, todos com diferentes plataformas de desenvolvimento. Muitas dessas plataformas têm programas de desenvolvimento associados. Esses programas mantêm as comunidades de desenvolvedores pequenas, examinadas, e sob acordos contratuais sobre o que eles podem e não podem fazer. Esses programas são muitas vezes necessários e os desenvolvedores devem pagar por eles. Cada plataforma tem benefícios e desvantagens. É claro que os desenvolvedores adoram debater sobre qual plataforma é “a melhor” (dica: geralmente é a plataforma para a qual estamos atualmente desenvolvendo). A verdade é que nenhuma plataforma saiu vitoriosa. Algumas plataformas são mais adequadas para a comercialização de jogos e enriquecimento – se sua empresa tiver o apoio de uma marca. Outras são mais abertas e apropriadas para aplicativos dos mercados hobista ou vertical. Nenhuma plataforma móvel é mais adequada para todos os aplicativos possíveis. Como resultado, o celular se tornou cada vez mais fragmentado, com todas as plataformas compartilhando parte do todo.