SlideShare uma empresa Scribd logo
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 userId); 
@RestService 
BookmarkClient restClient; 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, 
userId); 
updateBookmarks(bookmarks); 
} 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
@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 
} 
} 
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

Mais conteúdo relacionado

Mais procurados

Mais procurados (6)

Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com Firebase
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
 

Semelhante a Treze ferramentas/frameworks para desenvolvimento Android

Semelhante a Treze ferramentas/frameworks para desenvolvimento Android (20)

Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
Grails
GrailsGrails
Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
FAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaFAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e Cordova
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Chromecast na Qcon RJ
Chromecast na Qcon RJChromecast na Qcon RJ
Chromecast na Qcon RJ
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Angular js
Angular jsAngular js
Angular js
 
Chromecast
ChromecastChromecast
Chromecast
 
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de AguirreMobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Python 08
Python 08Python 08
Python 08
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 

Treze ferramentas/frameworks para desenvolvimento Android

  • 1. Treze ferramentas/frameworks para desenvolvimento 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...
  • 4.
  • 6.
  • 7. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock;
  • 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);
  • 9. 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.
  • 10. GSon ● Framework open-source da Google;
  • 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);
  • 14. SmoothProgressBar ● Framework open-source; ● Permite criar uma barra de progresso mais suave;
  • 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.
  • 17. EventBus ● Framework open-source;
  • 18. EventBus ● Framework open-source; ● Publish/Subscribe model;
  • 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
  • 23. Android Asynchronous Http Client ● Framework open-source;
  • 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 }});
  • 32. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate);
  • 33. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  • 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;
  • 36. AndroidAnnotations ● Event binding, sem mais listeners anônimos;
  • 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.
  • 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. @Rest("http://www.bookmarks.com") public interface BookmarkClient { } BookmarkClient.java
  • 53. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  • 54. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); @RestService BookmarkClient restClient; } XyzActivity.java BookmarkClient.java
  • 55. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } } XyzActivity.java BookmarkClient.java
  • 56. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); @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 } } 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 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 }});
  • 65. GreenDAO ● Framework open-source;
  • 66. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite;
  • 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;
  • 81. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto;
  • 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...
  • 85. Robotium ● Framework para automação de testes;
  • 86. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial);
  • 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.
  • 91. Genymotion ● Emulador Android alternativo;
  • 92. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar);
  • 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;
  • 103.
  • 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 ricardo.longa@gmail.com @driflash http://www.creativedev.com.br contato@creativedev.com.br