Treze ferramentas/frameworks 
para desenvolvimento Android
AndroidKickstartR 
● SaaS útil para criar um novo projeto 
Android;
AndroidKickstartR 
● SaaS útil para criar um novo projeto 
Android; 
● Acesse www.androidkickstartr.com...
ActionBar-PullToRefresh 
● Framework open-source;
ActionBar-PullToRefresh 
● Framework open-source; 
● Compatível com ActionBar e 
ActionBarSherlock;
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);
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.
GSon 
● Framework open-source da Google;
GSon 
● Framework open-source da Google; 
● Converte objetos Java em uma 
representação Json, e vice-versa.
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);
SmoothProgressBar 
● Framework open-source;
SmoothProgressBar 
● Framework open-source; 
● Permite criar uma barra de progresso mais 
suave;
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;
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.
EventBus 
● Framework open-source;
EventBus 
● Framework open-source; 
● Publish/Subscribe model;
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services);
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services); 
● “Menos código, maior qualidade”.
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.
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
Android Asynchronous Http Client 
● Framework open-source;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread;
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;
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;
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;
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.
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 
}});
AndroidAnnotations 
● Framework open-source;
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate);
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate); 
● Facilita a manutenção;
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);
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;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces);
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;
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;
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.
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); 
@ViewById 
ListView bookmarkList;
Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); 
buttonOne.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
}); 
Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); 
buttonTwo.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
});
Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); 
buttonOne.setOnClickListener(new OnClickListener() { 
@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) 
void updateBookmarksClicked() { 
... 
} 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
}); 
Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); 
buttonTwo.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
});
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}";
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
} 
XyzActivity.java
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
} 
Inner class 
XyzActivity.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
} 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
userId); 
} BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@RestService 
BookmarkClient restClient; 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, 
userId); 
updateBookmarks(bookmarks); 
} 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, 
userId); 
updateBookmarks(bookmarks); 
} 
@UiThread 
void updateBookmarks(Bookmarks bookmarks) { 
// Atualiza a UI Thread 
} 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
Universal Image Loader 
● Framework open-source;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens; 
● Multithread (async ou sync);
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;
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;
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.
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); 
... 
}}
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 
}});
GreenDAO 
● Framework open-source;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória;
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);
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;
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.
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
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...
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente;
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;
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;
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;
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;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto; 
● RESTClient para GET, PUT, POST, 
DELETE & InputStream-getting, e também 
conversa com JSON;
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;
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...
Robotium 
● Framework para automação de testes;
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial);
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas;
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas; 
● Foco em testes de caixa preta;
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);
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.
Genymotion 
● Emulador Android alternativo;
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar);
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar); 
● Utilizado por mais de 1.500.000 devs;
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);
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;
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.
HAXM 
● Acelera o funcionamento do emulador do 
Android para processadores Intel;
HAXM 
● Acelera o funcionamento do emulador do 
Android para processadores Intel; 
● É necessário baixar a imagem x86 no 
Android SDK;
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;
Referências 
● http://www.appbrain.com/stats/libraries/dev 
● http://www.tutecentral.com/android-pull-to-refresh/ 
● https://github.com/greenrobot/EventBus 
● https://code.google.com/p/google-gson/ 
● https://github.com/castorflex/SmoothProgres 
sBar 
● http://sharedstate.net/archives/pull-to-refresh 
● http://loopj.com/android-async-http/ 
● http://viewpagerindicator.com/
Referências 
● https://github.com/nostra13/Android- 
Universal-Image-Loader 
● https://github.com/excilys/androidannotation 
s 
● http://androidkickstartr.com/ 
● http://greendao-orm.com/ 
● https://software.intel.com/pt-br/android 
● http://www.genymotion.com/ 
● https://code.google.com/p/robotium/
Referências 
● http://blog.globalcode.com.br/2012/02/json-facil- 
em-java-com-gson.html 
● http://pt.slideshare.net/Infinum/infinum-android- 
talks-02-eventbus 
● http://droidparts.org/ 
● https://software.intel.com/en-us/ 
android/articles/intel-hardware-accelerated- 
execution-manager
Obrigado! 
@ricardolonga 
http://about.me/ricardo.longa 
ricardo.longa@gmail.com 
@driflash 
http://www.creativedev.com.br 
contato@creativedev.com.br

Treze ferramentas/frameworks para desenvolvimento android

  • 1.
    Treze ferramentas/frameworks paradesenvolvimento Android
  • 2.
    AndroidKickstartR ● SaaSútil para criar um novo projeto Android;
  • 3.
    AndroidKickstartR ● SaaSútil para criar um novo projeto Android; ● Acesse www.androidkickstartr.com...
  • 5.
  • 6.
    ActionBar-PullToRefresh ● Frameworkopen-source; ● Compatível com ActionBar e ActionBarSherlock;
  • 7.
    ActionBar-PullToRefresh ● Frameworkopen-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 ● Frameworkopen-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.
  • 10.
    GSon ● Frameworkopen-source da Google;
  • 11.
    GSon ● Frameworkopen-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);
  • 13.
  • 14.
    SmoothProgressBar ● Frameworkopen-source; ● Permite criar uma barra de progresso mais suave;
  • 15.
    SmoothProgressBar ● Frameworkopen-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 ● Frameworkopen-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.
  • 17.
  • 18.
    EventBus ● Frameworkopen-source; ● Publish/Subscribe model;
  • 19.
    EventBus ● Frameworkopen-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  • 20.
    EventBus ● Frameworkopen-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”.
  • 21.
    EventBus ● Frameworkopen-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 XyzActivityextends 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
  • 23.
    Android Asynchronous HttpClient ● Framework open-source;
  • 24.
    Android Asynchronous HttpClient ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache;
  • 25.
    Android Asynchronous HttpClient ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread;
  • 26.
    Android Asynchronous HttpClient ● 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 HttpClient ● 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 HttpClient ● 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 HttpClient ● 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 }});
  • 31.
  • 32.
    AndroidAnnotations ● Frameworkopen-source; ● Simplifica a codificação (reduz boilerplate);
  • 33.
    AndroidAnnotations ● Frameworkopen-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  • 34.
    AndroidAnnotations ● Frameworkopen-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 ● Frameworkopen-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;
  • 36.
    AndroidAnnotations ● Eventbinding, sem mais listeners anônimos;
  • 37.
    AndroidAnnotations ● Eventbinding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces);
  • 38.
    AndroidAnnotations ● Eventbinding, 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 ● Eventbinding, 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 ● Eventbinding, 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.
  • 41.
    ListView bookmarkList =(ListView) findViewById(R.id.bookmarkList);
  • 42.
    ListView bookmarkList =(ListView) findViewById(R.id.bookmarkList); @ViewById ListView bookmarkList;
  • 43.
    Button buttonOne =(Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  • 44.
    Button buttonOne =(Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) void updateBookmarksClicked() { ... } public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  • 45.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); }
  • 46.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  • 47.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { }
  • 48.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } }
  • 49.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } }
  • 50.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } XyzActivity.java
  • 51.
    void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } Inner class XyzActivity.java
  • 52.
  • 53.
    @Rest("http://www.bookmarks.com") public interfaceBookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  • 54.
    @Rest("http://www.bookmarks.com") public interfaceBookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @RestService BookmarkClient restClient; userId); } XyzActivity.java BookmarkClient.java
  • 55.
    @Rest("http://www.bookmarks.com") public interfaceBookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } userId); } XyzActivity.java BookmarkClient.java
  • 56.
    @Rest("http://www.bookmarks.com") public interfaceBookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } @UiThread void updateBookmarks(Bookmarks bookmarks) { // Atualiza a UI Thread } userId); } XyzActivity.java BookmarkClient.java
  • 57.
    Universal Image Loader ● Framework open-source;
  • 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 MyActivityextends 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 }});
  • 65.
  • 66.
    GreenDAO ● Frameworkopen-source; ● Facilita a comunicação com SQLite;
  • 67.
    GreenDAO ● Frameworkopen-source; ● Facilita a comunicação com SQLite; ● API simples;
  • 68.
    GreenDAO ● Frameworkopen-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android;
  • 69.
    GreenDAO ● Frameworkopen-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória;
  • 70.
    GreenDAO ● Frameworkopen-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 ● Frameworkopen-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 ● Frameworkopen-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 voidmain(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çãode Dependência para Views, Fragments, Services, qualquer coisa;
  • 76.
    DroidParts ● Injeçãode Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente;
  • 77.
    DroidParts ● Injeçãode 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çãode 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çãode 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çãode 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;
  • 81.
    DroidParts ● Loggerque descobre sua TAG e registra qualquer objeto;
  • 82.
    DroidParts ● Loggerque descobre sua TAG e registra qualquer objeto; ● RESTClient para GET, PUT, POST, DELETE & InputStream-getting, e também conversa com JSON;
  • 83.
    DroidParts ● Loggerque 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 ● Loggerque 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...
  • 85.
    Robotium ● Frameworkpara automação de testes;
  • 86.
    Robotium ● Frameworkpara automação de testes; ● Robotium Recorder (trial);
  • 87.
    Robotium ● Frameworkpara automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas;
  • 88.
    Robotium ● Frameworkpara automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas; ● Foco em testes de caixa preta;
  • 89.
    Robotium ● Frameworkpara 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 ● Frameworkpara 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.
  • 91.
    Genymotion ● EmuladorAndroid alternativo;
  • 92.
    Genymotion ● EmuladorAndroid alternativo; ● Rápido e intuitivo (fácil de usar);
  • 93.
    Genymotion ● EmuladorAndroid alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs;
  • 94.
    Genymotion ● EmuladorAndroid 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 ● EmuladorAndroid 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 ● EmuladorAndroid 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.
  • 100.
    HAXM ● Acelerao funcionamento do emulador do Android para processadores Intel;
  • 101.
    HAXM ● Acelerao funcionamento do emulador do Android para processadores Intel; ● É necessário baixar a imagem x86 no Android SDK;
  • 102.
    HAXM ● Acelerao 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;
  • 104.
    Referências ● http://www.appbrain.com/stats/libraries/dev ● http://www.tutecentral.com/android-pull-to-refresh/ ● https://github.com/greenrobot/EventBus ● https://code.google.com/p/google-gson/ ● https://github.com/castorflex/SmoothProgres sBar ● http://sharedstate.net/archives/pull-to-refresh ● http://loopj.com/android-async-http/ ● http://viewpagerindicator.com/
  • 105.
    Referências ● https://github.com/nostra13/Android- Universal-Image-Loader ● https://github.com/excilys/androidannotation s ● http://androidkickstartr.com/ ● http://greendao-orm.com/ ● https://software.intel.com/pt-br/android ● http://www.genymotion.com/ ● https://code.google.com/p/robotium/
  • 106.
    Referências ● http://blog.globalcode.com.br/2012/02/json-facil- em-java-com-gson.html ● http://pt.slideshare.net/Infinum/infinum-android- talks-02-eventbus ● http://droidparts.org/ ● https://software.intel.com/en-us/ android/articles/intel-hardware-accelerated- execution-manager
  • 107.
    Obrigado! @ricardolonga http://about.me/ricardo.longa [email protected] @driflash http://www.creativedev.com.br [email protected]