Escolar Documentos
Profissional Documentos
Cultura Documentos
Ento meu povo, para termos um incio mais tranquilo, eu vou explicar sobre algumas
ferramentas que vamos trabalhar daqui em diante. Elas sero a base para que voc possa
fazer praticamente qualquer aplicao Android. Vou deixar claro que vou focar todos os
tutoriais em um ambiente de desenvolvimento no Windows 8, mas saibam que todas essas
ferramentas tm para Linux tambm. Dessa forma se voc curte o sistema operacional,
voc pode baix-las e fazer meus tutoriais da mesma forma. =]
Eu vou me referir como ambiente de desenvolvimento ao conjunto de todas as
ferramentas necessrias para podermos desenvolver uma aplicao Android. Mas quais
so essas ferramentas, Santy? (sim, esse o meu apelido).
O ambiente de desenvolvimento padro precisa de pelo menos o compilador Java e do kit
de desenvolvimento Android do Google. Sem eles, meus amigos, esqueam. Eu aconselho
fortemente (tipo ... FORTEMENTE) vocs inclurem o Eclipse IDE como parte do ambiente
de desenvolvimento. Ele ajuda muito o desenvolvedor evitando um monte de trabalho
braal com compilao e durante a procura de erros quando vocs comearem a
programar.
Vou explicar cada uma dessas ferramentas por partes.
O compilador Java
Para quem no sabe o que um compilador, ele um programa que transforma seu
cdigo escrito em um programa de computador. Faz sentido ele ser essencial para quem
quer desenvolver aplicaes para Android, no? o compilador Java que vai ler o
programa que voc vai escrever e transformar no arquivo que voc geralmente baixa do
Google Play quando instala um aplicativo de l.
O real nome do compilador Java SE Development Kit, traduzindo para o portugus fica:
kit de desenvolvimento Java SE. O SE significa Standard Edition, que no portugus fica:
edio padro. Tudo isso pode ser abreviado como JDK. \o/
Eclipse IDE:
Vamos com calma que tudo dar certo. Mas se vocs j quiserem ir fuando ...
A Figura 1 mostra as telas das primeira e segunda opes. Vale falar que essas telas so
do Android verso 4.0.3 (Ice Cream Sandwich). Talvez o caminho para chegar nessas
opes varie dependendo a verso do seu Android.
A Figura 2 mostra os comandos que eu fiz e o meu aparelho listado ali. No meu
computador, o SDK est copiado dentro da minha pasta de Arquivos e Programas. Eu
apaguei as primeiras letras do nmero identificador do meu celular porque eu no quero
que vocs o saibam. =P
Na janela que abriu, expanda a pasta Android, selecione a opo Android Application
Project e clique em Next.
Clique em Next nas prximas telas at aparecer a tela Blank Activity. Nessa tela, voc
modifica o nome da Activity para JokenpoActivity. Clique em Finish.
Programando o Jokenpo
Aps vocs criarem o projeto, vo no lado esquerdo da janela do Eclipse, em Package
Explorer abram a pasta res e a subpasta values. Nessa ltima pasta, tem um arquivo
strings.xml, abra-o clicando duas vezes sobre ele. Quando voc abrir esse arquivo, ele
vai ser apresentado no centro da janela do Eclipse. Nessa parte, logo abaixo, tem uma aba
<string name="jogadaPlayer">Voc</string>
<string name="resultado">Resultado</string>
<string name="jogadaPC">Computador</string>
</resources>
Escrevendo isso, ns acabamos de criar um conjunto de constantes Strings que sero
utilizadas no jogo. Como eu falei, a explicao mais aprofundada eu deixarei para o
prximo tutorial.
Aps isso, salve e feche o arquivo. Agora, crie uma pasta dentro da pasta res chamada
drawable. Aps cri-la, coloque dentro os arquivos de imagem anexos nesse tutorial.
Esses arquivos podem serbaixados aqui. Para criar uma pasta em res, clique com o
boto direito em res, selecione New e clique em Folder. Depois de criar a pasta,
arraste os arquivos de imagem para dentro dela. A Ilustrao 4 mostra como o projeto vai
ficar depois disso.
Acabamos de incluir no projeto as imagens que ficaro nos botes quando voc for
escolher se voc quer pedra, papel ou tesoura. Essas imagens eu busquei na internet e,
como eu vi em vrios blogs, ento eu conclui que elas caram em domnio pblico. De
qualquer forma, eu deixo claro que esse tutorial serve unicamente como aprendizado e
no como uma forma de eu ganhar dinheiro.
Depois disso, abra a pasta res e abra a subpasta layout. Nessa ltima pasta tem um
arquivo chamado activity_jokenpo.xml. Abra esse arquivo e selecione a aba
activity_jokenpo.xml, assim como fizemos quando editamos o arquivo strings.xml.
Nesse editor de texto, escreva as seguintes linhas:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".JokenpoActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button2"
android:layout_centerHorizontal="true"
android:text="@string/opcoes"
android:textSize="30sp" />
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_toLeftOf="@+id/button2"
android:background="@drawable/pedra" />
<Button
android:id="@+id/button2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_centerHorizontal="true"
android:background="@drawable/papel" />
<Button
android:id="@+id/button3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_toRightOf="@+id/button2"
android:background="@drawable/tesoura" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/ultimaJogada"
android:textSize="30sp" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_toLeftOf="@+id/imageView2"
android:text="@string/jogadaPlayer" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:text="@string/resultado" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_toRightOf="@+id/imageView2"
android:text="@string/jogadaPC" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_toLeftOf="@+id/imageView2" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_centerHorizontal="true" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_toRightOf="@+id/imageView2" />
</RelativeLayout>
Acabamos de modelar a principal tela do jogo com esse cdigo. Agora vamos incluir a
lgica no jogo. Para isso, abra a pasta src e a subpasta com.santy.jokenpo. Ali dentro
tem um arquivo chamado JokenpoActivity.java. Abra-o e digite no editor o seguinte
cdigo:
package com.santy.jokenpo;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jokenpo);
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.pedr
a);
realizaJogadaPC(1);
}
});
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.pape
l);
realizaJogadaPC(2);
}
});
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.teso
ura);
realizaJogadaPC(3);
}
});
}
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.pedr
a);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empa
tou);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.venc
eu);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perd
eu);
}
else if(jogadaPC==2) {
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.pape
l);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perd
eu);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empa
tou);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.venc
eu);
}
else if(jogadaPC==3) {
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.teso
ura);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.venc
eu);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perd
eu);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empa
tou);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar
if it is present.
getMenuInflater().inflate(R.menu.jokenpo, menu);
return true;
}
}
Muito provavelmente o Eclipse deve apontar algum erro. Apontando ou no, necessrio
que ele atualize o projeto com todas as modificaes que voc fez. Para isso, clique no
menu superior Project e selecione Clean .... Na janela que abrir, selecione Clean all
projects e clique em OK. Nesse momento, o Eclipse atualiza todo o projeto e elimina os
erros. As Ilustraes abaixo mostram o caminho e a tela que ser aberta.
executar o jogo no emulador que vem junto com o SDK. Infelizmente no d para mostrar
tudo para todo mundo em um tutorial s. Aguardem. =]
Aprendemos hoje a instalar os drivers de um dispositivo Android para desenvolvimento.
Aprendemos tambm a configurar o dispositivo para ele servir como um aparelho teste.
Vimos como criar um projeto no Eclipse e como executar um aplicativo no celular. Bastante
coisa n!?
No tutorial Desenvolvimento de jogos para Android Parte 2, eu mostrei para vocs como
instalar o driver do seu dispositivo e como configur-lo para ele executar a sua aplicao
Android. Programamos tambm um game de Jokenp.
Ento meu povo, hoje vamos aprender como executar o jogo que vocs programaram
no emulador do SDK Android para qualquer tipo de hardware. Achei melhor deixar a parte
de explicao do programa para um nico tutorial. O tutorial que explicar todo o cdigo
ser o prximo. Que tal irmos devagar? Muita informao s vezes confunde. ;D
Bora executar o jogo no emulador? Bora.
Logo depois de voc clicar em New... a janela de criao de um novo dispositivo virtual
aberta. Essa janela mostrada na Ilustrao 3. Em ADV Name voc nomeia o dispositivo
virtual como voc desejar. Eu nomeei como DispositivoVirtual. Em Device, voc escolhe
um dispositivo padro certificado pelo Google. Eu escolhi um que tem a tela pequena
(320x480). Em Target voc coloca no mnimo a verso de API que a sua aplicao est
sendo desenvolvida. Ns colocamos Android 2.2, lembra? Eu coloquei uma memria flash
no carto SD de 256 MB. A nossa aplicao independe disso, mas eu coloquei mesmo
assim. Hehe.
Nesse tutorial ns vimos como executar um aplicativo Android no emulador que vem com o
SDK Android. No prximo tutorial veremos o que significa cada linha de cdigo que
escrevemos ao programar o jogo Jokenp do Desenvolvimento de jogos para Android
Parte 2.
editadas foram src, res, drawable, layout e values, como mostrado na figura ao
lado. Segue uma explicao breve sobre a funo de cada uma delas no projeto Android.
layout: contm arquivos XML que descrevem a disposio dos elementos nas
diferentes telas do aplicativo;
values: contm arquivos que definem constantes com valores pr-definidos pelo
programador.
Existem outras pastas importantes que no mexemos no jogo do Jokenp. Se voc quiser
saber mais sobre cada uma dessas pastas, d uma olhada aqui. No vamos nos
desconcentrar do objetivo do tutorial. =]
strings.xml:
um arquivo que especifica os valores das constantes textuais que sero utilizadas no
cdigo. O nome do aplicativo e textos que fazem parte dos objetos da tela esto
Na primeira linha,
apenas especificada qual verso do XML que o cdigo est escrito, conforme a W3C, e
em qual tipo de codificao o arquivo ser lido. Isso meio que padro, a no ser que
voc queira mudar a codificao. Eu recomendo no mudar, seno caracteres especiais
como '' e '' sero apresentados de forma errada na tela.
Cada linha que inicia com a tag string uma declarao de constante. Os nomes das
constantes esto entre aspas duplas e os valores delas esto entre a tag de abertura
(<tag>) e a tag de fechamento (</tag>).
No Jokenp, foram criadas as constantes app_name, action_settings, opcoes,
ultimaJogada, jogadaPlayer, resultado e jogadaPC. Essas constantes sero
utilizadas no arquivo activity_jokenpo.xml, quando criarmos a tela do jogo, e durante a
programao da lgica, no arquivo JokenpoActivity.java.
activity_jokenpo.xml:
um arquivo de layout, ou seja, especifica a disposio dos objetos grficos na tela do
celular ou tablet. Toda a tela do aplicativo tem um arquivo XML que descreve a posio e
formato dos objetos. possvel voc criar, limitar as bordas e posicionar cada objeto
diretamente no cdigo Java, porm esse um trabalho cansativo e desnecessrio. A
edio de um objeto feita no cdigo Java como, por exemplo, a incluso de uma opo
em um box, aps o usurio clicar em um boto da tela. Como no jogo teve somente uma
tela, ento existe somente esse arquivo na pasta layout. No arquivo tinha:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr
oid"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".JokenpoActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button2"
android:layout_centerHorizontal="true"
android:text="@string/opcoes"
android:textSize="30sp" />
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_toLeftOf="@+id/button2"
android:background="@drawable/pedra" />
<Button
android:id="@+id/button2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_centerHorizontal="true"
android:background="@drawable/papel" />
<Button
android:id="@+id/button3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/textView2"
android:layout_toRightOf="@+id/button2"
android:background="@drawable/tesoura" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/ultimaJogada"
android:textSize="30sp" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_toLeftOf="@+id/imageView2"
android:text="@string/jogadaPlayer" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:text="@string/resultado" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_toRightOf="@+id/imageView2"
android:text="@string/jogadaPC" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_toLeftOf="@+id/imageView2" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_centerHorizontal="true" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView4"
android:layout_toRightOf="@+id/imageView2" />
</RelativeLayout>
Nesse cdigo, so especificados vrios objetos que fazem parte de um layout, que
especificado na tag RelativeLayout. Ele nos d a liberdade de incluir os objetos onde
bem entendemos, desde que seja especificada a posio dele na tela. Alguns atributos
interessantes dessa tag so android:layout_width e android:layout_height que
especificam o tamanho do layout. Nesse caso, ambos foram atribudos com
match_parent, que deixa claro que estamos lidando com toda a rea da tela do aparelho.
A tag Button informa que foi adicionado um boto na tela, a tag TextView uma etiqueta
textual e a tag ImageView uma simples imagem. Dessa forma, adicionamos um total de
trs botes, cinco etiquetas de texto e trs imagens.
Quanto aos atributos, muitos se repetem entre os objetos. Vou explicar cada um deles:
"android:id": um nome que o programador d para que esse objeto possa ser
referenciado nos arquivos Java;
Se voc for olhar bem, ver que existe uma etiqueta (TextView) central na tela (com id
igual a textView2) e todos os outros objetos so inseridos baseando-se na posio dessa
etiqueta. Tomando como base o significado de cada tag e atributo, no difcil entender
como eu modelei a tela do jogo. =]
JokenpoActivity.java:
um arquivo de cdigo fonte, ou seja, ali est toda a lgica do jogo implementada na
linguagem Java. Todo arquivo de cdigo fonte Java precisa ter a extenso .java e precisa
estar localizado em uma subpasta da pasta src. No caso desse jogo, foi necessrio
somente um arquivo de lgica. Esse arquivo tinha:
package com.santy.jokenpo;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
pedra.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.pedra
);
realizaJogadaPC(1);
}
});
Button papel = (Button)findViewById(R.id.button2);
papel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.papel
);
realizaJogadaPC(2);
}
});
Button tesoura = (Button)findViewById(R.id.button3);
tesoura.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
findViewById(R.id.imageView1).setBackgroundResource(R.drawable.tesou
ra);
realizaJogadaPC(3);
}
});
}
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.pedra
);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empat
ou);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.vence
u);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perde
u);
}
else if(jogadaPC==2) {
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.papel
);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perde
u);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empat
ou);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.vence
u);
}
else if(jogadaPC==3) {
findViewById(R.id.imageView3).setBackgroundResource(R.drawable.tesou
ra);
if(jogadaPlayer==1)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.vence
u);
else if(jogadaPlayer==2)
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perde
u);
else
findViewById(R.id.imageView2).setBackgroundResource(R.drawable.empat
ou);
}
}
Na linha onde tem setContentView, ns falamos para a aplicao jogar na tela o layout
especificado no arquivo activity_jokenpo.xml. Fcil, no? ;D
As linhas que iniciam Button pedra, Button papel e Button tesoura eu especifiquei o
que acontece quando o usurio clica nos botes pedra, papel e tesoura, respectivamente.
Vocs podem ver que so bem parecidas as linhas de cdigo entre eles. Onde tem
findViewById, eu pego a referncia dos botes que especificamos no arquivo
activity_jokenpo.xml. Depois de eu selecionar o boto que eu escolhi em
findViewById, eu programo a funcionalidade dele. A funcionalidade desses trs botes
so similares: adicionar na tela a imagem da opo que o usurio fez na jogada e iniciar o
mtodo (subrotina) realizaJogadaPC.
Classe MediaPlayer:
Ent
o pessoal, iniciando o tutorial, eu vou falar sobre um dos pontos positivos da linguagem
Java e da maioria das linguagens orientadas a objetos. Se voc precisa programar algo
que padro em vrios aplicativos, pode ter certeza que j existe isso implementado para
voc. No nosso caso, usaremos uma classe que l e toca vrios tipos de arquivos de som
no Android. Apresento a vocs a classe MediaPlayer.