Nedávno jsme vydali novou verzi (2.4.0) naší populární mobilní aplikace na Android – Moje hodinovka. Což je mobilní aplikace, která vám pomáhá se zápisem vaší docházky. A protože se jedná o případ, kdy jsme celou mobilní aplikaci přepsali do nové struktury a i nového jazyka, tak se s vámi chceme podělit o zajímavé postřehy. Jen aby bylo jasné, tak porovnáváme verze aplikace, které jsou z 99% stejné z hlediska funkčnosti, takže se jedná o ideální případ pro porovnání.
Původní aplikace
Moje hodinovka byla původně psaná jako aplikace pro náš blízký okruh uživatelů a neuvažovalo se, že by ji používalo tisíce uživatelů tak, jak je tomu dnes. Takže její struktura byla nejjednodušší možná a nebyly použity žádné architektury pro větší či déle udržované aplikace. Také jazyk aplikace byl v té době jediný a to Java. A tohle si vše nesla aplikace od roku 2019, kdy vznikla. Postupem času Google představoval nové možnosti pro vývoj na Android a to jak nový jazyk Kotlin nebo nové baličky jako třeba Android Jetpack.
Nová aplikace
Takže pro letošek jsme se rozhodli celou aplikaci přepsat jak do nového jazyka Kotlin, tak pomocí všech doporučených postupů a knihovem, které aktuálně Google doporučuje. Jako „hlavní“ balíček doporučení od Google je Android Jetpack – což je například použítí architektury M-V-VM alias Model – View – ViewModel – neboli rozdělení aplikace na část, která se týká dat (model), pak grafické části – někdy taky jako UI (view) a potom ViewModel jako spojovací prvek, který uchovává data pro View a pracuje s daty z části Model. Další část z doporučeného balíčku byl Hilt ,což je Dependency Injection a následovník Daggeru. Hilt velmi dobře funguje v kombinaci s MVVM a taky generuje kód, který by si jinak musel developer sám napsat, takže velmi příjemné zjednodušení práce při tvorbě mobilní aplikace na Android. Pak už jen zkratkovitě další doporučené „knihovny“ jako Room pro DB, LiveData, ViewBinding a atd. Všechny informace o Android Jetpack najdete na oficiálních stránkách https://developer.android.com/jetpack.
Jak nyní porovnat mobilní aplikace?
Mohli bychom udělat asi „primitivní“ sčítání souborů a řádků kódu, ale to by asi nebylo úplně to pravé, i když svoji hodnotu to také má. Ale hledali jsme „lepší“ způsob, jak porovnat starou a novou mobilní aplikaci. Našli jsme projekt SCC (Succinct Code Counter
), který dokáže vytáhnout různé statistiky z kódu a to jak už dříve zmíněné spočítání řádků a souborů, tak i nějakou komplexitu kódu nebo jeho náročnost. Více o projektu na https://github.com/boyter/scc.
Na obrázku níže můžeme vidět jednotlivé statistiky, které nám nástroj SCC nabízí a vždy vyobrazí jakou hodnotu získala stará aplikace (Old) a kolik nová (New).
Vždy se porovnávají jednotlivé typy souborů, takže XML, Java a Kotlin vzlášť. Hlavní rozdíl je mezi Javou a Kotlinem, kde vidíme, že je v podstatě ve všech parametrech „lepší“ Kotlin. Tzn. že Kotlin je jak úspornější na počet řádků, tak i na jeho komplexitu. Což pak má za následek, že nástroj se pomocí metody COCOMO (Constructive Cost Model více o metodě např. na wiki – https://en.wikipedia.org/wiki/COCOMO ) snaží odhadnout pracnost projektu a to jak z hlediska času (jak dlouho by trvalo daný kód napsat), tak i například kolik by mohl stát. Nechme stranou konkrétní hodnoty, které mohou být rozporuplné, ale spíše relativní hodnocení. Tzn. že z hlediska nákladu by napsat novou aplikaci bylo levnější o 20% a o cca 10% rychlejší. A tím, že víme, že se z hlediska funkce jedná o totožné aplikace, vychází že použití moderních postupů a jazyků lze psát mobilní aplikace levnějí a rychleji.
Pokud byste chtěli vyvinout mobilní aplikaci na android, tak neváhejte a napište nám např. na e-mail hello@visionslabs.io a společně už něco vymyslíme.