+
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
+Mudança de Layout
+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”
+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();}
});}
+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();}
});}
+Mudança de Layout
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);CarregaTelaPrincipal();
}
+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
+Aplicação de cadastro
+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”
+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”
+Aplicação de cadastro
cadastro.xml
LinearLayoutorientation: horizontal
layout_widith: fill_parentgravity: center
Buttonid: “@+cadastro/btcadastrar”text: “Cadastrar pessoa”Buttonid: “@+cadastro/btcancelar”text: “Cancelar”
+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”
+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”
+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”
+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”
+Aplicação de cadastro
Registro.javapublic class Registro {String nome;String profissao;String idade;Registro Prox;Registro Ant;
}
+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();
}});}
+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);
+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");
}}});
+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;
+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();
}});
+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);
}});
+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);
}});
}
+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();
}
+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!
+6. Deploy de sua aplicação
+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;
+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.
+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.
+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).
+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.
+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.
+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...
+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.
+Geração do Certificado e Assinatura
Gerando uma aplicação auto-assinada com o ADT
+Geração do Certificado e Assinatura
+Geração do Certificado e Assinatura
+Geração do Certificado e Assinatura
+Geração do Certificado e Assinatura
+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.
+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.
+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.
+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.
+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.
+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.
+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.
+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.