O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Treze ferramentas/frameworks para desenvolvimento android

1.664 visualizações

Publicada em

Palestra sobre treze ferramentas/frameworks para desenvolvimento em Android, realizada no dia 18/09/14, no Senai CTAI em Florianópolis (evento do Grupo de usuários Java de SC - http://www.gujavasc.org).

Publicada em: Software

Treze ferramentas/frameworks para desenvolvimento android

  1. 1. Treze ferramentas/frameworks para desenvolvimento Android
  2. 2. AndroidKickstartR ● SaaS útil para criar um novo projeto Android;
  3. 3. AndroidKickstartR ● SaaS útil para criar um novo projeto Android; ● Acesse www.androidkickstartr.com...
  4. 4. ActionBar-PullToRefresh ● Framework open-source;
  5. 5. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock;
  6. 6. 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);
  7. 7. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock; ● Roda no Android API level 14 ou superior (para API level inferior a 14, utilize a ActionBarCompact); ● Nativo a partir da API 20 (L Preview): SwipeRefreshLayout.
  8. 8. GSon ● Framework open-source da Google;
  9. 9. GSon ● Framework open-source da Google; ● Converte objetos Java em uma representação Json, e vice-versa.
  10. 10. 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);
  11. 11. SmoothProgressBar ● Framework open-source;
  12. 12. SmoothProgressBar ● Framework open-source; ● Permite criar uma barra de progresso mais suave;
  13. 13. 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;
  14. 14. 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.
  15. 15. EventBus ● Framework open-source;
  16. 16. EventBus ● Framework open-source; ● Publish/Subscribe model;
  17. 17. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  18. 18. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”.
  19. 19. 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.
  20. 20. 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
  21. 21. Android Asynchronous Http Client ● Framework open-source;
  22. 22. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache;
  23. 23. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread;
  24. 24. 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;
  25. 25. 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;
  26. 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; ● Pode ser executado em um Service; ● A biblioteca identifica automaticamente o contexto em que foi disparada;
  27. 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; ● A biblioteca identifica automaticamente o contexto em que foi disparada; ● Instagram (+100.000.000), MercadoLibre (+10.000.000), Duolingo (+10.000.000), etc.
  28. 28. 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 }});
  29. 29. AndroidAnnotations ● Framework open-source;
  30. 30. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate);
  31. 31. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  32. 32. 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);
  33. 33. 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;
  34. 34. AndroidAnnotations ● Event binding, sem mais listeners anônimos;
  35. 35. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces);
  36. 36. 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;
  37. 37. 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;
  38. 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; ● Tudo isso com menos de 50kb; ● Call of Duty (+1.000.000), Magic Piano by Smule (+10.000.000), etc.
  39. 39. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
  40. 40. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); @ViewById ListView bookmarkList;
  41. 41. 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(); } });
  42. 42. 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(); } });
  43. 43. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); }
  44. 44. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  45. 45. 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> { }
  46. 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}"; 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 } }
  47. 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> { 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 } }
  48. 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 } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } XyzActivity.java
  49. 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 } } Inner class XyzActivity.java
  50. 50. @Rest("http://www.bookmarks.com") public interface BookmarkClient { } BookmarkClient.java
  51. 51. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  52. 52. @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
  53. 53. @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
  54. 54. @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
  55. 55. Universal Image Loader ● Framework open-source;
  56. 56. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens;
  57. 57. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens; ● Multithread (async ou sync);
  58. 58. 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;
  59. 59. 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;
  60. 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; ● API level 5 ou superior; ● Clean Master (+100.000.000), Camera360 (+50.000.000), etc.
  61. 61. 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); ... }}
  62. 62. 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 }});
  63. 63. GreenDAO ● Framework open-source;
  64. 64. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite;
  65. 65. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples;
  66. 66. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android;
  67. 67. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória;
  68. 68. 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);
  69. 69. 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;
  70. 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); ● Disponibiliza um gerador de código; ● Camera360 (+50.000.000), Pinterest (+10.000.000), ICQ (+10.000.000), etc.
  71. 71. 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
  72. 72. 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...
  73. 73. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa;
  74. 74. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente;
  75. 75. 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;
  76. 76. 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;
  77. 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; ● Simples (des)serialização JSON capaz de lidar com objetos aninhados; ● Mesma coisa com XML;
  78. 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; ● Mesma coisa com XML; ● Melhor forma de lidar com AsyncTask e IntentService com Exceções;
  79. 79. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto;
  80. 80. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto; ● RESTClient para GET, PUT, POST, DELETE & InputStream-getting, e também conversa com JSON;
  81. 81. 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;
  82. 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; ● ImageFetcher para anexar de forma assíncrona imagens para ImageViews, com caching, cross-fade e apoio transformação; ● Muito mais...
  83. 83. Robotium ● Framework para automação de testes;
  84. 84. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial);
  85. 85. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas;
  86. 86. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas; ● Foco em testes de caixa preta;
  87. 87. 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);
  88. 88. 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.
  89. 89. Genymotion ● Emulador Android alternativo;
  90. 90. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar);
  91. 91. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs;
  92. 92. 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);
  93. 93. 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;
  94. 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); ● Integra-se ao Eclipse através de um plugin; ● Roda em Windows, MacOS e Linux.
  95. 95. HAXM ● Acelera o funcionamento do emulador do Android para processadores Intel;
  96. 96. HAXM ● Acelera o funcionamento do emulador do Android para processadores Intel; ● É necessário baixar a imagem x86 no Android SDK;
  97. 97. 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;
  98. 98. 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/
  99. 99. 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/
  100. 100. 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
  101. 101. Obrigado! @ricardolonga http://about.me/ricardo.longa ricardo.longa@gmail.com @driflash http://www.creativedev.com.br contato@creativedev.com.br

×