Tomáš Kypta & Tomáš VondráčekUžitečné Androidknihovny pro vývoj atestovánímDevCamp 2013
Představení•Tomáš Vondráček & Tomáš Kypta•Android vývojáři ve společnostiInmite
•“perform one task and perform itwell”•open source
Agenda•rychlý základ•knihovny pro vývoj•UI, Networking, Image loaders, DIa další•testování•Inmite knihovny
Rychlý základ•ActionBarSherlock•NineOldAndroids•Support library•Google Play Services
UI•Drawer (side menu)•Page indikátory•Number pickers
UI - Drawer•SlidingMenu•android-menudrawer•DrawerLayout
SlidingMenu•dobře konfigurovatelné•levé i pravé side menu•demo aplikace v Google Play•není podle nových guidelines
android-menudrawer•levé i pravé menu•umí také bottom a top menu•z nových guidelines umí pouzeikonu navigation draweru
DrawerLayout•support library v4, revize 13•přesně podle guidelines•s ActionBarSherlockem nefungujenavigation drawer icon
UI - Page indikátory•ViewPagerIndicator•časem prověřená•PagerSlidingTabStrip•Google Play Tabs•Support library•title strip ...
UI - Numberpickery•android-betterpickers•android-numberpicker
Networking naAndroidu•Android má dva vestavěné HTTPclienty•Apache HttpClient•lepší volba na Androidu < 2.3•HttpUrlConnecti...
Networking•OkHttp•Volley•Protocol Buffers, Protoparser•REST - Retrofit
OkHttp•založený na HttpUrlConnection•Android >= 2.2•SPDY•gzip•response caching•zotaveni z chyb, connection pooling
OkHttp•lze použít bez přepsání stávajícíhokódu•implementuje HttpUrlConnectionAPI•volitelný balík implementuje částApache H...
OkHttpOkHttpClient client = new OkHttpClient();String post(URL url, byte[] body) throws IOException {HttpURLConnection con...
Retrofit•REST client pro Anroid a Javu•jednoduchá deklarace RESTovéhoAPI•podporuje GET, POST, PUT, DELETE,HEAD•podporuje fo...
Retrofit•EXAMPLE
JSON (de)serializace•GSON - jednodušší•Jackson - rychlejší
Protocol Buffers•definice zprávy v samostatnémsouboru (.proto)•kompiler vytvoří třídy ve zvolenémjazyce, které reprezentují...
Protocol Buffersmessage User {required sint64 objectId = 1;optional string firstName = 2;optional string lastName = 3;requ...
Image loadery•Android-Universal-Image-Loader•Picasso•Volley
Android-Universal-Image-Loader•výborně konfigurovatelný•memory a disk cache•podpora pro HttpUrlConnection iHttpClient•nijak...
Picasso•velice snadno se používá•využívá memory a disk cache(HttpResponseCache)•umí placeholdery, error drawably•transform...
PicassoPicasso.with(context).load(url).into(view);
Dependencyinjection•univerzální pattern, v zásadě netřebaknihoven•testování•JSR 330•RoboGuice & Dagger
DI - RoboGuice (google-guice)•reflexe•graf objektů se vytváří při startu•řádově stovky ms pro hello world•musí naloadovat v...
DI - RoboGuice•kromě DI přináší spoustu androidspecific featur•např. @InjectView,@InjectResource•activty a fragmenty musí d...
DI - Dagger•využívá anotační procesor kegenerování kódu•compile-time validace•zanedbatelný overhead
DI - Dagger•EXAMPLE
Obecné•Butterknife•Guava•Otto Event Bus
Butterknife•knihovna pro View injection•odstraňuje boilerplate při práci sviews•využívá generovaný kód•v IDE zapnout anota...
Butterknife@InjectView(R.id.btn) Button vBtn;@InjectView(R.id.txt_content) TextView vContent;@Overridepublic void onCreate...
Guava•Googles core Java libraries•široké spektrum funkcionalit•kolekce, caching, strings, IO, ...
Otto Event Bus• umožňuje komunikace mezi moduly, které mohouzůstat oddělenymBus.post(newLogOutEvent(LogOutEvent.TIMEOUT));...
Testování•unit testy•UI testování
Unit testyjava.lang.RuntimeException:Stub!
Unit testy - AndroidSDK•Android JUnit extension + Mockobjekty•přinejmenším nepohodlné•dlouhé buildění a nahrávání dozaříze...
Unit testy - Robolectric2.0•testování androidí aplikace bezzařízení/emulátoru•standardní JUnit 4 testy v JVM napočítači•an...
FEST Android•přinaší asserty specifické pro AndroidassertThat(listAdapter).isNotNull().hasCount(10).hasViewTypeCount(2);
Robolectric+FEST Android =WIN•zcela nový level unit testů naandroidu•snadno se píší a rychle spouští
Robolectric+FEST Android =WIN•EXAMPLE
Inmite knihovny•android-styled-dialogs•https://github.com/inmite/android-styled-dialogs
android-styleddialogs
Díky•Otázky?
Odkazy• http://actionbarsherlock.com/• http://nineoldandroids.com/• https://github.com/jfeinstein10/SlidingMenu• https://g...
Odkazy• http://square.github.io• https://gist.github.com/JakeWharton/5616899• https://github.com/nostra13/Android-Universa...
Upcoming SlideShare
Loading in …5
×

Užitečné Android knihovny pro vývoj a testování

700 views

Published on

Prezentace s konference mDevCamp 2013 o Android knihovnách

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Užitečné Android knihovny pro vývoj a testování

  1. 1. Tomáš Kypta & Tomáš VondráčekUžitečné Androidknihovny pro vývoj atestovánímDevCamp 2013
  2. 2. Představení•Tomáš Vondráček & Tomáš Kypta•Android vývojáři ve společnostiInmite
  3. 3. •“perform one task and perform itwell”•open source
  4. 4. Agenda•rychlý základ•knihovny pro vývoj•UI, Networking, Image loaders, DIa další•testování•Inmite knihovny
  5. 5. Rychlý základ•ActionBarSherlock•NineOldAndroids•Support library•Google Play Services
  6. 6. UI•Drawer (side menu)•Page indikátory•Number pickers
  7. 7. UI - Drawer•SlidingMenu•android-menudrawer•DrawerLayout
  8. 8. SlidingMenu•dobře konfigurovatelné•levé i pravé side menu•demo aplikace v Google Play•není podle nových guidelines
  9. 9. android-menudrawer•levé i pravé menu•umí také bottom a top menu•z nových guidelines umí pouzeikonu navigation draweru
  10. 10. DrawerLayout•support library v4, revize 13•přesně podle guidelines•s ActionBarSherlockem nefungujenavigation drawer icon
  11. 11. UI - Page indikátory•ViewPagerIndicator•časem prověřená•PagerSlidingTabStrip•Google Play Tabs•Support library•title strip & tab strip
  12. 12. UI - Numberpickery•android-betterpickers•android-numberpicker
  13. 13. Networking naAndroidu•Android má dva vestavěné HTTPclienty•Apache HttpClient•lepší volba na Androidu < 2.3•HttpUrlConnection•lepší volba na Androidu >= 2.3
  14. 14. Networking•OkHttp•Volley•Protocol Buffers, Protoparser•REST - Retrofit
  15. 15. OkHttp•založený na HttpUrlConnection•Android >= 2.2•SPDY•gzip•response caching•zotaveni z chyb, connection pooling
  16. 16. OkHttp•lze použít bez přepsání stávajícíhokódu•implementuje HttpUrlConnectionAPI•volitelný balík implementuje částApache HttpClient API•lze použít i jako transport vrstvu
  17. 17. OkHttpOkHttpClient client = new OkHttpClient();String post(URL url, byte[] body) throws IOException {HttpURLConnection connection = client.open(url);OutputStream out = null;try {connection.setRequestMethod("POST");out = connection.getOutputStream();out.write(body);if (connection.getResponseCode() ==HttpURLConnection.HTTP_OK) {return "OK";}} finally { if (out != null) out.close(); }}
  18. 18. Retrofit•REST client pro Anroid a Javu•jednoduchá deklarace RESTovéhoAPI•podporuje GET, POST, PUT, DELETE,HEAD•podporuje form encoded i multipartdata
  19. 19. Retrofit•EXAMPLE
  20. 20. JSON (de)serializace•GSON - jednodušší•Jackson - rychlejší
  21. 21. Protocol Buffers•definice zprávy v samostatnémsouboru (.proto)•kompiler vytvoří třídy ve zvolenémjazyce, které reprezentují obsahzprávy•sdílené mezi serverem a klientem
  22. 22. Protocol Buffersmessage User {required sint64 objectId = 1;optional string firstName = 2;optional string lastName = 3;required string email = 4;}
  23. 23. Image loadery•Android-Universal-Image-Loader•Picasso•Volley
  24. 24. Android-Universal-Image-Loader•výborně konfigurovatelný•memory a disk cache•podpora pro HttpUrlConnection iHttpClient•nijak explicitně nepracuje sHttpResponseCache
  25. 25. Picasso•velice snadno se používá•využívá memory a disk cache(HttpResponseCache)•umí placeholdery, error drawably•transformace obrázků•využívá OkHttp neboHttpUrlConnection
  26. 26. PicassoPicasso.with(context).load(url).into(view);
  27. 27. Dependencyinjection•univerzální pattern, v zásadě netřebaknihoven•testování•JSR 330•RoboGuice & Dagger
  28. 28. DI - RoboGuice (google-guice)•reflexe•graf objektů se vytváří při startu•řádově stovky ms pro hello world•musí naloadovat všechny classy
  29. 29. DI - RoboGuice•kromě DI přináší spoustu androidspecific featur•např. @InjectView,@InjectResource•activty a fragmenty musí dědit odRobo tříd
  30. 30. DI - Dagger•využívá anotační procesor kegenerování kódu•compile-time validace•zanedbatelný overhead
  31. 31. DI - Dagger•EXAMPLE
  32. 32. Obecné•Butterknife•Guava•Otto Event Bus
  33. 33. Butterknife•knihovna pro View injection•odstraňuje boilerplate při práci sviews•využívá generovaný kód•v IDE zapnout anotační procesor
  34. 34. Butterknife@InjectView(R.id.btn) Button vBtn;@InjectView(R.id.txt_content) TextView vContent;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Views.inject(this);...}
  35. 35. Guava•Googles core Java libraries•široké spektrum funkcionalit•kolekce, caching, strings, IO, ...
  36. 36. Otto Event Bus• umožňuje komunikace mezi moduly, které mohouzůstat oddělenymBus.post(newLogOutEvent(LogOutEvent.TIMEOUT));...@Subscribepublic void didLogOut(LogOutEvent event) {Toast.makeText(this, R.string.logout,Toast.LENGTH_SHORT).show();}
  37. 37. Testování•unit testy•UI testování
  38. 38. Unit testyjava.lang.RuntimeException:Stub!
  39. 39. Unit testy - AndroidSDK•Android JUnit extension + Mockobjekty•přinejmenším nepohodlné•dlouhé buildění a nahrávání dozařízení•omezený testovací framework
  40. 40. Unit testy - Robolectric2.0•testování androidí aplikace bezzařízení/emulátoru•standardní JUnit 4 testy v JVM napočítači•android třídy jsou zastíněny vlastní
  41. 41. FEST Android•přinaší asserty specifické pro AndroidassertThat(listAdapter).isNotNull().hasCount(10).hasViewTypeCount(2);
  42. 42. Robolectric+FEST Android =WIN•zcela nový level unit testů naandroidu•snadno se píší a rychle spouští
  43. 43. Robolectric+FEST Android =WIN•EXAMPLE
  44. 44. Inmite knihovny•android-styled-dialogs•https://github.com/inmite/android-styled-dialogs
  45. 45. android-styleddialogs
  46. 46. Díky•Otázky?
  47. 47. Odkazy• http://actionbarsherlock.com/• http://nineoldandroids.com/• https://github.com/jfeinstein10/SlidingMenu• https://github.com/SimonVT/android-menudrawer• http://developer.android.com/training/implementing-navigation/nav-drawer.html• http://viewpagerindicator.com/• https://github.com/astuetz/PagerSlidingTabStrip• https://github.com/derekbrameyer/android-betterpickers• https://github.com/SimonVT/android-numberpicker
  48. 48. Odkazy• http://square.github.io• https://gist.github.com/JakeWharton/5616899• https://github.com/nostra13/Android-Universal-Image-Loader• http://jakewharton.github.io/butterknife/• https://code.google.com/p/guava-libraries/• http://robolectric.org/

×