introdução ao android - siecomp 2015.1
TRANSCRIPT
Introdução ao Android
Afonso da Silva Machado
3 de Março de 2015
Eu
Afonso da Silva Machado
7º Semestre de Engenharia de Computação
Universidade Estadual de Feira de Santana
Membro da Empresa Junior de Engenharia de
Computação
Você
Quem tem um aparelho Android?
Quem sabe programar em Java?
Quem já programou pra alguma plataforma móvel?
Quem já “programou” pelo menos um Hello World pra
Android?
Conteúdo
•Histórico e Características•Eclipse x Android Studio
• Android SDK• AVD
•Arquitetura•Debug•Organização da IDE•Conceitos específicos•Mão na massa
Metodologia
•Dividindo em três partes1. Manuseando a IDE2. Aprendendo conceitos fundamentais3. Aplicando seus conceitos
a) Um pequeno app para cada conceitob) Apps completos para exercitar
Você
Código Aberto
Desenvolvido inicialmente pela Android Inc.
Comprado pela Google em 2005 e Lançado em 2008
Baseado no Kernel do Linux
Rodava com uma máquina virtual Java própria: Dalvik VM,
a partir da versão 5.0 roda com uma nova máquina virtual
ART (Android Run Time).
Um sistema operacional para Tablets
E smartphones?
#sqn
Android Wear e Android TV
Diferentes Smartphones
E em breve: Android Auto
Anunciado para Grandes Marcas
http://www.android.com/
Várias versões
Android 5.0: Lollipop
Várias versões
1.0: 2008, O lançamento, HTC Dream;
2.0: Google, Eclair e Froyo, Nexus One;
2.3: Gingerbred, o sucesso;
3.0: Versão para Tablets, Honeycomb;
4.0: A ascenção, Ice Cream Sandwich, Jelly Bean e Kit Kat;
5.0: A ouzadia, Lollipop.
Versões
http://developer.android.com/about/dashboards/index.html
Google play store, filmes, músicas...
Android Studio (ou Eclipse?)
http://developer.android.com/sdk/index.html
Vamos ao que Interessa ;)
Mas e o Eclipse?
Java + Um bando de coisa
Chato?
Quantos gostam de java?
Quantos gostam de eclipse?
A idéia era: Android gambiarreitor tabajara
Seu kit de ferramentas e plugins Android que você instala no seu Eclipse, e
pronto, já pode programar seus apps nativos
ADT: Android Developer Tools
O ADT foi a primeira IDE para desenvolvimento em Android
Todo o processo de build é baseado na ferramenta Apache Ant
Construído na infraestrutura do Eclipse
Era legal... Mas...
• Interface muito misturada
•Meio eclipse seco, meio Android
•Relativamente pesado
•Emulador quase impossível de ser executado
Até que...
16 de maio de 2013
Google I/O
Android KitKat
Google Nexus 5
IDE exclusiva para Android
Android Studio
No mesmo mês (Maio de 2014) foi lançado o primeiro
beta o Android Studio, versão 0.1
Android Studio
No mês de dezembro de 2014 a Google publicou o
download da primeira versão estável (1.0)
Android Studio
Android Studio é a nova suíte de desenvolvimento de apps
em Android
Foi projetado utilizando a infraestrutura da IDE IntelliJ IDEA,
da JetBrains
Utiliza o Gradle como novo sistema de build no processo de
desenvolvimento
A idéia é
• Apresentar uma IDE com uma interface intuitiva e
organizada;
• Mais “leve” e mais rápida;
• Multiplataforma;
• Novo sistema de automação de compilação, deixando
de lado o “Ant” e adicionando o “Gradle”.
• Mantendo o Android SDK
Features do Android Studio
• Baseado no flexível sistema de build Gradle
• Variantes de build e geração de múltiplos APKs
• Suporte expandido de templates para Google Play
Services e
• vários tipos de dispositivos
• Editor de layout poderoso com suporte para edição de
temas
• Ferramenta Lint para capturar problemas de performance,
Features do Android Studio
• usabilidade, compatibilidade de versões, dentre outros
• suporte para utilização do ProGuard e assinatura de apps
• suporte embutido para Google Cloud Platform, tornando
mais fácil
• integrar funcionalidades do Google Cloud Messaging e
App Engine
Features do Android Studio
Funcionalidade
Sistema de Build
Build de dependências baseadas no Apache Maven Sim Não
Variantes de build e geração de múltiplos APKs (ex:Android Wear, Android TV)
Sim Não
Auto-completar de código Android avançado e refactoring
Sim Não
Editor gráfico de layout Sim Sim
Assinatura de APK e gerenciamento de keystore Sim Sim
Suporte à NDK Sim Sim
Requerimentos (pesado mas leve)
Windows OS X Linux
Microsoft Windows 8/7/Vista/2003 (32 ou 64 bit)
Mac OS X 10.8.5 or mais atual, up to 10.10 to up 10.10.1 up 10.10.2
GNOME ou KDE ou Unity desktop no Ubuntu ou Fedora
2 GB RAM mínimo, 4 GB RAM recomendado
2 GB RAM mínimo, 4 GB RAM recomendado
2 GB RAM mínimo, 4 GB RAM recomendado
500 MB de espaço em disco 500 MB de espaço em disco 500 MB de espaço em disco
16 GB de espaço livre para o Android SDK e suas imagens de sistema
16 GB de espaço livre para o Android SDK e suas imagens de sistema
16 GB de espaço livre para o Android SDK e suas imagens de sistema
Java Development Kit (JDK) 7 oumais atual
Java Development Kit (JDK) 7 oumais atual
Java Development Kit (JDK) 7 oumais atual
Resolução mínima de tela: 1280x800 Resolução mínima de tela: 1280x800 Resolução mínima de tela: 1280x800
Android SDK
•Um kit de ferramentas onde você encontrará todas as ferramentas e API’s necessárias para fazer o seu aplicativo usando o Android Studio ou o Eclipse
Vamos explorar
•Abra o Android Studio.
$ cd android-studio/
$ cd bin/
$ sh studio.sh
Criando um projeto
Criando um projeto
Criando um projeto
Isso é pra mais tarde ;)
Enquanto Esperamos...
1. Usando seu aparelho Android
2. Usando um Android Virtual Device
Testando seus apps
Usando seu aparelho Android, conectando a uma porta USB do seu computador e ativando o modo de depuração no dispositivo
Testando seus apps
•Mais rápido
•Mais confortável
•Mais técnico
•Acesso mais rápido à DEBUGs
Testando no seu aparelho Android
Usando um Android Virtual Device (AVD)
Testando seus apps
•É basicamente um emulador do SO no seu computador (Semelhante ao Virtual Box)
•Dentro de um AVD você pode emular câmera, rede, memória RAM, armazenamento interno e processador.
Android Virtual Device (AVD)
•Lento quando instalado em máquinas com pouca memória e baixo processamento
•Devido a travamentos, a experiência com o sistema e com o seu aplicativo se torna ruim
•Alternativa grátis
•Bom método de testar uma nova versão do Android
Android Virtual Device (AVD)
•Quem tiver um celular Android, use;
•Caso contrário usaremos um AVD;
•Mas criaremos um para entendermos seu funcionamento
•Seu projeto ja abriu?
Por via das duvidas...
Barra principal
Debug
Compilar e Executar
Dispositivos Virtuais
Android SDK Tools
Monitoramento do Dispositivo
Procedimentos Iniciais
Dispositivos Virtuais
Android SDK Tools
Monitoramento do Dispositivo
Prática
Criar e executar um AVD
Verificar pacotes do Android SDK
Enquanto seu AVD não abre...
Vamos à alguns conceitos
Arquitetura de uma aplicação
• Linux Kernel
• Bibliotecas
• Frameworks
• Aplicações
• Android Runtime ou Dalvik VM
Arquitetura do Android
Linux Kernel
Permite que a plataforma Android tenha alta portabilidade
Por ser de código aberto permite que talentos individuais ou companhias o melhorem ainda mais (ou piorem –’)
Bibliotecas
A camada acima do Kernel contém as bibliotecas nativas do Android
Essas bibliotecas são todasescritas em C ou C++ e
compiladas para a arquiteturade hardware específicautilizada pelo telefone.
Ex.: Codecs de mídia, Banco de Dados AQL
Android Runtime
• Core libraries: gráficos 2D, interações com o SO, collections do Java
• Máquina Virtual Android Runtime
Dalvik VM x ART
• No Dalvik (Just-in-time), os aplicativos instalados no Android são interpretados pela máquina virtual Dalvik, e então as informações deles são enviadas até a interface gráfica
• No ART (Ahead-of-time), os códigos são pré-compilados na linguagem de execução já durante a instalação dos aplicativos. Isso significa que a instalação dos softwares pode ser mais demorada, mas também representa mais rapidez na execução dos apps
Dalvik VM ART
Usa a abordagem just-in-time, que resulta em menor consumo de espaço de armazenamento, mas o tempo de carregamento
dos apps é mais longo;
Usa a abordagem antes-do-tempo, que compila os aplicativos
quando eles são instalados, resultando em tempos de carga e
uso do processador menores;
O cache se acumula ao longo do tempo, de modo que o tempo de
inicialização são rápidos;
O cache é construído no boot dos dispositivo, logo reiniciar leva
muito mais tempo;
Como o espaço ocupado é menor, ele unciona melhor para dispositivos de armazenamento
interno menor.
consome muito mais espaço de armazenamento, uma vez que ele armazena aplicativos compilados
além dos APKs.
Sem suporte à 64bits Suporte à 64bits
Framoworks e Aplicações
• Gerenciadores de câmera, GPS, janelas...
• Telefone, mensagens, câmera, e o seu aplicativo
Seu AVD já abriu?
Se sim, vamos brincar com ele.
DDMS: Dalvik Debug Monitor Server
Abra o Monitoramento do Dispositivo
•Ferramenta de Debug do Android Studio (Já existia no Eclipse);
•Mas no Android Studio a ferramenta pode também ser usada para debugar com o seu smartphone Android
DDMS: Dalvik Debug Monitor Server
•Abra a aba “Emulator Tool” e simule uma ligação e um envio de SMS
Prática
Deixe seu AVD aberto e vamos pra outra parte
Lembram de quando eu falei sobre “Activity”?
Equivale à uma tela.
Cada Activity é definida em dois arquivosres/layout/activity_nome.xml (visual)src/.../NomeActivity.java (comportamento)
Activity
•Crie a sua Activity
Prática
Hello world!
Estrutura de um Projeto no Android Studio
Perspectivas de Desenvolvimento
Projeto Pacotes Android
Estrutura do projetoNome do projeto(mesmo nome do diretório)
Estrutura do projetoPasta com arquivos de
configuração da IDE
Estrutura do projetoMódulo do projeto
O ícone muda conforme o tipo de módulo (wear, TV, glass)
Estrutura do projetoContém os arquivos compilados do app e os arquivos
auxiliares (layouts, arquivos *.class, arquivo R.java)
Estrutura do projeto
Pasta com as bibliotecas utilizadasContém os arquivos *.jar
Estrutura do projeto
Pasta com todo o código-fonte do aplicativoPor padrão o Android Studio cria os fontes em “src/main/java
Estrutura do projeto
Pacote principal das classes de testePor padrão o Android Studio cria os fontes em “src/androidTest/java
Estrutura do projeto
Arquivos de recursos do aplicativoLayouts, telas, strings, ícones do app
Estrutura do projeto
Arquivo ‘Manifest’ do app (nome, versão do Android, permissões...)
No Android Studio, cada módulo tem um arquivo ‘manifest’
Estrutura do projeto
Arquivo de configuração do módulo appHerdado da infraestrutura do IntelliJ
Estrutura do projeto
Arquivo build.gradle para o módulo appContém arquivos de configuração e tarefas do módulo,
como versão mínima, versão padrão, dependências (escrito em Groovy)
Estrutura do projeto
Pacote de arquivos do Gradle
Estrutura do projeto
Arquivo build.gradle do projetoContém informações gerais do projeto (repositórios)
Estrutura do projeto
Arquivo de propriedades do GradleConfigurações específicas do gradle (gerado)
Estrutura do projeto
Script para execução das tarefas do GradleUtilizado no processo de realizar a construção do app
Estrutura do projeto
Informações locais (SDK)Informa a localização do Android SDK (gerado)
Estrutura do projeto
Arquivo de configuração do projetoHerdado da infraestrutura do IntelliJ
Estrutura do projeto
Arquivo de configuração dos módulosContém as informações dos módulos do projeto
Estrutura do projeto
Bibliotecas externasLista de bibliotecas externas ao projeto (SDK, JDK, etc)
Layout
Layout
• Todo o layout e interface gráfica de um aplicativo feito no Android Studio está inserido num arquivo .xml, que é criado junto com uma Activity;
Layout
• Pode ser manuseado tanto o código xmlquanto a ferramenta de interface do Android Studio.
strings.xml
• res/values/strings/xml
Útil para traduzir um app para vários idiomas
(Usando um arquivo strings.xml para cada idioma)
Código Java
• src/.../MainActivity.java
• Todas as Activities são herdam da classe ActionBarActivity• Para cada Actvity há um layout indicado no código• Qualquer componente da tela é referenciado no arquivo R.java
styles.xml
• Contém o estilo que você usa para o aplicativo e seus componentes
Útil para economizar linhas nos arquivos do layout, aplicando os estilos dos componentes
Arquivo R.java (Gerado pelo compilador)
• Possui métodos estáticos com as referências de todos os recursos do projeto
• Cada recurso é identificado por um número. O compilador gera constantes par facilitar o uso de recursos no código fonte
• É gerada automaticamente pelo Android Studio e nunca deve ser alterada manualmente
Compilando seu projeto
Make Project Run
Compilando seu projeto
Substitua no arquivo strings.xml, “Hello, World” por qualquer outra String
Execute o app
Compilando seu projeto
Substitua no arquivo styles.xml o “parent” por “Base.V14.Theme.AppCompact”
Execute o app
Interação
Adicione um botão
Ids!
Quando você adiciona mais de um componente numa tela, os componentes são organizados por IDs
Ids!
Os Ids são referenciados no arquivo R.java, para facilitara interação com os componentes, basta apenas usar seuID
Clique!
Usando o método “onClick” e chamando-o no arquivo.java da sua activity
android:onClick=“botaoClicado”
public void botaoClicado (View v){
}
Prática
1. Exibir uma mensagem na tela
2. Exibir algo no Log ao tocar o botão
3. Exibir a quantidade de vezes que o botão foi tocado
4. Mudar o texto do textView (Nosso antigo ‘HelloWorld!’)
Toast (mensagem na tela)
Toast.makeText(this, "Que botao massa vei", Toast.LENGTH_SHORT).show();
Log (não visível para o usuário)
Toast.makeText(this, "Que botao massa vei", Toast.LENGTH_SHORT).show();
//métodos de Log
Log.v //Verbose
Log.d //Debug
Log.i //Info
Log.e //Warnig
Log.wtf //What a F***
Método findViewById
• Use este método para acessar qualquer ID disponível para sua aplicação no arquivo R.java no tempo de execução.
TextView texto = (TextView) findViewById(R.id.textView1);
texto.setText("Clicou "+x+" vezes");
Práticazinha
• Modifique o texto do Botão ao tocar nele
Prática
• Adicione um campo de texto ‘EditView’ na sua Activity
• Ao clicar no botão, altere o TextView para o valor do campo de texto.
Boa prática: crie um atributo para cada view e inicialize todos no onCreate (usando findViewById)
Ciclo de vida de uma Activity
Ciclo de vida de uma Activity
Prática
Implemente os métodos do ciclo de vida de umaactivity para emitir uma mensagem de log paracada um
Tente fazer com que onDestroy seja chamado
Prática
Rotacione o dispositivo (Ctrl + F11) e veja quais métodos são chamados.
Seu primeiro app funcional!
Usando dos conhecimentos até agora passados, implemente um aplicativo que cálcule suas 3 médias de alguma disciplina e diga se você está ou não aprovado
Dica!
Use três ‘EditText’ + 3 ‘TextView’ para as médias
Use um ‘TextView’ (inicialmente vazio) para informar o resultado
Caso precise, use ‘AbsoluteLayout’ para posicionar melhor os componentes
Dica!
No seu layout (xml), use o método ‘android:maxLenght’ para definir o tamanho máximo de caracteres no EditText
Use também o método ‘android:inputType’ para definir o tipo de entrada (Números)
Melhorando o app!
Para evitar erros, defina os ‘EditText’ como ‘0’ inicialmente, usando setText();
Melhorando o app!
Fazer com que apareça um ‘Dialog’ com o resultado na tela
Melhorando o app!
Brincar com o Dialog, fazendo com que apareça uma mensagem diferente no botão, ao passar ou perder
Melhorando o app
Faça com que ele calcule a média que você precisa numa prova final em caso de reprovação
Fórmula para nota mínima da finalfinalMinima = 12.5 – (1.5 * media)
Voltando para o projeto Hello World!
Preferências
Preferências
Como salvar dados para que eles possam seracessados da próxima vez que o app sejaexecutado?
SharedPreferences é uma forma conveniente desalvar pequenas quantidades de dados.
Preferências
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);Editor editor = prefs.edit();editor.putString("texto", texto);editor.commit();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);String texto = prefs.getString("texto", "");
Salvando
Carregando
Prática
Faça o app guardar o textoCarregue no onCreate e salve no onDestroy
Boa prática: use atributos static final para as chaves
Intents
Intents
São mensagens que seu programa envia para osistema para requisitar funcionalidades de outrosComponentes
Exemplo: uma Activity envia um Intent pararequisitar ao sistema que outra Activity seja aberta
Outro exemplo: uma Activity envia um Intent pararequisitar ao sistema que abra um navegador napágina www.google.com
Abrindo outra Activity
Intent intent = new Intent(this, OutraActivity.class);startActivity(intent);
Pode ser chamado, por exemplo, ao clicar em um botão
A nova activity é “empilhada” sobre a atual
Fechando a Activity
Usando o método ‘finish();’
Quando uma activity é fechada(desempilhada), o Sistema
mostra a Activity anterior, queestava abaixo da atual
A Activity é desempilhada para evitar empilhamentos
desnecessários, gerando alto consume de memória
Prática
Aproveitando o seu projeto Hello World, crie uma nova Activity chamada OutraActivity.java
Na MainActivity.java, adicione um novo botão que ao ser clicado abre OutraActivity
Na OutraActivity adicione um botão que ao ser clicado feche a Activity
Passando dados de uma Activity pra outra
Intent intent = new Intent(this, OutraActivity.class);intent.putExtra(“pi”, 3.14);startActivity(intent);
Bundle extras = getIntent().getExtras()if (extras != null) {float x = extra.getFloat(“pi”);}
MainActivity.java
OutraActivity.java
Pode ser chamado no onCreate();
Retornando dados de uma Activity
Intent intent = new Intent(this, OutraActivity.class);startActivityForResult(intent, 1234);
Intent data = new Intent();data.putExtra(“pi”, 3.14);setResult(RESULT_OK, data);finish();
MainActivity.java
OutraActivity.java
MainActivity.java@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1234 && resultCode == RESULT_OK) {float pi = data.getFloatExtra(“pi”);
}}
Exercitando
Adicione dois ‘TextView’ vazios em cada Activity
Faça com que nesses ‘TextView’ aparecam a quantidade de vezes que você trocou de Activity
Dessa forma:
Prática
Intents Implícitos
// Abrir navegadorIntent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.com/"));startActivity(intent);
// Enviar mensagem (SMS)Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(android.content.Intent.EXTRA_TEXT, "Oi!");startActivity(intent);
Intents Implícitos
Existem ainda vários outros tipos
ACTION_CALL -> Realiza chamadasIMAGE_CAPTURE -> Tira uma foto
ListView
ListView: Funcionamento
ListView
ArrayAdapter
ListView
ListView listView = (ListView) findViewById(R.id.mylist);
listView.setAdapter(adapter);
ListView
ListView lista = (ListView) findViewById(R.id.mylist);
String[] values = new String[] { “Jelly Bean”, “KitKat”, “Lollipop” };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, // layout de um itemvalues);lista.setAdapter(adapter);
Crie um novo projeto, adicione um ListView na Activity, coloque este código no onCreate, e observe o que acontece
ListView: Interação
lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Overridepublic void onItemClick(AdapterView<?> parent, View
view, int position, long id) {// Seu código aqui
}});
Coloque este código dentro do onCreate e coloque um “Toast” dentro do onItemClick
Prática
Sistema para guardar quaisquer observações