Povídání o čtvrté verzi bylo krapet obsáhlé, proto tento článek vemu hopem. První placená verze aplikace vyšla 29. 6. 2017 a byla mým velikým milníkem, jelikož pro to, aby člověk mohl nabízet aplikace jako placené, musí mít… chvilka napětí… živnosť ák. Tadá! No a k tomu je bohužel potřeba nemálo znalostí a informací.
Dnes se v těchto byrokratických vodách cítím rozhodně líp než na začátku roku 2017, už mi narostly i malé (Nemovy) ploutvičky. Dokud člověk studuje anebo pracuje na hlavní pracovní poměr, případně žije v jeskyni či má těžce na salámu, tak nemá potřebu řešit termíny jako jsou zdravotní pojištění, sociální pojištění, finanční úřad, živnostenský úřad, daňové přiznání atd. Je toho opravdu dost a co si budeme povídat – nemít na takové věci účetní, nedělal by člověk nic jiného, než-li se prohrabával stohy více či méně zbytečných papírů. Na druhou stranu, dnes mohu s klidem říct, že to není vůbec nic složitého. Jak už to tak totiž bývá, věci jsou složité jen do doby, dokud je sama bytost nepochopí. Pokud Ti v cestě stojí právě tato překážka, rozhodně se jí nenech odradit! Nakonec – stejně je to všechno absolutně jedno! 🕉
Verze CE 1.0.0 vyšla zároveň s neplacenou verzí 4.1.1 a neobsahovala navíc žádné funkce, sloužila opravdu jen pro podporu vývoje aplikace. Jediný viditelný rozdíl je přídavek CE v jejím názvu.
Nicméně, příjemným bonusem byla menší velikost aplikace. A to zhruba o 23 % (0,64 MB). Mohla za to absence knihovny zprostředkovávající reklamy, po kterých není v CE verzi ani stopy.
Jak jsem se již letmo zmiňoval v předešlé kapitole, přídavky „FREE“, „PRO“ a jim podobné už mi přijdou ohrané. Pojem FREE už dnes představuje spíše aplikaci, kterou lze pouze volně stáhnout, avšak samotná aplikace žije v kontextu reklam. Přídavek PRO zase evokuje, že aplikace nabízí nějaké profesionální funkce. Většinou tou profi funkcí je zmírnění, v lepším případě odstranění, reklam. Samozřejmě jsem nevyzkoušel všechny FREE a PRO aplikace pro Android, hovoří za mě jen zkušenosti s aplikacemi, které mi přišli pod palec.
Proč a co tedy vlastně znamená CE? Zkratka vychází z anglického Community Edition, česky edice Komunity. Při vymýšlení této zkratky a jejího významu mě přepadl pocit, že jsem přišel na něco nového a jedinečného. O několik měsíců později jsem narazil na to, že tuto zkratku používá také třeba vývojové prostředí IntelliJ IDEA. A až při psaní těchto řádků mě trklo, že výraz Community využívá i Microsoft u svého vývojového prostředí Visual Studio, se kterým jsem už přišel několikrát do styku. Na(ne)štěstí, v obou zmíněných případech má zkratka opačný význam – Community slouží pro identifikaci verze aplikace, která je zdarma. Když si uživatel aplikaci zaplatí, povýší její hodnost na podnikovou, profesionální či dokonce ultimátní! 🔱
Členem mé Komunity se stane automaticky každý, kdo si CE verzi koupí – ať chce nebo nechce. Diktatura! Velmi bych si ale přál, aby každý člen zaměnil slovo „koupit“ za slovo „přispět“. Aplikaci tvořím, jak nejlépe umím, prostě for fun. Nesnažím se tedy používat žádné obchodní a reklamní triky a chci, aby každý, kdo přispěje, dostal produkt vždy ve své nejdokonalejší podobě!
Po verzi CE 1.0.0 vyšla verze CE 1.1.0 s překopaným nastavením a téměř ihned, jak to bývá zvykem, opravná verze CE 1.1.1. Všechny verze korespondovaly s neplacenými verzemi a CE verze stále nepřinášela uživatelům nic navíc. Nejspíše proto si jí za dobu 241 dní zakoupilo „pouze“ 12 uživatelů – opravdových fandů. Mockrát děkuji! 🙏
Odborněji…
Všechny hlavní problémy až na jeden, které se přede mě v této verzi postavily, jsem rozebral v článku o verzi 4.x.x, jelikož jsem verze vyvíjel kontinuálně. Ten jeden problém tkvěl v tom, jak rozumně vyvíjet dvě téměř identické aplikace, ovšem s drobnými funkčními rozdíly…
Dávám na vědomí, že v následujících odstavcích není slovo „verze“ míněno ve smyslu vertikálním (1.0.0, 1.1.0, 2.0.0, …), ale ve smyslu horizontálním (zde neplacená a CE verze)!
Existuje několik možností, o kterých vím, že problém řeší. Nejjednodušší je zkopírovat si projekt na dva a oba vyvíjet zvlášť . Člověk nemusí být nijak zvlášt bystrý, aby dokázal postřehnout, že tudy cesta nevede. Přeci jen, jádro aplikace a dejme tomu 95 % jejího kódu jsou totožné, včetně zdrojů, například obrázků. Pokud upravím/opravím kód v jedné verzi, nesmím zapomenout upravit/opravit kód ve druhé. U velmi malého projektu se to dá zvládnout, ale přináší to spoustu zbytečné práce.
Druhou možností je vytvořit si konstantu reprezentující verzi aplikace a podle ní kód větvit. Pak už jí stačí pouze před zkompilováním přepnout na požadovanou verzi a je to. Nicméně, nesmí se vždy zapomínat na přepsání vertikální verze aplikace (pokud je pro horizontální verze odlišná), názvu balíčku atp. Řešení už je to lepší, ale toho zbytečného kódu navíc… S tím bych se nesrovnal. Pokud by programátor nepoužil například nástroj ProGuard, tak by jednotlivé verze aplikace zbytečně obsahovaly kódy a zdroje druhé verze, které nemají společný průnik.
Elegantním řešením tohoto problému je opět skvělý Gradle plugin. A to hlavně proto, že přesně pro tento účel byl stvořen! Gradle vytváří abstraktní vrstvu nad celým projektem a lze pomocí něj různými příkazy sestavovat odlišné větve programu.
V praxi to může vypadat tak, že si programátor vytvoří například dvě větve programu. Gradle následně vytvoří tři kořenové adresáře projektu (větev 1, větev 2, sdílená větev). Pokud dále požaduje, dejme tomu, aby pro každou větev byla použita stejná třída s jiným kódem, tak jí smaže ze sdílené větve a třídu se stejným názvem a stejnou cestou nahraje do každé větve zvlášť a kód upraví. Pak už jen stačí zvolit větev a sestavit program. Gradle pracuje vždy se soubory ve sdílené větvi a doplňuje je obsahem z vybrané větve. Jednoduché a zároveň velmi mocné „kouzlo“!