O documento fornece uma introdução abrangente sobre a plataforma Android, cobrindo tópicos como: (1) o que é Android e como é desenvolvido, (2) ferramentas e componentes principais da plataforma como SDK, emulador e estrutura de projeto, (3) arquitetura de aplicativos Android incluindo atividades, serviços e outros componentes.
2. • Android - plataforma de software que permite criar
aplicativos para dispositivos móveis, composta por um
sistema operacional, componentes, ferramentas,
dispositivos e um ecosistema.
• Desenvolvido pela empresa Google, com suporte da
OHA (Open Handset Alliance), que agrega empresas
com o objetivo de definir um ecosistema e um padrão
colaborativo e aberto para dispositivos móveis.
• O Android fornece APIs , ferramentas, JVM
(Dalvik/ART), SQL Lite, Application Framework,
Browser, APIs específicas (ex. Qualcomm Vuforia),
tendo com OS base o Linux.
Plataforma e Dispositivos Android
3. • Todas as ferramentas para Android são gratuitas e
disponíveis para os principais sistemas operacionais
(Mac OS,Windows, Linux)
– JDK – Java Development Kit
• http://www.oracle.com/technetwork/java/index.html
– Android SDK – SDK específico para Android,
fornecido pela Google, com libraries, tools, emulator
• http://developer.android.com/sdk/index.html
– Eclipse ADT Plugin – componente que complementa
a IDE Eclipse para permitir o desenvolvimento
Android através dessa IDE
• http://developer.android.com/sdk/installing/installing-adt.html
Plataforma e Dispositivos Android
4. • Aplicativos Android (APKs) – Arquivo com extensão
APK (Android Package), que é um pacote com o
código compilado, arquivos de configuração, arquivos
XML, arquivos de propriedade, imagens, arquivos de
aúdio e vídeo e outros conforme composição da
aplicação.
• Emulador – ferramenta que permite testar um aplicativo
Android (APK) na estação de trabalho de
desenvolvimento, sem necessidade de um dispositivo
real
Plataforma e Dispositivos Android
5. • AVD - Android Virtual Device – simula uma imagem
de um dispositivo e/ou versão do Android para
execução no emulador
– Executado tanto pela IDE (modo gráfico) quanto pela
linha de comando
– C:android-studiosdktoolsemulator.exe -avd Teste-
AVD-4.1.2 -netspeed full -netdelay none
Plataforma e Dispositivos Android
7. • Estrutura de um projeto Android
– src – pacotes e classes com código fonte Java do aplicativo,
como qualquer outro projeto Java.
– gen – arquivos gerados automaticamente pelo Eclipse plugin,
como a classe R que dá acesso aos recursos do projeto. Não
devem ser modificados pelo desenvolvedor.
– assets – pasta com arquivos de recursos, dependências
(conteúdo) utilizados na aplicação, como imagens, vídeos,
aúdio. Não é criado por default.
– bin – arquivos compilados pelo Eclipse ADT, geralmente
não modificados pelo desenvolvedor também.
• Arquivos .dex (Dalvik Executable)
Plataforma e Dispositivos Android
8. – Arquivo com versão do SDK (sdk.jar)
• android.jar para versão alvo da aplicação
– res – pasta de recursos (resources), com várias sub-pastas
que possuem recursos com diferentes finalidades na
aplicação.
• drawable - armazena imagens que são usadas na
aplicação, conforme resolução, como ícones. 3 resoluções
por default.
• layout – arquivos XML que representam layouts de tela da
aplicação. Arquivo main.xml gerado por default.
• values – arquivos XML que definem constantes globais,
strings, estilos, cores, etc.
– http://developer.android.com/guide/topics/resources/available-resources.html
Plataforma e Dispositivos Android
9. –AndroidManifest.xml
• Arquivo XML que define a aplicação Android.
• Responsável pela configuração do aplicativo
Android, declaração de diversos componentes, tais
como Activities, Intents, versões, permissões e
outros parâmetros da aplicação.
Plataforma e Dispositivos Android
10. • Arquitetura de um aplicativo Android (componentes)
• Activity
–representa e apresenta uma tela do aplicativo. Além de
exibir views, também pode chamar outra Activity.
Deriva de android.app.Activity.
–Todas Activities devem ser declaradas no
AndroidManifest.xml
– http://developer.android.com/reference/android/app/Activity.html
Plataforma e Dispositivos Android
12. • Services
– componente responsável por executar tarefas em
background, geralmente tarefas contínuas ou intermitentes,
sem ter uma tela (GUI).
– Derivados de android.app.Service
– Também deve ser declarados no arquivo
AndroidManifest.xml
– Context.startService(), Context.bindService()
– http://developer.android.com/reference/android/app/Service.html
Plataforma e Dispositivos Android
13. • Intents
– componente intermediário entre activities e applications,
permitindo passar mensagens e dados entre dois
componentes.
– Provê acesso a serviços nativos tais como camera, browser,
notificações, etc.
– Geralmente, possui ação (Action) e dados (data)
– IntentFilter descreve quais intents uma activity (ou Intent
Receiver) é capaz de tratar. Também informados no
AndroidManifest.xml
– Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
intent.putExtra("myKey",AnyValue); startActivity(intent);
– http://developer.android.com/reference/android/content/Intent.html
Plataforma e Dispositivos Android
14. • Intent Receiver
– Reagir a eventos externos a aplicação
– Registrados no AndroidManifest.xml
– Context.registerReceiver()
– Context.broadCastIntent()
• http://developer.android.com/training/sharing/receive.html
– Classe BroadCastReceiver
• http://developer.android.com/reference/android/content/BroadcastReceiver.html
• http://developer.android.com/guide/topics/manifest/receiver-element.html
Plataforma e Dispositivos Android
15. • Views
– Elemento de GUI. Trata eventos do usuário e
desenha interface.
– http://developer.android.com/reference/android/view/View.html
• Content Providers
– componente responsável por armazenar e gerenciar
dados da aplicação (data sources)
– Os dados podem ser armazenados em arquivos,
banco SQL Lite, Shared Preferences
– Content Provider permite compartilhar os dados com
outros aplicativos
– http://developer.android.com/guide/topics/providers/content-providers.html
Plataforma e Dispositivos Android
16. • Geração de APKs
– Signed/Unsigned
• File – Export; Android – Export Android Application;
• Na tela “Select the project to export”, selecione o projeto
alvo
• Na tela Keystore Selection, escolha se deseja usar uma
keystore e chave existentes ou criar novas
• Especifique o destino (path, name) do seu APK
• Instale em seu tablet/smartphone.
Plataforma e Dispositivos Android
17. • AndroidManifest.xml -
http://developer.android.com/guide/topics/manifest/manifest-intro.html
– arquivo principal do projeto onde são feitas as configurações
do aplicativo.
– obrigatoriamente deve ficar na pasta raiz do projeto.
– obrigatório que cada activity do projeto esteja declarada no
arquivo AndroidManifest.xml
– Permissões
• <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
– Entry point da aplicação
• <intent-filter>
• <action android:name="android.intent.action.MAIN" />
• <category android:name="android.intent.category.LAUNCHER" />
• </intent-filter>
Plataforma e Dispositivos Android
18. • Layout Managers
– Todos gerenciadores de layout herdam (is-a relationship) da classe
android.view.ViewGroup
• http://developer.android.com/reference/android/view/ViewGroup.html
• http://developer.android.com/guide/topics/ui/declaring-layout.html
• http://developer.android.com/guide/topics/ui/layout/listview.html
• http://developer.android.com/guide/topics/ui/layout/gridview.html
– AbsoluteLayout : Posiciona os componentes fornecendo coordenadas específicas x e
y.
• http://developer.android.com/reference/android/widget/AbsoluteLayout.html
– FrameLayout : Tipo mais comum e simples de layout. Usado quando um
componente deve ocupar toda a tela.
• http://developer.android.com/reference/android/widget/FrameLayout.html
– LinearLayout : Utilizado para organizar os componentes na horizontal ou na
vertical
• http://developer.android.com/guide/topics/ui/layout/linear.html.
Plataforma e Dispositivos Android
19. • Layout Managers
– TableLayout : Pode ser usado para organizar os componentes em uma tabela com
linhas e colunas.
• http://developer.android.com/reference/android/widget/TableLayout.html
– RelativeLayout : Permite posicionar um componente relativo a outro, por exemplo,
abaixo, acima ou ao lado de um componente já existente.
• http://developer.android.com/guide/topics/ui/layout/relative.html
Plataforma e Dispositivos Android
20. • SharedPreferences
– SharedPreferences – permite salvar preferências do usuário
ou configurações específicas para o aplicativo, através de um
mecanismo tipo chave/valor.
– Aplicativo pode ter várias SharedPreferences conforme
necessidade
– getSharedPreferences (String name, int mode)
– Armazenar dados, tipos primitivos e Strings
– Ler dados, devemos usar um editor
– http://developer.android.com/reference/android/content/SharedPreferences.html
Plataforma e Dispositivos Android
21. • SQL Lite
– Sistema de Banco de Dados para sistemas embarcados
(embedded database) - http://www.sqlite.org/
– Criar uma subclasse de SQLiteOpenHelper
• http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.htm
– Sobrescrever os métodos OnCreate() e OnUpgrade()
• OnCreate() - criar o banco, tabelas, inicialização, povoar
• OnUpgrade() - alterações no BD, schema, tabelas, colunas,
etc
– Métodos getWritableDatabase(), getReadableDatabase()
• Retornam instância de SQLiteDatabase
• http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
Plataforma e Dispositivos Android
22. • SQL Lite
– SQLiteDatabase
– Métodos query(), rawQuery(), insert(), update(), delete()
– Class Abstrata Cursor
http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
– Interface Cursor
http://developer.android.com/reference/android/database/Cursor.html
Plataforma e Dispositivos Android
23. • JSON
– JSON - JavaScript Object Notation
– Formato leve para troca de dados
– http://json.org/
– http://www.w3schools.com/json/
– http://jsonlint.com/
{
"id": 1,
"name": "Foo",
"price": 123,
"tags": ["Bar","Eek" ],
"stock": {
"warehouse": 300,
"retail": 20 }
}
Plataforma e Dispositivos Android
24. • JSON
– Android possui API para JSON
– JSONObject – tratar objeto (String) JSON
• http://developer.android.com/reference/org/json/JSONObject.html
– JSONArray – tratar array de objetos JSON
• http://developer.android.com/reference/org/json/JSONArray.html
JSONObject json = new JSONObject(jsonString);
try {
String name = json.getString("name");
} catch (JSONException e) {
e.printStackTrace();
//tratar exception
}
Plataforma e Dispositivos Android
25. • Conexão HTTP
– Preferencialmente, utilizar a classe HttpUrlConnection
• http://developer.android.com/reference/java/net/HttpURLConnection.html
• http://android-developers.blogspot.com.br/2011/09/androids-http-clients.html
• http://developer.android.com/training/basics/network-ops/connecting.html
• http://developer.android.com/reference/java/net/URLConnection.html
• https://developer.android.com/training/articles/security-ssl.html
Plataforma e Dispositivos Android
26. • TextView
– Representa um label como na maioria dos frameworks de GUI
– Texto não editável
– android:typeface – monospace
– android:textStyle – bold, italic, bold_italic
– android:textColor - #FF0000
• http://developer.android.com/reference/android/widget/TextView.html
• http://android-developers.blogspot.com.br/2008/03/linkify-your-text.html
Plataforma e Dispositivos Android
27. • EditText
– Representa um campo editável – field na maioria dos
frameworks GUI
– Subclasse de TextView
– android:autoText – auto spelling
– android:capitalize – primeira letra maiúscula
– android:digits – somente certos dígitos
– Android.singleLine – entrada single ou multiple line
• http://developer.android.com/reference/android/widget/EditText.html
• http://developer.android.com/guide/topics/ui/controls/text.html
Plataforma e Dispositivos Android
28. • Button
– Button é subclasse de TextView
– Todos atributos se aplicam para Button
• http://developer.android.com/reference/android/widget/Button.html
• http://developer.android.com/reference/android/widget/TextView.html
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/self_destruct"
android:onClick="selfDestruct" />
Plataforma e Dispositivos Android
29. • ImageView
– Android tem dois componentes básicos para imagens
• Imagens locais ao projeto, URIs - setImageURI (Uri uri)
• ImageView subclasse de View
• ImageButton subclasse de ImageView
• http://developer.android.com/reference/android/widget/ImageView.html
• http://developer.android.com/reference/android/widget/ImageButton.html
• http://developer.android.com/training/animation/zoom.html
• http://developer.android.com/training/displaying-bitmaps/display-bitmap.html
Plataforma e Dispositivos Android
30. • CheckBox
– Caixa de check clássica
– Dois estados: checked, unchecked
– Click alter os estados, também via métodos
– Toggle()
– IsChecked()
– setChecked()
• http://developer.android.com/reference/android/widget/CheckBox.html
• http://developer.android.com/guide/topics/ui/controls/checkbox.html
Plataforma e Dispositivos Android
31. • RadioButton e RadioGroup
– Como checkboxes, tem dois estados
– Permite apenas uma opção selecionada por vez
– Agrupamento (RadioGroup)
– Dois estados: checked, unchecked
– Click altera os estados, também via métodos
– check() - checar via ID
– clearCheck() - limpar estado de todos RadioButtons
– GetCheckedRadioButtonId() - ID do RadioButton checado
• http://developer.android.com/reference/android/widget/RadioButton.html
• http://developer.android.com/guide/topics/ui/controls/radiobutton.html
• http://developer.android.com/reference/android/widget/RadioGroup.html
Plataforma e Dispositivos Android
32. • Toast
– Possibilita notificação simples e rápida ao usuário
– Notificação é exibida na quantidade de espaço necessário para a
mensagem utilizada na Toast
– Permanece visível conforme tempo determinado
– método makeText(), três parâmetros: contexto, mensagem e
duração
• http://developer.android.com/reference/android/widget/Toast.html
• http://developer.android.com/guide/topics/ui/notifiers/toasts.html
Plataforma e Dispositivos Android
33. • ContextMenu, MenuInflater
– Menu contextual que aparece quando pressionamos longamente
uma dada view
– registerForContextMenu(View v) – registra view para usar
– onCreateContextMenu (ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) – método disparado após
o long press
– onContextItemSelected(MenuItem item) – disparado quando Item no
context menu é selecionado
• http://developer.android.com/reference/android/view/ContextMenu.html
• http://developer.android.com/reference/android/view/MenuInflater.html
• http://developer.android.com/guide/topics/ui/menus.html#context-menu
• http://developer.android.com/guide/topics/ui/menus.html
• http://developer.android.com/guide/topics/resources/menu-resource.html
Plataforma e Dispositivos Android
34. • OptionMenu
– Menu primário no Android
– Pode ser usado para configurações, pesquisa, e-mail, etc
– No Android 2.3-, mostrado pressionando Menu
– No Android 3.0+, apresentado na ActionBar através de ações na
tela e opções de overflow
• http://developer.android.com/guide/topics/ui/menus.html
• http://developer.android.com/guide/topics/ui/menus.html#options-menu
• http://developer.android.com/guide/topics/ui/actionbar.html
Plataforma e Dispositivos Android
35. • Events, EventListeners, EventHandlers
– Eventos no Android acontecem geralmente em função de ações
do usuário do aplicativo
– Click: componente com foco recebe Enter ou Touch;
– Long click: Mesmo que anterior, entretanto mais prolongado
– Touch Event: toque sobre um componente. Possível checar direção do toque
(baixo, cima, esquerda, direita);
– Focus Change: quando componente recebe ou perde foco;
– Key Event: componente com foco e qualquer tecla é pressionada;
– Selected Item: toda vez que um item é selecionado.
• http://developer.android.com/guide/topics/ui/ui-events.html
• http://developer.android.com/guide/topics/ui/ui-events.html#EventListeners
• http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers
Plataforma e Dispositivos Android
36. • Threads
– Thread normal
– (new Thread(new Runnable() { @Override public void run()
{ doLongOperation(); } })).start();
– http://developer.android.com/reference/java/lang/Thread.html
– http://developer.android.com/reference/java/lang/Thread.State.html
– https://developer.android.com/training/multiple-threads/run-code.html
Plataforma e Dispositivos Android
37. • Threads
– Handler
– Nova thread não deve rodar no contexto ou atualizar a UI thread
– Ponte entre nova thread e a UI queue
– final Handler myHandler = new Handler(){
@Override public void handleMessage(Message msg) {
updateUI((String)msg.obj); } }; (
new Thread(new Runnable() {
@Override public void run() {
Message msg = myHandler.obtainMessage();
msg.obj = doLongOperation();
myHandler.sendMessage(msg); } })).start();
http://developer.android.com/reference/android/os/Handler.html
– http://developer.android.com/reference/android/os/Handler.Callback.html
– https://developer.android.com/training/multiple-threads/communicate-ui.html
– http://developer.android.com/reference/android/os/HandlerThread.html
Plataforma e Dispositivos Android
38. • Threads
– AsyncTask
– Thread que pode manipular operações da UI
– class MyAsyncTask extends AsyncTask<Integer, String, Long> {
@Override protected LongdoInBackground(Integer... params) {
long start = System.currentTimeMillis();
for (Integer integer : params) {
publishProgress(“start processing “+integer);
doLongOperation(); publishProgress(“done processing “+integer);
} return start - System.currentTimeMillis(); }
@Override protected void onProgressUpdate(String... values) {
updateUI(values[0]); }
@Override protected void onPostExecute(Long time) {
updateUI(“Done,it took:”+ time +”millisecondes”); }
@Override protected void onPreExecute() {
updateUI(“Starting the process”); } }
MyAsyncTask aTask = new MyAsyncTask(); aTask.execute(1, 2, 3, 4, 5);
– http://developer.android.com/reference/android/os/AsyncTask.html
– http://developer.android.com/reference/android/os/AsyncTask.Status.html
Plataforma e Dispositivos Android
39. • Threads
– Timer
– Agendar jobs/serviços futuros ou recorrentes
– TimerTask timerTask = new TimerTask() {
@Override public void run() {
– doSomething();
– } };
– Timer timer = new Timer();
– timer.schedule(timerTask, 2000,2000);
– http://developer.android.com/reference/java/util/Timer.html
– http://developer.android.com/reference/java/util/TimerTask.html
Plataforma e Dispositivos Android
40. • Services
– Executar apps, processos em segundo plano
– Sem interface com usuário (ao contrário de Activities)
– Pode ser iniciado ou parado por uma Activity
– AndroidManifest.xml
• <service android:name=”.package.ServiceName”/>
• Context.startService()
• Context.bindService()
– http://developer.android.com/reference/android/app/Service.html
– http://developer.android.com/guide/components/services.html
– https://developer.android.com/training/run-background-service/create-service.html
Plataforma e Dispositivos Android
41. • Broadcast Receivers
– Escutar eventos do sistema
– Todos os BroadcastReceivers inscritos são notificados quando evento acontece
– Intent contém o evento
– Normalmente, sem intervenção do usuário (troca de msgs em background)
– Executar em no máximo 10 segundos (caso contrário use Service)
– http://developer.android.com/reference/android/content/BroadcastReceiver.html
Plataforma e Dispositivos Android
42. • ContentProvider
– Prover dados (data sources)
– Shared ContentProviders – públicos, acessados por várias apps
– Uri
– content://<authority>/<param1>/<param2>/…/<paramN>
– http://developer.android.com/reference/android/content/ContentProvider.html
– http://developer.android.com/guide/topics/providers/content-providers.html
– http://developer.android.com/tools/testing/contentprovider_testing.html
Plataforma e Dispositivos Android
43. • Fragments
– Android 3.0 HoneyComb
– Blank Activity
– Fragmento de uma tela em um aplicativo Android
– Reusável
– herda de android.app.Fragment
– Deve sempre estar contido em uma Activity
– Possui seu próprio cicloe de vida, afetado pelo lifecycle da Activity
– http://developer.android.com/reference/android/app/Fragment.html
– http://developer.android.com/guide/components/fragments.html
– http://developer.android.com/training/basics/fragments/index.html
Plataforma e Dispositivos Android
44. • Fragments
– View → findViewById()
– Fragment → findFragmentById() ou findFragmentByTag()
através do método getFragmentManager()
– método getActivity() retorna a Activity corrente do Fragment
– método beginTransaction() possibilita adicionar, remover ou
substituir um Fragment em tempo de execução
Plataforma e Dispositivos Android
49. cursos@nxt-mobile.com
Todas as marcas, nomes, relatórios e recursos visuais utilizados e/ou citados nessa apresentação são de propriedade
das respectivas empresas. Todos os direitos reservados.