Desvendando as ferramentas e serviços para o desenvolvedor Android

2,914 views

Published on

Diversos frameworks e serviços para facilitar o seu dia a dia com desenvolvimento Android serão apresentadas, tais como Spring Android, Roboguice, Robolectric, Android Query, Flurry e Xtify. Saiba as características de cada uma, suas vantagens e desvantagens e faça as suas escolhas!

Published in: Technology, Business

Desvendando as ferramentas e serviços para o desenvolvedor Android

  1. 1. Desvendando as ferramentas e serviços para o desenvolvedor Android João Bosco Monteiro
  2. 2. Quem souSócio e desenvolvedor naDesenvolvendo software há 10 anosEx-JavaEE
  3. 3. Autor do livro
  4. 4. Lado B
  5. 5. Por que utilizar frameworks?
  6. 6. Onde utilizar Interface Gráfica Utilitários Injeção de Dependências Persistência Build Testes Integração Contínua
  7. 7. Utilitários, UI e IoC
  8. 8. Ajax Callback Manipulação de Imagens XML Parsing Autenticação Twitter e FacebookLocalização (beta)
  9. 9. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView textView = (TextView) findViewById(R.id.text); textView.setText("Clique no botão"); Button button = (Button) findViewById(R.id.button); button.setText("clique aqui"); button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { textView.setText("QCon 2012"); } });}
  10. 10. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); aq = new AQuery(this); aq.id(R.id.text).text("Clique no botão"); aq.id(R.id.button).text("clique aqui")}public void onClick(View v) { aq.id(R.id.text).text("QCon 2012");}
  11. 11. public void async() { String url = "http://search.twitter.com/…"; aq.ajax(url, JSONObject.class, this, "callback");}public void callback(String url, JSONObject json, AjaxStatus status) { if (json != null) { // successful ajax call }}
  12. 12. String imageUrl = "http://qcon.com.br/images/infoq.gif";//carregamento assíncrono, com cacheaq.id(R.id.image).image(imageUrl);//carregamento assíncrono, com cache e fallbackaq.id(R.id.image).image(imageUrl, true, true, 0, R.drawable.default_image);//limita a largura da imagem em 200pxaq.id(R.id.image).image(imageUrl, true, true, 200, 0);
  13. 13. RoboGuiceInjeção de dependências Powered by Google GuiceÉ possível injectar views, recursos,serviços do sistema...
  14. 14. class AndroidWay extends Activity { TextView name; ImageView thumb; LocationManager loc; Drawable icon; String myName; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (TextView) findViewById(R.id.name); thumb = (ImageView)findViewById(R.id.thumbnail); loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); icon = getResources() .getDrawable(R.drawable.icon); myName = getString(R.string.app_name); name.setText( "Hello, " + myName ); }}
  15. 15. class RoboWay extends RoboActivity { @InjectView(R.id.name) TextView name; @InjectView(R.id.thumbnail) ImageView thumbnail; @InjectResource(R.drawable.icon) Drawable icon; @InjectResource(R.string.app_name) String myName; @Inject LocationManager loc; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name.setText( "Hello, " + myName ); }}
  16. 16. Android AnnotationsAnnotation Processing Tool para gerar boilerplatecodeInjeção de dependência em tempo de compilaçãoThreading e Event HandligREST Client (Spring Android Wrapper)
  17. 17. @EActivity(R.layout.my_activity)public class MyActivity extends Activity { @ViewById EditText myEditText; @StringRes(R.string.hello) String helloFormat; @ColorRes int androidColor; @BooleanRes boolean someBoolean; @SystemService NotificationManager notificationManager;
  18. 18. @Rest("http://company.com/ajax/services")public interface MyRestClient { @Get("/events") EventList getEvents();}@EActivitypublic class MyActivity extends Activity { @RestService MyRestClient myRestClient; @AfterViews void afterViews() { myRestClient.getEvents(); }}
  19. 19. @Clickvoid anotherButton() {}@Backgroundvoid someBackgroundWork(String param) {}@UiThreadvoid doInUiThread(String param) {}@Transactionalvoid doSomeDbWork(SQLiteDatabase db) {}
  20. 20. Spring AndroidRest ClientOAuth
  21. 21. public <T> T getForObject(URI url, Class<T> responseType);public <T> T postForObject(URI url, Object request, Class<T> rType);public void put(String url, Object request, Object... variables);public void delete(String url, Object... urlVariables);
  22. 22. final String url ="https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={query}";RestTemplate restTemplate = new RestTemplate();GoogleSearch response = restTemplate.getForObject(url, GoogleSearch.class, "Google Android");
  23. 23. ORM LiteORM já existenteConfiguração via anotaçõesGeneric DAO e ActiveRecordQueryBuilders
  24. 24. Generic DAOqueryForAll()queryForId(ID id)queryForFieldValues(Map<String, Object> fieldValues)queryRaw(String query)create(T object)createOrUpdate(T object)update(T object)delete(T object)countOf()
  25. 25. projetoDao = getHelper().getProjetoDao();QueryBuilder<Projeto, Integer> queryBuilder;queryBuilder = projetoDao.queryBuilder();List<Projeto> projetos = queryBuilder.where() .eq("nome", "QCon") .and() .eq("cid", 1) .query();
  26. 26. GreenDroidWidgets e LayoutsEstilos e temasCustom ActionBar
  27. 27. ActionBarSherlockActionBar para todos!
  28. 28. Testes
  29. 29. RobolectricRoda os testes diretamente na JVMMocking não é necessárioShadow Objects
  30. 30. @RunWith(RobolectricTestRunner.class)public class HomeActivityTest { private HomeActivity activity; private Button pressMeButton; @Before public void setUp() throws Exception { activity = new HomeActivity(); activity.onCreate(null); pressMeButton = (Button) activity.findViewById(R.id.press_me_button); } @Test public void shouldHaveAButtonThatSaysPressMe() throws Exception { assertThat((String) pressMeButton.getText(), equalTo("Tests Rock!")); }}
  31. 31. Tests run: 86, Failures: 0, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 15.875s[INFO] Finished at: Sun Jul 29 15:54:58 GMT-04:00 2012[INFO] Final Memory: 14M/81M[INFO] ------------------------------------------------------------------------
  32. 32. RobotiumTestes caixa-pretaLegibilidade dos casos de testes é melhor doque os de instrumentaçãoIntegração com Maven
  33. 33. Mavenmvn archetype:generate -DarchetypeArtifactId=android-with-test -DarchetypeGroupId=de.akquinet.android.archetypes -DarchetypeVersion=1.0.6 -DgroupId=com.foo.bar -DartifactId=my-android-project -Dpackage=com.foo.bar.android
  34. 34. ServiçosPushLink
  35. 35. Discussões
  36. 36. Obrigado! João Bosco Monteirojoaobmonteiro@gmail.com @joaobmonteiro

×