Introdução ao Android Cayo Pabllo¹ ¹Grupo de Pesquisa Multidisciplinar em Informática Aplicada - MIA ¹http://www.ifbaiano.edu.br [email protected] Estes slides são concedidos sob uma Licença Creative Commons. Veja detalhes e restrições adicionais no último slide. Campus Catu 2014.1 Laboratório para Dispositivos Móveis e Sem Fio Introdução No mundo, há mais de: ●7 bilhões de linhas de celulares no mundo ●1 bilhões de pessoas possuem smartphones ●50 milhões de tablets ●2,7 bilhão de pessoas têm acesso a internet No Brasil, há mais de: ●272 milhões de celulares ●40 milhões de smartphones ●10 milhões de tablets ●105 milhões de pessoas com acesso a internet ●52 milhões de acessos a internet via smartphones e/ou tables Diversidade de recursos dos dispositivos móveis Cada vez mais serviços são oferecidos para os dispositivos móveis Diversidade de fabricantes e dispositivos móveis 2 Consumo do mercado mundial 3 Fonte: NIELSEN; 2013 Os tipos de dispositivos utilizados 4 Fonte: NIELSEN; 2013 Serviços mais utilizados Fonte: NIELSEN; 2013 5 Aplicações mais utilizadas 6 Fonte: NIELSEN; 2013 Plataformas mais utilizadas em smartphones no mundo Fonte: IDC; 2013 7 Plataformas mais utilizadas em tablets no mundo 8 Plataformas utilizados em smartphones no Brasil 9 Quantidade de usuários móveis Fonte: MOBITHINKING; 2013 10 Quantidade de aplicações por plataformas Fonte: FORBES; 2013 11 O que é o Android? É uma plataforma de desenvolvimento para dispositivos móveis, baseada em um sistema operacional Linux, com diversas aplicações já instaladas Todas as aplicações desenvolvidas no Android utilizam à linguagem Java Desenvolvido pela Google e atualmente é mantida pela Open Handset Alliance (OHA) 12 O que é o Android? É um ambiente de software para dispositivos móveis que inclui: ●Um Sistema Operacional baseado em um kernel Linux ●Uma rica Interface de Usuário (UI) ●Aplicativos de usuário ●Bibliotecas de código ●Framework de aplicativo ●Suporte a multimídia ●Dentre outros Todas as aplicações desenvolvidas no Android utilizam à linguagem Java Desenvolvido pela Google e atualmente é mantida pela Open Handset Alliance (OHA) 13 Ambiente de software do Android Aplicativos personalizados e integrados escritos em Java Máquina Virtual Dalvik Virtual Kernel Linux 14 Fonte: ABLESON et al, 2012 Arquitetura 15 Fonte: GOOGLE, 2014 Camadas Aplicativos de usuário: contatos, telefone, navegador, etc Gerenciadores de aplicativo: janelas, conteúdo, atividades, telefonia, localização, notificações, etc Tempo de execução Android: Java via Dalvik VM Bibliotecas: gráficas, mídia, banco de dados, comunicações, engine do navegador, etc Kernel Linux, incluindo drives de dispositivo, navegador, etc Hadware com recursos específicos como GPS, câmera, bluetooth, etc 16 Fonte: ABLESON et al, 2012 Licença O Android possui duas licenças distintas de códigofonte aberto: ●GNU Genaral Public License (GPL) devido ao kernel Linux ●Apache Software License (ASL) para a plataforma Android (excluindo o kernel Linux) 17 GooglePay Centro de distribuição de aplicações e divulgação do Android Custo de U$ 25 70% do lucro das vendas vai para o desenvolvedor 18 Intent É uma declaração de necessidade, composto de diversas informações que descrevem a ação ou serviço desejado São importantes por que facilitam a navegação de modo inovador e representam o aspecto mais importante na codificação Traz o paradigma “clique aqui” para o núcleo do uso (e desenvolvimento) de aplicativos Android Seu atributo de ação é normalmente um verbo, por exemplo, VIEW, PICK ou EDIT Há diversas ações nativas definidas como membros da classe Intent, mas é possível criar novas ações 19 Intent Para visualizar uma informação android.content.Intent.ACTION_VIEW Seu componente de dados é expresso na forma de um Uniform Resource Identifiers (URI) e pode ser virtualmente qualquer informação Tipo de informação Dados do URI Busca de contato content://contacts/people Busca de mapa Geo:0,0? q=23+Route+206+Stanhope+NJ Abrir uma página Web específica http://www.ifbaiano.edu.br Fonte: ABLESON et al, 2012 20 Intent Um Intent é avaliado e enviado para o handler mais apropriado Há 2 tipos de Intent: ●Implícito É quando uma requisição é realizada a um aplicativo criado pela SDK ou nativo do Android São dependentes do IntentFilter e do ambiente Android para despachar o Intent para o contêiner apropriado ●Explícito Permite especificar a classe exata que necessita ser manipulada pelo Intent É extremamente útil quando é sabido exatamente o que a Activity deseja manipular o Intent 21 IntentFilter Define a relação entre o Intent e o aplicativo Pode ser genérico ou específico em relação a quais Intents oferece o serviço Pode se específico aos dados do Intent, à ação ou a ambos Também possuem um campo categoria (category) É frequentemente definido no arquivo AndroidManifest.xml através da tag <intent-filter> O AndroidManifest.xml é essencialmente um arquivo que descreve o aplicativo 22 Relação entre Intent, IntentFilter e BroadcastReceiver Quando um Intent é expedido, o sistema avalia os Activitys, Services e BroadcastReceivers Para alugar: Localize Para alugar: Faça um qualquer coisa no mapa passeio pela Internet (IntentFilter) (intentFilter) Aplicativo Android nº 2 (BroadcastReceiver) startActivity (Intent); ou startActivity(Intent, identifier); ou startService(Intent); Para alugar: algum lugar: Visualize, Visualize, edite e edite procure e procure qualquer qualquer(IntentFilter) contato contato (IntentFilter) Aplicativo Android nº 3 (BroadcastReceiver) Para alugar: Ação personalizada sobre dados personalizados (IntentFilter) Aplicativo Android nº 4 (BroadcastReceiver) Ajude-me; Localizar uma pessoa (Intent) Ajude-me; Localizar um endereço no mapa (Intent) Aplicativo Android nº 1 23 Fonte: ABLESON et al, 2012 Activity É tanto uma unidade de interação do usuário – tipicamente preenchido por completo a tela de um dispositivo – quanto uma unidade de execução Representa um componente visível de um aplicativo dentro do Android Os aplicativos Android costumam ter mais de uma Activity, cada uma mostra uma UI e responde a eventos iniciados tanto pelo sistema quanto pelo usuário A Activity emprega uma ou mais Views para apresentar os elementos de UI ao usuário 24 Activity Cada Activity está amplamente separada das outras O código que implementa determinada Activity não chama diretamente métodos no código que implementa outra Activity Aplicativo 1 Início A1 A2 Aplicativo 2 Aplicativo 3 A3 A4 Troca de mensagens Visualizar uma lista de mensagens O usuário toca uma mensagem da lista Troca de mensagens Visualizar uma mensagem O usuário toca em Menu->Visualizar contato Contatos Visualizar um contato O usuário toca na opção Realizar chamada Telefone Liga para o número de celular do contato Fonte: MEDNIEKS et al, 2012 25 Service São utilizadas em tarefas de segundo plano, que podem ser ativas, mas não visíveis a tela O Android evita recuperar serviços, sendo assim, uma vez iniciado um serviço, é provável que o mesmo continue disponível, a não ser que a memória disponível fique extremamente restrita 26 BroadcastReceiver É semelhante a Activity mas sem a UI própria Todos os BroadcastReceiver registrados para um determinado Intent recebem o Intent sempre que transmitido Se um aplicativo quiser receber e responder a um evento global deve ser registado a um BroadcastReceiver A Intent é usada para ativar os BroacastReceiver 27 ContentProvider É uma camada que fornece abstração de dados para seus clientes e centraliza as rotinas de armazenamento e recuperação em um único local Pode fornecer dados para um Activity ou Service no mesmo aplicativo ou contidos em outros aplicativos Permite utilizar qualquer forma de mecanismo de armazenamento de dados disponível no Android (arquivos, banco de dados SQLite, mapa hash da memória , dentre outros) 28 ContentProvider Aplicativo Android nº3 Activity 3.1 Aplicativo Android nº1 Aplicativo Android nº2 Activity 1.1 Activity 2.1 ContentProvider A Activity 1.2 SQLite Arquivo de dados XML Conexão virtual com armazenamento remoto Fonte: ABLESON et al, 2012 29 Ciclo de vida de uma Activity Se o usuário abrir a aplicação novamente a Activity é recriada Volta a executar quando o usuário achar necessário Volta a ser visível para o usuário, ocupando o topo da pilha Caso o SO necessite de memória o SO pode encerrar a Activity que está rodando em segundo plano 30 30 Fonte: GOOGLE, 2014 Ciclo de vida de uma Activity 31 Fonte: GOOGLE, 2014 AndroidManifest.xml Contém todas as configurações necessárias para executar a aplicação Exemplo: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.edu.ifbaiano.catu.ads.ldmsf“> <application android:icon="@drawable/icon”> <activity android:name=".HelloWorld” android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 32 Mapeando aplicativos para processos A aplicação é executada em um único processo Linux O SO pode descarregar ou interromper uma aplicação de tempos em tempos para acomodar a demanda de alocação de recursos Normalmente as seguintes regras são seguidas (ALBESON et al, 2012): ●Atividades visíveis e em execução têm prioridade máxima ●Atividades visíveis que não estejam sendo executadas são importantes, porque foram pausadas recentemente e provavelmente serão reiniciadas em breve ●Serviços em execução são os próximos em prioridade ●Os candidatos mais prováveis para exclusão são processos vazios (carregados talvez por razões de desempenho em caching) ou que tenham Activity 33 adormecidos Android SDK Pré-requisitos ●Máquina virtual Java ●Eclipse Android SDK ●http://developer.android.com/sdk/ 34 Pacotes Android essenciais Pacotes Java inclusos: ●java.lang - Classes básicas de linguagem Java ●java.io – Recursos de entrada/saída ●java.net – Conexão de rede ●java.text – Utilitário de manipulação de texto ●java.math – Classes matemáticas e de manipulação numérica ●javax.net – Classes de rede ●javax.security – Classes de segurança ●javax.xml – Classes XML baseadas em DOM ●org.apache.* - Classes HTTP ●org.xml – Classes XML baseadas em SAX 35 Pacotes Android essenciais Pacotes Android: ●android.app – Modelo de acesso do aplicativo Android ●android.bluetooth – Funcionalidade bluetooth ●android.content – Acesso e publicação de dados ●android.net – Contém a classe URI utilizada para acessar conteúdos ●android.gesture – Cria, recomenda, carrega e salva gestos ●android.graphics – Primitivas geométricas ●android.location – Serviços de localização ●android.opengl – Classses OpenGL ●android.os – Acesso no nível do SO ●android.provider – Classes relativas a ContentProvider ●android.telephony – Acesso aos recursos de telefonia ●android.text – Layout de texto ●android.util – Manipulação de texto e logs, inclusive XML ●android.view – Elementos de UI 36 ●android.webkit – Funcionalidades de navegador ●android.widget – Mais elementos de UI Ambiente de desenvolvimento IDE de código-fonte aberto do Eclipse Codificação Depuração Ferramentas de linha de comando Ferramentas de transferência de arquivos Testador de simulação GSM Emulador Android Android Development Tools (plug-in) SDK Configuração de perfil do emulador Inicialização do emulador Visualização de processos e sistemas de arquivos Visualização de log Diversas skins Opção de conectividade de rede Integrado ao Eclipse via o plug-in Android Development Tools (ADT) Dispositivos Android Hardware do aparelho Documentação do SDK 37 Estrutura do Projeto / → Raiz do projeto src → Código fonte gen → Código Java gerado automaticamente res → Recursos da aplicação ●drawable-__ dpi → São os artefatos visuais, como as imagens de acordo com a resolução ●layout → Arquivos xml de UI ●values → Contém arquivos xml que possuem strings e valores numéricos utilizados no código ●raw → Contém arquivos de dados que podem ser carregados como fluxos AndroidManifest.xml → Configuração do projeto 38 Classe R É gerada automaticamente sendo composta de classes estáticas internas que armazenam referências para todos os recursos da aplicação na forma de um valor int O valor é um ponteiro constante para um arquivo objeto, por meio de uma tabela de recursos contida em um arquivo especial que é criado pela ferramenta aapt e usado pelo arquivo R.java Nunca deve ser alterada manualmente 39 Minha primeira aplicação Android import android.app.Activity; import android.os.Bundle; public class AppWord extends Activity { } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } 40 Referências ABLESON, W. F.; SEN, R.; KING, C.; ORTIZ, C. E. Android em ação. Campus/Elsevier, 3ª edição, 2012. 622 p. ANATEL. Disponível em: <http://www.anatel.gov.br> GARTNER. Gartner Says Smartphone Sales Accounted for 55 Percent of Overall Mobile Phone Sales in Third Quarter of 2013. Disponível em: < http://www.gartner.com/newsroom/id/2623415> GARTNER. Gartner Says Worldwide Tablet Sales Grew 68 Percent in 2013, With Android Capturing 62 Percent of the Market. Disponível em: < http://www.gartner.com/newsroom/id/2674215>. FOLHA DE SÂO PAULO. Vendas de tablets vão superar as de notebooks no Brasil. Disponível em: < http://veja.abril.com.br/noticia/vida-digital/vendas-de-tablets-v ao-superar-as-de-notebooks-no-brasil > 41 Referências FORBES. How Much Do Average Apps Make? Disponível em: < http://www.forbes.com/sites/tristanlouis/2013/08/10/how-muchdo-average-apps-make/ > GOOGLE. Android Developers. Disponível em: < http://developer.android.com/index.html> IBOPE. 52 milhões de pessoas têm acesso à web pelo celular, aponta IBOPE Media. Disponível em: < http://www.ibope.com.br/pt-br/noticias/paginas/52-milhoes-depessoas-tem-acesso-a-web-pelo-celular-aponta-ibope-media.aspx > IBOPE. Número de pessoas com acesso à internet no Brasil chega a 105 milhões. Disponível em < http://www.ibope.com/pt-br/noticias/paginas/numero-de-pessoas -com-acesso-a-internet-no-brasil-chega-a-105-milhoes.aspx > 42 Referências IDC. Android and iOS Continue to Dominate the Worldwide Smartphone Market with Android Shipments Just Shy of 800 Million in 2013, According to IDC. Disponível em: < http://www.idc.com/getdoc.jsp?containerId=prUS24676414> IDC. Worldwide Tablet Market Surges Ahead on Strong First Quarter Sales, Says IDC. Disponível em: < http://www.idc.com/getdoc.jsp?containerId=prUS24093213> ITU. ictFacts and Figures. Disponível em: < http://www.itu.int/en/ITU-D/Statistics/Documents/facts/ICTFacts Figures2013.pdf > LACHETA, R. R. Google Android. Novatec, 2ª edição, 2010. 608 p. MEDNIEKS, Z.; DORNIN, L.; MEIKE, G. B.; NAKAMURA, M. Programando o Android. O'Reilly/Novatec, 2ª edição, 2013. 676 p. 43 Referências MOBITHINKING. Global mobile statistics 2013 Section E: Mobile apps, app stores, pricing and failure rates. Disponível em: < http://mobithinking.com/mobile-marketing-tools/latest-mobile-stat s/e > NIElLSEN. The Mobile Consumer – a global snaphsot. Disponível em: < http://www.nielsen.com/content/dam/corporate/us/en/reportsdownloads/2013%20Reports/Mobile-Consumer-Report-2013.pdf > NETMARKETSHARE. IOS, Android Market Share on Mobile/Tablet. Disponível em: < http://www.netmarketshare.com/mobile-phones.aspx?qprid=9 &qpcustomb=1&qpcustom=iOS,Android > NUDELMAN, G. Padrões de projeto para o Android. Wiley/Novatec, 1ª edição, 2013. 44 Licença A presente obra encontra-se licenciada sob a licença Creative Commons Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil. Para visualizar uma cópia da licença, visite http://creativecommons.org/licenses/by-nc-sa/3.0/br/ ou mande uma carta para: Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 45