Prodej zařízení s Androidem nezadržitelně roste, tvorbě aplikací pro něj se věnuje stále více vývojářů a mít pro svou aplikaci nebo webovou službu androidího klienta už není nadšenecký výstřelek, ale nutnost. Alespoň tam, kde jeho existence má své opodstatnění. A tak jsme se i my rozhodli začlenit další perspektivní platformu do svého portfolia.
Díky rostoucí oblíbenosti lze už i na českém internetu najít dostatek návodů, jak s vývojem začít, vysvětlení základních principů apod. Po úvodním „Hello World“ jsme ale byli ponecháni napospas osudu a rady, jak vyvíjet větší aplikaci, aby člověk v kupce sena hledal.
Několikrát omílané základy tedy přenechám již napsaným článkům, např. z AbcLinuxu nebo Rootu. Pokud teprve začínáte, doporučuji nejprve jejich přečtení. V dalším textu předpokládám nainstalované SDK a Eclipse s ADT pluginem, pochopení základních kamenů – aktivit, intentů a service. K vývoji samotného UI jen doplním upozornění na užitečnou utilitu hierarchyviewer, díky které lze sledovat chování jednotlivých prvků za běhu aplikace. Při učení práce s layouty a hledání chyb může být neocenitelným pomocníkem.
Maven
Osobně si už nedovedu představit vývoj aplikace v Javě bez buildu a správy závislostí pomocí mavenu. Prvním krokem tedy bylo zprovoznit integraci s Eclipse, k tomu slouží plugin m2eclipse-android-integration (od Eclipse verze 3.7 je podpora mavenu přepracovaná a místo něj se používá Android Connector). Díky nainstalovanému ADT zbývalo jen vytvořit projekt z archetypu android-quickstart a o samotný buildovací proces se stará přednastavený maven-android-plugin:
<plugin> <groupid>com.jayway.maven.plugins.android.generation2</groupid> <artifactid>maven-android-plugin</artifactid> <version>3.0.0-alpha-2</version> <configuration> <androidmanifestfile>${project.basedir}/AndroidManifest.xml</androidmanifestfile> <sdk> <platform>7</platform> </sdk> <deleteconflictingfiles>true</deleteconflictingfiles> <undeploybeforedeploy>true</undeploybeforedeploy> </configuration> <extensions>true</extensions> </plugin>
Po vytvoření projektu nás čekal drobný chyták: předgenerovaná aktivita obsahuje odkaz na layout v „magické“ třídě R, ta se ale generuje až po úspěšně dokončené kompilaci. Nezkompilovatelný prakticky prázdný projekt může leckoho zaskočit – samozřejmě stačí inkriminovaný kód na chvíli zakomentovat, nechat proběhnout kompilaci a je vše v pořádku.
Spring
Další stálice v J2EE vývoji je Spring framework. Pro Android je ve vývoji verze s příznačným názvem Spring Android, v době psaní aktuální verze 1.0.0.M4 nabízí jen RestTemplate a autentizaci, takže se nejedná o plnohodnotný port. Zatím se tváří spíše jako konektor pro většího bratříčka. Uvidíme, kam se bude ubírat další vývoj.
U většiny androidích aplikací je ale REST natolik klíčová součást, že se ho vyplatí využít i tak. Jeho použití je stejné, jako ve „velkém“ Springu, i mapování do transportního formátu probíhá jak jsme zvyklí – například pro JSON stačí přidat knihovnu Jackson na classpath.
Databáze a ORM
V rámci SDK je integrovaná podpora pro SQLite, která pro naše využití nabídla vše potřebné. Nebyl tedy důvod dívat se po jiné. Pro ulehčení práce jsme se poohlédli po vhodném ORM. V prostředí s natolik omezenými prostředky jako jsou mobily a tablety snad ani nemá smysl uvažovat o plnohodnotných nástrojích jako je Hibernate. Naštěstí jsou k dispozici odlehčené alternativy, v souvislosti s využitím v Androidu jsou nejčastěji zmiňovány OrmLite a ActiveAndroid. Každý má své výhody a nevýhody.
ActiveAndroid je placený (cca $20/licence) a zabírá pouhých 18kB. Pro vývojáře se zkušenostmi z Ruby on Rails pak může být lákadlem velká podobnost s ActiveRecord. Co bych mu vytknul je porušení zapouzdření a separation of concerns, ale to je spíše subjektivní názor. Našim požadavkům neodpovídal, a tak jsme se jím dále nezabývali.
OrmLite je naproti tomu šířen jako opensource a bez jakýchkoliv omezení. Pro někoho může být nevýhodou poněkud větší velikost knihovny (řádově 200kB), což pro nás nebylo rozhodující. Následovalo tedy přidání do projektu pomocí mavenu:
<dependency> <groupid>com.j256.ormlite</groupid> <artifactid>ormlite-core</artifactid> <version>4.22</version> </dependency> <dependency> <groupid>com.j256.ormlite</groupid> <artifactid>ormlite-android</artifactid> <version>4.22</version> </dependency>
Entitami jsou klasické POJO doplněné o anotace, jen musí vždy obsahovat bezparametrický konstruktor. Součástí knihovny je generický DaoManager pro práci s nimi, jeho použití je z dokumentace lehce pochopitelné.
Co odlišuje OrmLite od „dospělého“ ORM frameworku je práce s vazbami mezi objekty. Kaskádování řeší v minimální míře – při ukládání entity se uloží jen id cizí entity (pokud jde o vlastníka vazby), ale o její skutečné vytvoření/uložení se už nestará. Stejně tak dotahování entit – k dispozici je jen id navázaného objektu, pro dotažení ostatních atributů je nutné zavolat metodu refresh na příslušném dao.
Kontinuální integrace
Jako většina Javového světa, i my používáme Hudson (Jenkins, chcete-li). Po instalaci android pluginu je potřeba ještě SDK. V prostředí headless serveru lze do staženého SDK doinstalovat API pomocí příkazu:
./android update sdk -u
Narozdíl od GUI verze Vám nedá na výběr a stáhne všechna dostupná API, to může zabrat na disku až 3GB. Po nastavení cesty k SDK v Hudsonu už lze přidat build Android projektu jako jakýkoliv jiný.
Závěr
Předvedli jsme si integraci pokročilejších, ale pro vývoj v Androidu užitečných, technologií. Bylo by na místě rozebrat i možnosti testování, ale to zase příště, až nasbíráme dostatek praktických zkušeností.
Zdroje
* Oficiální stránky
* Seriál o vývoji na root.cz
* Seriál o vývoji na svetandroida.cz
* Google I/O
* Spring pro Android
* Příklady kódů
* Blog o Androidu
* Tipy&triky
* Testovací framework Robotium
Napsat komentář