Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Treze ferramentas/frameworks para desenvolvimento android

1,685 views

Published on

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).

Published in: 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

×