Programando o Android 2a Edição Zigurd Mednieks, Laird Dornin, G. Blake Meike e Masumi Nakamura Novatec
Authorized Portuguese translation of the English edition of Programing Android, Second Edition ISBN 9781449316648 2012 Zigurd Medniekes, Laird Dornin, Blake Meike and Masumi Nakamura. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Programing Android, Second Edition ISBN 9781449316648 2012 Zigurd Medniekes, Laird Dornin, Blake Meike e Masumi Nakamura. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. Novatec Editora Ltda. 2012. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Rafael Zanolli Revisão técnica: Edgard Damiani Revisão gramatical: Marta Almeida de Sá/Giacomo Leone Neto Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-336-9 Histórico de impressões: Janeiro/2013 Segunda edição Abril/2012 Primeira edição (ISBN: 978-85-7522-284-3) Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Programando o Android / Zigurd Mednieks...[et al.] ; [tradução Rafael Zanolli]. -- 2. ed. -- São Paulo : Novatec Editora, 2012. Outros autores: Laird Dornin, G. Blake Meike, Masumi Nakamura Título original: Programming Android. ISBN 978-85-7522-336-9 1. Android (Recurso eletrônico) 2. Computação móvel 3. Software de aplicação - Desenvolvimento I. Mednieks, Zigurd. II. Dornin, Laird. III. Meike, G. Blake. IV. Nakamura, Masumi. 12-15513 CDD-005.276 Índices para catálogo sistemático: 1. Android : Plataforma de desenvolvimento para aplicativos móveis : Programa de computador 005.276 OG20121210
Sumário Sobre os autores... 13 Prefácio... 14 Parte I Ferramentas e conhecimentos básicos... 19 Capítulo 1 Instalação do SDK e dos pré-requisitos do Android... 20 Instalação do SDK e dos prerrequisitos do Android... 20 Java Development Kit (JDK)... 21 Integrated Development Environment (IDE) do Eclipse...23 SDK do Android...25 Inclusão de alvos de compilação no SDK... 26 Android Developer Tools (ADT): plug-in para Eclipse...27 Test drive: confirme que sua instalação funciona... 30 Criação de um projeto Android... 30 Criação de um Android Virtual Device (AVD)...34 Execução de um programa em um AVD... 36 Execução de um programa em um dispositivo Android...37 Solução de problemas do SDK: alvos de compilação faltando... 38 Componentes do SDK...39 Android Debug Bridge (adb)...39 Dalvik Debug Monitor Server (DDMS)...39 Componentes do plug-in ADT para o Eclipse...42 Dispositivos virtuais Android... 44 Outras ferramentas do SDK... 44 Mantendo-se atualizado... 46 Mantendo o SDK do Android atualizado...47 Mantendo o Eclipse e o plug-in ADT atualizados...47 Mantendo o JDK atualizado... 48 Códigos de exemplo...49 Códigos de exemplo do SDK...49 Código de exemplo deste livro... 50 Sobre a leitura do código... 50
6 Programando o Android 2a edição Capítulo 2 Java para Android... 51 O Android está reformulando o Java do lado do cliente... 51 O sistema de tipos do Java...52 Tipos primitivos...52 Objetos e classes...53 Criação de objetos... 54 A classe Object e seus métodos... 56 Objetos, herança e polimorfismo... 58 Declarações finais e estáticas... 60 Classes abstratas...65 Interfaces... 66 Exceções... 68 Java Collections Framework...72 Coleta de lixo... 77 Escopo... 77 Pacotes Java... 77 Modificadores de acesso e encapsulamento...78 Expressões idiomáticas na programação Java... 81 Segurança de tipo no Java... 81 Uso de classes anônimas... 84 Programação modular em Java... 87 Programação concorrente multithreaded básica em Java... 90 Sincronização e thread safety... 91 Controle de threads com métodos wait() e notify()... 94 Sincronização e estruturas de dados... 96 Capítulo 3 Ingredientes de um aplicativo Android... 98 Modelos tradicionais de programação comparados aos do Android... 98 Atividades, intentos e tarefas... 99 Outros componentes do Android... 102 Service... 102 Provedores de conteúdo...103 BroadcastReceiver... 107 Ciclos de vida dos componentes... 107 Ciclo de vida de uma atividade... 107 Sobre a portabilidade de softwares para o Android... 110 Recursos estáticos de aplicativos e a classe Context... 110 Organização do fonte Java...112 Recursos...113 Manifestos de aplicativos...114 Parâmetros de inicialização no AndroidManifest.xml... 115 Empacotamento de um aplicativo Android: o arquivo.apk...119 O ambiente de tempo de execução de um aplicativo Android... 120 VM Dalvik... 120
Sumário 7 Zygote: bifurcação de um novo processo... 120 Trabalhando com sandboxes: processos e usuários...121 Bibliotecas Android... 122 Estendendo o Android... 124 O modelo de aplicativos Android... 124 Métodos sobrescritos e callbacks... 124 Uso de polimorfismo e composição... 127 Extensão das classes do Android... 129 Concorrência no Android... 130 AsyncTask e a thread da interface de usuário... 132 Threads em um processo Android... 144 Serialização... 146 Serialização Java... 148 Parcelable... 149 Classes que oferecem suporte à serialização... 152 Serialização e o ciclo de vida dos aplicativos...154 Capítulo 4 Como levar seu aplicativo às mãos do usuário... 155 Assinatura do aplicativo... 155 Criptografia de chave pública e assinatura criptográfica... 155 Como assinaturas protegem os usuários do software e aqueles que publicam seu conteúdo, além de garantir comunicações seguras... 157 Assinatura de um aplicativo...158 Distribuição de um aplicativo no Android Market...165 Como se tornar um desenvolvedor Android oficial...165 Upload de aplicativos no mercado...165 Como ser pago...166 Distribuição alternativa... 167 Verizon Applications para Android...168 Amazon Applications para Android... 170 Chaves de API do Google Maps... 172 Especificação da compatibilidade com níveis de API... 173 Compatibilidade com os vários tipos de telas... 174 Realização de testes para compatibilidade do tamanho de tela... 174 Qualificadores de recursos e tamanhos de tela... 174 Capítulo 5 Eclipse orientado ao desenvolvimento de softwares Android... 175 Conceitos e terminologia do Eclipse... 176 Plug-ins... 176 Workspaces (espaços de trabalho)... 177 Ambientes Java... 178 Projetos... 179 Construtores e artefatos... 179
8 Programando o Android 2a edição Extensões...180 Associações...181 Visões e perspectivas do Eclipse...181 Visão Package Explorer... 183 Visão Task List... 183 Visão Outline...184 Visão Problems...184 Codificação Java no Eclipse...184 Edição de código Java e conclusão de código... 185 Refatoração... 185 Eclipse e Android...186 Como impedir bugs e manter seu código limpo... 187 Analisadores estáticos... 187 Aplicação de análise estática a códigos Android...190 Limitações da análise estática... 193 Idiossincrasias e alternativas do Eclipse... 193 Parte II Sobre o Android Framework... 195 Capítulo 6 Construção de uma visão... 196 Arquitetura da GUI do Android...196 Modelo... 197 Visão... 197 Controlador... 198 Reunindo os elementos...199 Montagem de uma interface gráfica... 201 Conectando o controlador...206 Escutando o modelo...208 Escutando eventos de toque... 214 Ponteiros múltiplos e gestos... 217 Escutando eventos de teclas...220 Escolha de um manipulador de eventos... 221 Implementações avançadas: foco e threading...223 Menu e barra de ação...227 Depuração e otimização da visão...230 Capítulo 7 Fragmentos e suporte a multiplataforma... 233 Criação de um fragmento...234 Ciclo de vida de um fragmento... 237 Gerenciador de fragmentos...238 Transações de fragmentos...240 Pacote de suporte...245 Fragmentos e layout...246
Sumário 9 Capítulo 8 Desenho de gráficos 2D e 3D... 254 Criação de seus próprios widgets...254 Layout... 255 Desenhando na tela... 261 Drawables...273 Bitmaps...278 Efeitos especiais...280 Sombras, gradientes, filtros e aceleração de hardware...283 Animação...285 Gráficos OpenGL... 291 Capítulo 9 Tratamento e persistência de dados... 295 Visão geral de um banco de dados relacional...295 SQLite...296 Linguagem SQL...297 Comandos SQL de definição de dados...298 Comandos SQL de manipulação de dados... 301 Conceitos adicionais de bancos de dados...304 Transações de banco de dados...304 Exemplo de manipulação do banco de dados utilizando sqlite3...305 SQL e o modelo de dados centrado em banco de dados dos aplicativos Android...309 Classes de banco de dados do Android... 310 Projeto de banco de dados para aplicativos Android...311 Estrutura básica da classe SimpleVideoDbHelper...311 Uso da API de banco de dados: MJAndroid... 315 Android e as redes sociais... 315 Pasta de origem (src)...317 Carregamento e inicialização do aplicativo... 318 Consultas a um banco de dados e leitura de dados do banco de dados... 318 Modificação do banco de dados... 323 Parte III Um aplicativo-esqueleto para o Android... 329 Capítulo 10 Um framework para um aplicativo real... 330 Visualização de ciclos de vida...331 Visualização do ciclo de vida de Activity...331 Visualização do ciclo de vida de Fragment...343 Classe Activity e aplicativos bem-comportados...346 Ciclo de vida de Activity e experiência do usuário... 347
10 Programando o Android 2a edição Capítulo 11 Construção de uma interface de usuário... 351 Projeto de nível superior... 353 Fragment, Activity e um projeto escalável... 353 Edição visual de interfaces de usuário...354 Iniciando a partir de uma tela em branco... 355 Implementação dos fragmentos... 359 Implementação dos fragmentos utilizando o editor visual...360 Layouts múltiplos... 361 Dobrando e desdobrando uma UI escalável...362 Decisões sobre tamanho de tela e resolução...362 Delegação para classes de fragmentos... 366 Fazendo com que Activity, Fragment, a barra de ação e layouts múltiplos trabalhem juntos.369 Barra de ação... 370 Guias e fragmentos... 370 A outra atividade... 373 Capítulo 12 Uso de provedores de conteúdo... 377 Compreendendo provedores de conteúdo... 379 Implementação de um provedor de conteúdo... 379 Navegação de vídeos com o Finch...380 Definição de uma API pública de provedor...382 Definição de CONTENT_URI...382 Criação dos nomes das colunas...385 Declaração das strings de especificação de colunas...385 Criação e integração de um provedor de conteúdo...387 Tarefas comuns de provedores de conteúdo...387 Gerenciamento de arquivos e dados binários...389 MVC e observação de conteúdo no Android... 391 Código para SimpleFinchVideoContentProvider: um provedor de conteúdo completo...393 Variáveis de classe e instância de SimpleFinchVideoContentProvider...393 Implementação do método oncreate...395 Implementação do método gettype...396 Implementação da API de provedor...396 Com que frequência devemos notificar os observadores... 401 Declaração de seu provedor de conteúdo...402 Capítulo 13 Um provedor de conteúdo como fachada para um web service RESTful... 403 Desenvolvimento de aplicativos Android RESTful...404 Padrão MVC em rede...405 Resumo dos benefícios...407 Código de exemplo: listagem e carregamento dinâmico de conteúdo de vídeo do YouTube.409 Estrutura do código-fonte do exemplo de vídeo do YouTube... 410 Análise do aplicativo de busca... 412
Sumário 11 Passo 1: nossa UI coleta a entrada do usuário... 412 Passo 2: nosso controlador escuta a ocorrência de eventos... 413 Passo 3: o controlador consulta o provedor de conteúdo utilizando um managedquery no provedor de conteúdo/modelo... 413 Passo 4: implementação da solicitação RESTful... 413 Constantes e inicialização... 414 Criação do banco de dados... 414 Um método de consulta em rede... 415 insert e ResponseHandlers...428 Gerenciamento de arquivos: armazenando miniaturas...430 Parte IV Tópicos avançados... 433 Capítulo 14 Buscas... 434 Interface de buscas...434 Básico das buscas...434 Search Dialog...442 Search Widget...443 Sugestões de consulta... 444 Sugestões de consultas recentes... 444 Sugestões de consulta personalizadas... 446 Capítulo 15 Localização e mapeamento... 450 Serviços baseados em localização...451 Mapeamento... 452 A atividade do Google Maps... 452 MapView e MapActivity...453 Trabalhando com MapViews...454 Inicialização de MapView e MyLocationOverlay... 455 Pausa e continuação de uma MapActivity...458 Controle do mapa com botões de menu... 460 Controle do mapa com o teclado numérico...462 Localização sem mapas...463 Arquivos de manifesto e layout...463 Conectando-se a um provedor de localização para obter atualizações... 464 Atualização da localização emulada... 468 StreetView... 472 Capítulo 16 Multimídia... 473 Áudio e vídeo... 473 Reprodução de áudio e vídeo... 474 Reprodução de áudio... 475 Reprodução de vídeo... 478
12 Programando o Android 2a edição Gravação de áudio e vídeo... 478 Gravação de áudio... 479 Gravação de vídeo...483 Conteúdo de mídia armazenado...484 Capítulo 17 Sensores, NFC, voz, gestos e acessibilidade... 485 Sensores...485 Posição...487 Outros sensores...489 Near Field Communication (NFC)...490 Leitura de uma tag... 491 Escrevendo em uma tag...498 Modo P2P e Beam...500 Entrada de gestos...503 Acessibilidade...505 Capítulo 18 Comunicação, identidade, sincronização e mídia social... 507 Contatos da conta...507 Autenticação e sincronização... 510 Autenticação... 511 Sincronização... 518 Bluetooth...526 A pilha de protocolos Bluetooth... 527 BlueZ: a implementação Linux da tecnologia Bluetooth...528 Uso do Bluetooth em aplicativos Android...528 Capítulo 19 Android Native Development Kit (NDK)... 543 Métodos nativos e chamadas JNI...543 Convenções em chamadas de método nativo...544 Convenções no lado Java...545 Android NDK...545 Configuração do ambiente NDK...545 Edição de código C/C++ no Eclipse...546 Compilação com o NDK...546 JNI, NDK e SDK: um aplicativo de exemplo...548 Bibliotecas e cabeçalhos nativos fornecidos pelo NDK...549 Construção de seus próprios módulos de bibliotecas personalizadas...551 Atividades nativas...554 Índice remissivo... 561