Treze ferramentas/frameworks para desenvolvimento android
-
Upload
ricardo-longa -
Category
Software
-
view
325 -
download
4
description
Transcript of Treze ferramentas/frameworks para desenvolvimento android
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.sample;
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.sample;
● 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) {
EventBus.getDefault().post(new ConectividadeAlterada());}
public static class ConectividadeAlterada {// Pode até enviar informações por aqui.
}}
BroadcastReceiver
Activity
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);
@ViewById
ListView bookmarkList;
ListView bookmarkList = (ListView) findViewById(R.id.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();}});
@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
void updateBookmarksClicked() {
...
}
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();}});
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
}
}
XyzActivity.java
Inner class
@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
@RestService BookmarkClient restClient;
@Rest("http://www.bookmarks.com")
public interface BookmarkClient {
@Get("/bookmarks/{userId}?search={search}")
Bookmarks getBookmarks(String search, String userId);
}
XyzActivity.java
BookmarkClient.java
@RestService BookmarkClient restClient;
@Backgroundvoid searchAsync(String searchString, String userId) {
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
updateBookmarks(bookmarks);}
@Rest("http://www.bookmarks.com")
public interface BookmarkClient {
@Get("/bookmarks/{userId}?search={search}")
Bookmarks getBookmarks(String search, String userId);
}
XyzActivity.java
BookmarkClient.java
@RestService BookmarkClient restClient;
@Backgroundvoid searchAsync(String searchString, String userId) {
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
updateBookmarks(bookmarks);} @UiThreadvoid updateBookmarks(Bookmarks bookmarks) {
// Atualiza a UI Thread}
@Rest("http://www.bookmarks.com")
public interface BookmarkClient {
@Get("/bookmarks/{userId}?search={search}")
Bookmarks getBookmarks(String search, String 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
Processing schema version 1...Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.javaProcessed 1 entities in 113ms
Resultado...
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-ref
resh/● 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/androidannotations
● 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/articl
es/intel-hardware-accelerated-execution-manager