48
Tomáš Kypta & Tomáš Vondráček Užitečné Android knihovny pro vývoj a testování mDevCamp 2013

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

Embed Size (px)

DESCRIPTION

Prezentace s konference mDevCamp 2013 o Android knihovnách

Citation preview

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

Tomáš Kypta & Tomáš Vondráček

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

testovánímDevCamp 2013

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

Představení

•Tomáš Vondráček & Tomáš Kypta

•Android vývojáři ve společnosti Inmite

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

•“perform one task and perform it well”

•open source

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

Agenda•rychlý základ

•knihovny pro vývoj

•UI, Networking, Image loaders, DI a další

•testování

•Inmite knihovny

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

Rychlý základ

•ActionBarSherlock

•NineOldAndroids

•Support library

•Google Play Services

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

UI

•Drawer (side menu)

•Page indikátory

•Number pickers

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

UI - Drawer

•SlidingMenu

•android-menudrawer

•DrawerLayout

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

SlidingMenu

•dobře konfigurovatelné

•levé i pravé side menu

•demo aplikace v Google Play

•není podle nových guidelines

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

android-menudrawer

•levé i pravé menu

•umí také bottom a top menu

•z nových guidelines umí pouze ikonu navigation draweru

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

DrawerLayout

•support library v4, revize 13

•přesně podle guidelines

•s ActionBarSherlockem nefunguje navigation drawer icon

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

UI - Page indikátory•ViewPagerIndicator

•časem prověřená

•PagerSlidingTabStrip

•Google Play Tabs

•Support library

•title strip & tab strip

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

UI - Number pickery

•android-betterpickers

•android-numberpicker

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

Networking na Androidu•Android má dva vestavěné HTTP

clienty

•Apache HttpClient

•lepší volba na Androidu < 2.3

•HttpUrlConnection

•lepší volba na Androidu >= 2.3

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

Networking

•OkHttp

•Volley

•Protocol Buffers, Protoparser

•REST - Retrofit

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

OkHttp•založený na HttpUrlConnection

•Android >= 2.2

•SPDY

•gzip

•response caching

•zotaveni z chyb, connection pooling

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

OkHttp•lze použít bez přepsání stávajícího

kódu

•implementuje HttpUrlConnection API

•volitelný balík implementuje část Apache HttpClient API

•lze použít i jako transport vrstvu

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

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(); }

}

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

Retrofit•REST client pro Anroid a Javu

•jednoduchá deklarace RESTového API

•podporuje GET, POST, PUT, DELETE, HEAD

•podporuje form encoded i multipart data

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

Retrofit

•EXAMPLE

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

JSON (de)serializace

•GSON - jednodušší

•Jackson - rychlejší

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

Protocol Buffers

•definice zprávy v samostatném souboru (.proto)

•kompiler vytvoří třídy ve zvoleném jazyce, které reprezentují obsah zprávy

•sdílené mezi serverem a klientem

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

Protocol Buffersmessage User {

required sint64 objectId = 1;

optional string firstName = 2;

optional string lastName = 3;

required string email = 4;

}

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

Image loadery

•Android-Universal-Image-Loader

•Picasso

•Volley

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

Android-Universal-Image-Loader

•výborně konfigurovatelný

•memory a disk cache

•podpora pro HttpUrlConnection i HttpClient

•nijak explicitně nepracuje s HttpResponseCache

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

Picasso•velice snadno se používá

•využívá memory a disk cache (HttpResponseCache)

•umí placeholdery, error drawably

•transformace obrázků

•využívá OkHttp nebo HttpUrlConnection

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

Picasso

Picasso.with(context)

.load(url)

.into(view);

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

Dependency injection•univerzální pattern, v zásadě netřeba

knihoven

• testování

• JSR 330

•RoboGuice & Dagger

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

DI - RoboGuice (google-guice)

•reflexe

•graf objektů se vytváří při startu

•řádově stovky ms pro hello world

•musí naloadovat všechny classy

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

DI - RoboGuice•kromě DI přináší spoustu android

specific featur

•např. @InjectView, @InjectResource

•activty a fragmenty musí dědit od Robo tříd

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

DI - Dagger•využívá anotační procesor ke

generování kódu

•compile-time validace

•zanedbatelný overhead

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

DI - Dagger

•EXAMPLE

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

Obecné

•Butterknife

•Guava

•Otto Event Bus

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

Butterknife

•knihovna pro View injection

•odstraňuje boilerplate při práci s views

•využívá generovaný kód

•v IDE zapnout anotační procesor

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

Butterknife@InjectView(R.id.btn) Button vBtn;

@InjectView(R.id.txt_content) TextView vContent;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Views.inject(this);

...

}

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

Guava

•Google's core Java libraries

•široké spektrum funkcionalit

•kolekce, caching, strings, IO, ...

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

Otto Event Bus• umožňuje komunikace mezi moduly, které mohou

zůstat oddělenymBus.post(new LogOutEvent(LogOutEvent.TIMEOUT));...

@Subscribepublic void didLogOut(LogOutEvent event) {

Toast.makeText(this, R.string.logout, Toast.LENGTH_SHORT).show();

}

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

Testování

•unit testy

•UI testování

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

Unit testy

java.lang.RuntimeException: Stub!

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

Unit testy - Android SDK•Android JUnit extension + Mock

objekty

•přinejmenším nepohodlné

•dlouhé buildění a nahrávání do zařízení

•omezený testovací framework

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

Unit testy - Robolectric 2.0•testování androidí aplikace bez

zařízení/emulátoru

•standardní JUnit 4 testy v JVM na počítači

•android třídy jsou zastíněny vlastní

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

FEST Android•přinaší asserty specifické pro Android

assertThat(listAdapter)

.isNotNull()

.hasCount(10)

.hasViewTypeCount(2);

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

Robolectric+FEST Android = WIN

•zcela nový level unit testů na androidu

•snadno se píší a rychle spouští

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

Robolectric+FEST Android = WIN

•EXAMPLE

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

android-styled dialogs

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

Díky

•Otázky?