+ Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

49
+ Curso de Android 19ª Jornada de Cursos

Transcript of + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

Page 1: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+

Curso de Android

19ª Jornada de Cursos

Page 2: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+5. Criando aplicações Android (cont.)

Page 3: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

Project Name: TrocaLayouts

Package Name : br.ufpe.cin.android.applayout

Create Activity: AppLayout

Application Name: Mudando de layouts

Min SDK Version: 10

Page 4: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

Page 5: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

No arquivo main.xml, adicionaremos o elemento:

Button:id: “@+id/bttela2”layout_width: “fill_parent”text: “Ir pata tela 2”

Crie um arquivo “tela2.xml” na pasta res/layout e adicione os seguintes elementos:TextView

text: “Você está na tela 2”Buttonid: “@+id/bttelaprincipal”layout_width: “fill_parent”text: “Ir pata tela principal”

Page 6: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

AppLayout.java

public void CarregaTelaPrincipal() {setContentView(R.layout.main);Button bttela2 = (Button)

findViewById(R.id.bttela2);bttela2.setOnClickListener(new

View.OnClickListener(){public void onClick(View arg0) {

CarregaTela2();}

});}

Page 7: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

public void CarregaTela2() {setContentView(R.layout.tela2);Button bttelaprincipal = (Button)

findViewById(R.id.bttelaprincipal);bttelaprincipal.setOnClickListener(new

View.OnClickListener(){public void onClick(View arg0) {

CarregaTelaPrincipal();}

});}

Page 8: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Mudança de Layout

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);CarregaTelaPrincipal();

}

Page 9: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

Project Name: AplicacaoDeCadastro

Package Name : br.ufpe.cin.android.appcadastro

Create Activity: AppCadastro

Application Name: Aplicação de Cadastro

Min SDK Version: 10

Page 10: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

Page 11: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

main.xml

ButtonId: “@+principal/btcadastrarpessoas”layout_width: “fill_parent”text: “Cadastrar pessoa”ButtonId: “@+principal/btlistrarpessoas”layout_width: “fill_parent”text: “Listar pessoas cadastradas”

Page 12: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

cadastro.xml

TextViewtext: “Módulo de cadastro. Digite seus dados abaixo:”TextViewtext: “Nome:”EditTextid: “@+cadastro/ednome”layout_width: “fill_parent”TextView

text: “Profissão:”

EditTextid: “@+cadastro/edprofissao”layout_width: “fill_parent”TextViewtext: “Idade:”EditTextid: “@+cadastro/edidade”layout_width: “fill_parent”

Page 13: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

cadastro.xml

LinearLayoutorientation: horizontal

layout_widith: fill_parentgravity: center

Buttonid: “@+cadastro/btcadastrar”text: “Cadastrar pessoa”Buttonid: “@+cadastro/btcancelar”text: “Cancelar”

Page 14: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

listacadastrados.xmlTextView

text: “Lista de pessoas cadastradas.”textColor: “#ffffff”textSize: “20sp”

LinearLayoutorientation: horizontal

layout_widith: fill_parentid: “@+id/layoutNome”

TextViewtext: “Nome:”textColor: “#ffff00”textSize: “20sp”TextViewtext: “”TextColor “#ffffff”textSize “20sp”id: “@+lista/txtnome”

Page 15: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

listacadastrados.xml

LinearLayoutorientation: horizontal

layout_widith: fill_parentid: “@+id/layoutProfissao”

TextViewtext: “Profissao:”textColor: “#ffff00”textSize: “20sp”TextViewtext: “”TextColor “#ffffff”textSize “20sp”id: “@+lista/txtprofissao”

Page 16: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

listacadastrados.xml

LinearLayoutorientation: horizontal

layout_widith: fill_parentid: “@+id/layoutIdade”

TextViewtext: “Idade:”textColor: “#ffff00”textSize: “20sp”TextViewtext: “”TextColor “#ffffff”textSize “20sp”id: “@+lista/txtidade”

Page 17: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

listacadastrados.xml

LinearLayoutorientation: horizontal

layout_widith: fill_parentgravity: centerid: “@+id/layoutBotoes”

Buttonid: “@+lista/btvoltar”text: “Voltar”Buttonid: “@+lista/btavancar”text: “Avançar”

Buttonid: “@+lista/btmenu”layout_width: “fill_parent”text: “Menu Princiapal”

Page 18: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

Registro.javapublic class Registro {String nome;String profissao;String idade;Registro Prox;Registro Ant;

}

Page 19: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

AppLayout.javavoid CarregaTelaPrincipal () {

setContentView(R.layout.main);Button btcadpess = (Button)

findViewById(R.principal.btcadastrarpessoas);Button btlistapess = (Button)

findViewById(R.principal.btlistarpessoas);btcadpess.setOnClickListener(new View.OnClickListener(){

public void onClick(View arg0){CarregaTelaCadastro();

}});btlistapess.setOnClickListener(new View.OnClickListener(){

public void onClick(View arg0){CarregaListaPessoas();

}});}

Page 20: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

void CarregaTelaCadastro() {setContentView(R.layout.cadastro);Button btcadastrar = (Button)

findViewById(R.cadastro.btcadastrar);Button btcancelar = (Button)

findViewById(R.cadastro.btcancelar);btcadastrar.setOnClickListener(new View.OnClickListener(){

public void onClick(View arg0){try {

reg = new Registro();ednome =

(EditText)findViewById(R.cadastro.ednome);edprof =

(EditText)findViewById(R.cadastro.edprofissao);edidade =

(EditText)findViewById(R.cadastro.edidade);

Page 21: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

reg.nome = ednome.getText().toString();

reg.profissao = edprof.getText().toString();

reg.idade = edidade.getText().toString();

if(pri==null)pri=reg;reg.Ant = ult;

if(ult==null) ult=reg;else {

ult.Ant = reg;ult=reg;

}numreg++;

showMessage("Cadastro efetuado comsucesso", "Aviso");

CarregaTelaPrincipal();}catch(Exception e) {

showMessage("Erro ao cadastrar", "Erro");

}}});

Page 22: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

btcancelar.setOnClickListener(newView.OnClickListener(){

public void onClick(View arg0){CarregaTelaPrincipal();

}});

}

void CarregaListaPessoas() {if(numreg==0) {

showMessage("Nenhum registro cadastrado", "Aviso");

CarregaTelaPrincipal();return;

}setContentView(R.layout.listacadastrados);pos=1;aux=pri;

Page 23: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

TextView txtnome = (TextView) findViewById(R.lista.txtnome);

TextView txtidade = (TextView) findViewById(R.lista.txtidade);

TextView txtprofissao = (TextView) findViewById(R.lista.txtprofissao);

Button btmenu = (Button) findViewById(R.lista.btmenu);Button btavancar = (Button) findViewById(R.lista.btavancar);Button btvoltar = (Button) findViewById(R.lista.btvoltar);txtnome.setText(aux.nome);txtidade.setText(aux.idade);txtprofissao.setText(aux.profissao);btmenu.setOnClickListener(new View.OnClickListener(){

public void onClick(View arg0){CarregaTelaPrincipal();

}});

Page 24: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

btvoltar.setOnClickListener(new View.OnClickListener(){public void onClick(View arg0){

if(pos==1) return;pos--;aux=aux.Ant;TextView txtnome = (TextView)

findViewById(R.lista.txtnome);TextView txtidade = (TextView)

findViewById(R.lista.txtidade);TextView txtprofissao = (TextView)

findViewById(R.lista.txtprofissao);txtnome.setText(aux.nome);txtidade.setText(aux.idade);txtprofissao.setText(aux.profissao);

}});

Page 25: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

btavancar.setOnClickListener(new View.OnClickListener(){public void onClick(View arg0){

if(pos==numreg) return;pos++;aux=aux.Prox;TextView txtnome = (TextView)

findViewById(R.lista.txtnome);TextView txtidade = (TextView)

findViewById(R.lista.txtidade);TextView txtprofissao = (TextView)

findViewById(R.lista.txtprofissao);txtnome.setText(aux.nome);txtidade.setText(aux.idade);txtprofissao.setText(aux.profissao);

}});

}

Page 26: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Aplicação de cadastro

Registro pri,reg,ult,aux;EditText ednome,edprof,edidade;int numreg,pos;public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);numreg=0;pri=null;ult=null;CarregaTelaPrincipal();

}public void showMessage(String Caption,String itle) {

AlertDialog.Builder dialogo = new AlertDialog.Builder(AppCadastro.this);

dialogo.setTitle(Title);dialogo.setMessage(Caption);dialogo.setNeutralButton("OK", null);dialogo.show();

}

Page 27: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Melhorando!

Vamos adicionar uma imagem associada à pessoa cadastrada;

Essa imagem deve ser escolhida de uma galeria (obviamente, contendo mais de uma imagem);

Habilite a função de edição, onde todos os dados serão alterados; DICA: Use a mesma tela do cadastro!

Page 28: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+6. Deploy de sua aplicação

Page 29: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Distribuindo sua aplicação

Verificações necessárias antes da distribuição: Retirar toda a geração de log:

Remova arquivos; Desative o código de geração de Log;

Se você está usando o atributo "android:debuggable", no tag <application>, do "AndroidManifest.xml", marque como "false" ou retire o atributo;

Page 30: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Distribuindo sua aplicação

Modifique os atributos "android:versionCode" e "android:versionName", da tag <manifest> no "AndroidManifest.xml", para as versões corretas. Isto é de fundamental importância, especialmente se você

está gerando uma atualização; Verifique os atributos: "android:icon" e "android:label"

do tag <application>, no "AndroidManifest.xml", para a versão de produção;

Verifique se o ícone e o título estão corretos.

Page 31: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Distribuindo sua aplicação

Você tem que ter certeza que está com a versão de "produção" pronta.

É recomendado o uso de um software de SCM (Software Configuration Management), que gerencie versões e rótulos, como o SVN ou CVS.

Marque a versão de produção com um rótulo, faça "commit" e gere uma versão exclusiva para subir para o Google Play.

Page 32: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

A assinatura digital de uma aplicação protege seus usuários ao garantir que ela é autêntica e que não foi adulterada. Um detalhe muito importante é que, aplicações assinadas pelo

mesmo certificado podem compartilhar o mesmo processo e os mesmos dados.

Antes de instalar, é necessário assinar digitalmente o seu APK. Se você não fizer isto, não poderá instalar via ADB, (embora seja

possível executar copiando o APK diretamente para seu dispositivo).

Page 33: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

A tendência do Android é acabar com o uso de aplicações sem assinatura digital. Logo, é recomendado que sempre você sempre assine as suas

aplicações.

Para assinar, é preciso um certificado digital de Code Signing ou Assinatura de Código. Você tem duas opções: adquirir um certificado emitido por uma Autoridade Certificadora

reconhecida, ou criar um certificado auto-assinado.

Page 34: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Para adquirir um certificado de assinatura de código, você pode procurar boas empresas, como estas abaixo: Serasa: Validade 12 meses: R$ 1.255,20; Verisign: Validade 12 meses: US$ 499,00; Thawte: Validade 12 meses: US$ 299,00.

Existem várias empresas no Brasil: Comodo; CertSolutions; Certisign.

Page 35: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

O grande problema reside no fato de que as regras do Google Play exigem um certificado que seja válido até 2033! Não é muito provável que uma empresa emita um

certificado com essa validade, pelo preço que seja.

Mas nem tudo está perdido! Ainda podemos gerar uma aplicação auto-assinada...

Page 36: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Você pode emitir um certificado e assinar seu código com ele.

Isto garante que o seu código não foi violado, mas apenas para você mesmo. É por isso que é recomendada a aquisição e uso de um

certificado de Assinatura de Código emitido por uma empresa reconhecida.

Porém, os custos são altos, tornando o certificado auto-assinado a alternativa mais viável.

Page 37: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Gerando uma aplicação auto-assinada com o ADT

Page 38: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Page 39: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Page 40: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Page 41: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Geração do Certificado e Assinatura

Page 42: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+ZipAlign

ZipAlign é um alinhador de arquivo que provê uma importante otimização para arquivos de aplicações Android (.apk). O propósito é assegurar que todos os dados não

comprimidos comecem com um alinhamento particular em relação ao início do arquivo.

Page 43: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+ZipAlign

Arquivos de imagens, por exemplos são alinhados em “pedaços” de 4 bytes. Isso possibilita que todas as porções seja acessadas

diretamente, mesmo que contenham dados binários com restrições de alinhamento.

Isso reduz significativamente o consumo de memória RAM quando utilizamos a aplicação.

Page 44: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+ZipAlign

Esta ferramenta sempre deveria ser utilizada para alinhar o arquivo .apk antes da sua distribuição para usuários finais. Quando utilizamos o Eclipse com o ADT, o Assistente de

Exportação automaticamente usa o zipalign no arquivo .apk gerado.

Page 45: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Google Play

O Google Play é um serviço que torna mais fácil aos usuários encontrarem e fazerem downloads de aplicações Android para os seus dispositivos, seja do aplicativo embarcado ou pelo website (http://play.google.com).

Desenvolvedores utilizam o Google Play para distribuir as suas aplicações para os usuários.

Page 46: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Google Play

Uma vez registrado, é possível fazer upload de aplicações, atualizá-las e publicá-las quando estiverem prontas. Tudo isso o número de vezes que forem necessárias.

Quando publicadas, usuários poderão ver, baixar e classificar as suas aplicações.

Page 47: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Google Play

Para publicar aplicações no Google Play, primeiro é necessário se registrar no serviço utilizando uma conta Google e aceitar os termos de serviço, além de pagar uma taxa pelo registro (US$ 25,00). https://play.google.com/apps/publish/.

A qualquer momento depois de publicar uma aplicação, o desenvolvedor pode fazer o upload e publicar uma atualização de uma aplicação.

Page 48: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Google Play

Quando uma atualização é publicada, os usuários que já tiverem instalado a aplicação receberão uma notificação de que uma atualização está disponível para a aplicação. Então, eles podem escolher se irão atualizar para a versão

mais recente.

Antes de fazer o upload da aplicação, tenha a certeza de que você alterou os atributos “android:versionCode” e “android:versionName” na tag <manifest> do arquivo manifest.xml.

Page 49: + Curso de Android 19ª Jornada de Cursos. + 5. Criando aplicações Android (cont.)

+Google Play

O nome do pacote deve ser o mesmo da versão existente da aplicação, e deve ser assinada com a mesma chave.

Se essas condições não estiverem satisfeitas, o Google Play irá considerar a atualização como uma nova aplicação, não sendo oferecida como atualização para os usuários.