O documento lista 13 ferramentas/frameworks para desenvolvimento Android, descrevendo brevemente cada um. As ferramentas incluem bibliotecas para requisições HTTP assíncronas, cache e carregamento de imagens, comunicação com banco de dados SQLite, animações de progresso, atualização de interface com usuário e mais. Muitas são open source e facilitam tarefas comuns no desenvolvimento mobile.
7. ActionBar-PullToRefresh
● Framework open-source;
● Compatível com ActionBar e
ActionBarSherlock;
● Roda no Android API level 14 ou superior
(para API level inferior a 14, utilize a
ActionBarCompact);
8. ActionBar-PullToRefresh
● Framework open-source;
● Compatível com ActionBar e
ActionBarSherlock;
● Roda no Android API level 14 ou superior
(para API level inferior a 14, utilize a
ActionBarCompact);
● Nativo a partir da API 20 (L Preview):
SwipeRefreshLayout.
11. GSon
● Framework open-source da Google;
● Converte objetos Java em uma
representação Json, e vice-versa.
12. User user = new User();
user.setId(123456);
user.setName("Ricardo Longa");
Gson gson = new Gson();
String json = gson.toJson(user);
User user = gson.fromJson(json, User.class);
15. SmoothProgressBar
● Framework open-source;
● Permite criar uma barra de progresso mais
suave;
● App de exemplo:
https://play.google.com/store/apps/details?id
=fr.castorflex.android.smoothprogressbar.sa
mple;
16. SmoothProgressBar
● Framework open-source;
● Permite criar uma barra de progresso mais
suave;
● App de exemplo:
https://play.google.com/store/apps/details?id
=fr.castorflex.android.smoothprogressbar.sa
mple;
● Yahoo Mail (+50.000.000), Photo Editor by Aviary
(+50.000.000), Tinder (+10.000.000), etc.
19. EventBus
● Framework open-source;
● Publish/Subscribe model;
● Simplifica a comunicação entre
componentes (Activities, Fragments, BroadcastReceivers,
Threads, Services);
20. EventBus
● Framework open-source;
● Publish/Subscribe model;
● Simplifica a comunicação entre
componentes (Activities, Fragments, BroadcastReceivers,
Threads, Services);
● “Menos código, maior qualidade”.
21. EventBus
● Framework open-source;
● Publish/Subscribe model;
● Simplifica a comunicação entre
componentes (Activities, Fragments, BroadcastReceivers,
Threads, Services);
● “Menos código, maior qualidade”;
● Camera360 (+50.000.000), Path (+10.000.000),
Pinterest (+10.000.000), etc.
22. public class XyzActivity extends Activity {
public void onCreate() {
EventBus.getDefault().register(this);
}
public void onEvent(ConnectividadeReceiver.ConectividadeAlterada evento) {
// Verifico conexão com a internet e notifico usuário...
}
public void onPause() {
EventBus.getDefault().unregister(this);
}
}
public class ConnectividadeReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Activity
EventBus.getDefault().post(new ConectividadeAlterada());
}
public static class ConectividadeAlterada {
// Pode até enviar informações por aqui.
}
}
BroadcastReceiver
24. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
25. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
● A requisição acontece fora da UI Thread;
26. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
● A requisição acontece fora da UI Thread;
● O callback é executado na UI Thread;
27. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
● A requisição acontece fora da UI Thread;
● O callback é executado na UI Thread;
● Pode ser executado em um Service;
28. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
● A requisição acontece fora da UI Thread;
● O callback é executado na UI Thread;
● Pode ser executado em um Service;
● A biblioteca identifica automaticamente o
contexto em que foi disparada;
29. Android Asynchronous Http Client
● Framework open-source;
● Encapsula a biblioteca HttpClient da
Apache;
● A requisição acontece fora da UI Thread;
● O callback é executado na UI Thread;
● Pode ser executado em um Service;
● A biblioteca identifica automaticamente o
contexto em que foi disparada;
● Instagram (+100.000.000), MercadoLibre (+10.000.000),
Duolingo (+10.000.000), etc.
30. AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}});
34. AndroidAnnotations
● Framework open-source;
● Simplifica a codificação (reduz boilerplate);
● Facilita a manutenção;
● Permite a injeção de dependências (views,
resources, system services, etc);
35. AndroidAnnotations
● Framework open-source;
● Simplifica a codificação (reduz boilerplate);
● Facilita a manutenção;
● Permite a injeção de dependências (views,
resources, system services, etc);
● Facilita o trabalho com threads;
37. AndroidAnnotations
● Event binding, sem mais listeners anônimos;
● Rest client através da criação de interfaces
(o framework irá implementar as interfaces);
38. AndroidAnnotations
● Event binding, sem mais listeners anônimos;
● Rest client através da criação de interfaces
(o framework irá implementar as interfaces);
● Não impacta na performance em runtime;
39. AndroidAnnotations
● Event binding, sem mais listeners anônimos;
● Rest client através da criação de interfaces
(o framework irá implementar as interfaces);
● Não impacta na performance em runtime;
● Tudo isso com menos de 50kb;
40. AndroidAnnotations
● Event binding, sem mais listeners anônimos;
● Rest client através da criação de interfaces
(o framework irá implementar as interfaces);
● Não impacta na performance em runtime;
● Tudo isso com menos de 50kb;
● Call of Duty (+1.000.000), Magic Piano by Smule
(+10.000.000), etc.
58. Universal Image Loader
● Framework open-source;
● Biblioteca flexível para carregamento, cache
e exibição de imagens;
59. Universal Image Loader
● Framework open-source;
● Biblioteca flexível para carregamento, cache
e exibição de imagens;
● Multithread (async ou sync);
60. Universal Image Loader
● Framework open-source;
● Biblioteca flexível para carregamento, cache
e exibição de imagens;
● Multithread (async ou sync);
● Cache em memória ou SD card;
61. Universal Image Loader
● Framework open-source;
● Biblioteca flexível para carregamento, cache
e exibição de imagens;
● Multithread (async ou sync);
● Cache em memória ou SD card;
● API level 5 ou superior;
62. Universal Image Loader
● Framework open-source;
● Biblioteca flexível para carregamento, cache
e exibição de imagens;
● Multithread (async ou sync);
● Cache em memória ou SD card;
● API level 5 ou superior;
● Clean Master (+100.000.000), Camera360
(+50.000.000), etc.
63. public class MyActivity extends Activity {
@Override
public void onCreate() {
super.onCreate();
// Criar configuração global e inicializa o ImageLoader
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
...
.build();
ImageLoader.getInstance().init(config);
...
}}
64. String imageUri = "http://site.com/image.png"; // da Web
String imageUri = "file:///mnt/sdcard/image.png"; // do SD card
String imageUri = "content://media/external/audio/albumart/1"; // de um content provider
String imageUri = "assets://image.png"; // dos assets
String imageUri = "drawable://" + R.drawable.img; // dos drawables (non-9patch images)
// Carrega a imagem em uma ImageView
imageLoader.displayImage(imageUri, imageView);
// Carregar imagem, decodificá-lo para Bitmap e retorna o Bitmap pro callback
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Faça o que quiser
}});
67. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
68. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
● Otimizado para Android;
69. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
● Otimizado para Android;
● Consumo mínimo de memória;
70. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
● Otimizado para Android;
● Consumo mínimo de memória;
● Biblioteca pequena (menos de 100k);
71. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
● Otimizado para Android;
● Consumo mínimo de memória;
● Biblioteca pequena (menos de 100k);
● Disponibiliza um gerador de código;
72. GreenDAO
● Framework open-source;
● Facilita a comunicação com SQLite;
● API simples;
● Otimizado para Android;
● Consumo mínimo de memória;
● Biblioteca pequena (menos de 100k);
● Disponibiliza um gerador de código;
● Camera360 (+50.000.000), Pinterest (+10.000.000),
ICQ (+10.000.000), etc.
73. public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "br.com.ricardolonga.todo");
Entity item = schema.addEntity("Item");
item.addIdProperty();
item.addStringProperty("title").notNull();
new DaoGenerator().generateAll(schema, "../todo/src-gen");
}
DaoGenerator.java
Resultado...
Processing schema version 1...
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.java
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.java
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.java
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.java
Processed 1 entities in 113ms
74. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "todo",
null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
ItemDao itemDao = daoSession.getItemDao();
Obtendo o ItemDao...
Item item = new Item(null, itemTitle);
itemDao.insert(item);
itemDao.deleteAll();
itemDao.deleteByKey(id);
Exemplos...
75. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
76. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
● ORM - Uso eficiente de persistência com
Cursor e API fluente;
77. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
● ORM - Uso eficiente de persistência com
Cursor e API fluente;
● EventBus para subscrever e postar eventos;
78. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
● ORM - Uso eficiente de persistência com
Cursor e API fluente;
● EventBus para subscrever e postar eventos;
● Simples (des)serialização JSON capaz de
lidar com objetos aninhados;
79. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
● ORM - Uso eficiente de persistência com
Cursor e API fluente;
● EventBus para subscrever e postar eventos;
● Simples (des)serialização JSON capaz de
lidar com objetos aninhados;
● Mesma coisa com XML;
80. DroidParts
● Injeção de Dependência para Views,
Fragments, Services, qualquer coisa;
● ORM - Uso eficiente de persistência com
Cursor e API fluente;
● EventBus para subscrever e postar eventos;
● Simples (des)serialização JSON capaz de
lidar com objetos aninhados;
● Mesma coisa com XML;
● Melhor forma de lidar com AsyncTask e
IntentService com Exceções;
82. DroidParts
● Logger que descobre sua TAG e registra
qualquer objeto;
● RESTClient para GET, PUT, POST,
DELETE & InputStream-getting, e também
conversa com JSON;
83. DroidParts
● Logger que descobre sua TAG e registra
qualquer objeto;
● RESTClient para GET, PUT, POST,
DELETE & InputStream-getting, e também
conversa com JSON;
● ImageFetcher para anexar de forma
assíncrona imagens para ImageViews, com
caching, cross-fade e apoio transformação;
84. DroidParts
● Logger que descobre sua TAG e registra
qualquer objeto;
● RESTClient para GET, PUT, POST,
DELETE & InputStream-getting, e também
conversa com JSON;
● ImageFetcher para anexar de forma
assíncrona imagens para ImageViews, com
caching, cross-fade e apoio transformação;
● Muito mais...
87. Robotium
● Framework para automação de testes;
● Robotium Recorder (trial);
● Suporta aplicações nativas e híbridas;
88. Robotium
● Framework para automação de testes;
● Robotium Recorder (trial);
● Suporta aplicações nativas e híbridas;
● Foco em testes de caixa preta;
89. Robotium
● Framework para automação de testes;
● Robotium Recorder (trial);
● Suporta aplicações nativas e híbridas;
● Foco em testes de caixa preta;
● Similar ao Selenium (aplicações web);
90. Robotium
● Framework para automação de testes;
● Robotium Recorder (trial);
● Suporta aplicações nativas e híbridas;
● Foco em testes de caixa preta;
● Similar ao Selenium (aplicações web);
● Integração com Ant/Maven/Gradle para a
execução dos testes na integração contínua.
93. Genymotion
● Emulador Android alternativo;
● Rápido e intuitivo (fácil de usar);
● Utilizado por mais de 1.500.000 devs;
94. Genymotion
● Emulador Android alternativo;
● Rápido e intuitivo (fácil de usar);
● Utilizado por mais de 1.500.000 devs;
● Possibilita controle total do AVD (bateria,
GPS, acelerômetro, etc);
95. Genymotion
● Emulador Android alternativo;
● Rápido e intuitivo (fácil de usar);
● Utilizado por mais de 1.500.000 devs;
● Possibilita controle total do AVD (bateria,
GPS, acelerômetro, etc);
● Integra-se ao Eclipse através de um plugin;
96. Genymotion
● Emulador Android alternativo;
● Rápido e intuitivo (fácil de usar);
● Utilizado por mais de 1.500.000 devs;
● Possibilita controle total do AVD (bateria,
GPS, acelerômetro, etc);
● Integra-se ao Eclipse através de um plugin;
● Roda em Windows, MacOS e Linux.
97.
98.
99.
100. HAXM
● Acelera o funcionamento do emulador do
Android para processadores Intel;
101. HAXM
● Acelera o funcionamento do emulador do
Android para processadores Intel;
● É necessário baixar a imagem x86 no
Android SDK;
102. HAXM
● Acelera o funcionamento do emulador do
Android para processadores Intel;
● É necessário baixar a imagem x86 no
Android SDK;
● Não tem suporte nativo para Google Play;