APDE GSoC ’18: Integrace s režimem Android 4.0

Při spuštění náčrtu s cílem watch face se náčrt sestaví a odešle do hodinek. Poté doprovodná aplikace APDE wear automaticky načte sketch a spustí výběr ciferníku hodinek:

VR skety se instalují stejně jako běžné aplikace. Podporují platformu VR od Googlu, která zahrnuje náhlavní soupravy Cardboard a Daydream:

Pokud si chceš tyto nové funkce vyzkoušet, připoj se ke kanálu APDE Preview Channel a podle pokynů v horní části se zařaď do seznamu testerů.

V době psaní článku je k dispozici verze v0.5.0-pre2 je k dispozici a obsahuje tapety a VR, ale ne ciferníky hodinek.

Jak to všechno funguje?

Klíčem k podpoře těchto nových cílů byl upgrade na používání desktopového zpracování Android Mode 4.0, který přidal podporu tapet, ciferníků hodinek a VR. Moje práce spočívala právě v přenesení těchto skvělých nových funkcí do APDE, což samo o sobě nebyl snadný úkol.

Na začátku jsem se rozhodl, že chci, aby byl každý sketch spustitelný pro každý cíl. Chci, aby uživatelé mohli vzít jakýkoli skeč nebo příklad a bez problémů ho přenést z jednoho prostředí do jakéhokoli jiného, ať už jde o aplikaci, tapetu, ciferník hodinek nebo VR. Tímto způsobem je zajištěna maximální flexibilita a kapacita pro zkoumání plného potenciálu skic Processing. Jedinou výjimkou z tohoto pravidla je, že skici pro VR musí být 3D (2D skici prostě vzhledem k povaze VR nefungují).

Tento přístup se liší od přístupu v režimu Android. Například na počítači je VR zabaleno jako knihovna, takže pro cíl VR lze spustit pouze skicy, které explicitně importují knihovnu VR. V APDE lze pro VR spustit každý 3D náčrtek a správné importy se přidají automaticky.

Systém sestavení nyní používá sadu šablon pro sledování všech souborů sestavení, jako jsou aktivity, manifesty a rozvržení. Tento způsob je mnohem vhodnější než dřívější tvrdé kódování. Šablony jsou v podstatě doslovně převzaty z režimu Android, ale je zde několik změn, například podpora náhlavních souprav Daydream VR.

Živé tapety a nákresy VR se instalují stejně jako nákresy běžných aplikací, ale VR vyžaduje knihovny Google VR. Podobně i ciferníky hodinek vyžadují knihovnu pro podporu nositelných zařízení, ale neinstalují se stejně, protože musí být nainstalovány do hodinek.

Trápení s ciferníky hodinek

Potřeboval jsem nainstalovat skicu do hodinek.

První, co jsem zkusil, bylo posunout skicu do hodinek a nainstalovat ji tam. Ukázalo se, že postranní nahrání APK do hodinek se systémem Wear OS (dříve Android Wear) není tak snadné, jak by se mohlo zdát. V telefonu s Androidem stačí v nastavení povolit instalaci z neznámých zdrojů a vše je připraveno. Na hodinkách wear je však tato instalace systémem blokována a není možné ji obejít bez rootnutí telefonu nebo hodinek nebo bez připojení hodinek k počítači. Nic z toho není pro základní mobilní vývojové prostředí volbou.“

Dále jsem zkusil aplikaci zabalit jako aplikaci pro Wear 1.x a nainstalovat ji do telefonu. Před systémem Android Wear 2.0 byly všechny aplikace Wear distribuovány tak, že byly přibaleny k aplikacím pro telefon, i když tato aplikace pro telefon byla jen prázdnou skořápkou. To vše se změnilo ve verzi 2.0, kdy se aplikace wear staly samostatnými. Doufal jsem, že budu moci využít starý systém a nainstalovat aplikaci pro hodinky prostřednictvím telefonu, ale bylo to marné. Stále nevím, zda je starý způsob instalace podporován i na novějších hodinkách, ale nepodařilo se mi zprovoznit důkaz konceptu.

Nakonec jsem se uchýlil k poslední metodě: načítání tříd, což je druh černé magie. Jde o to, že místo instalace náčrtu jako samostatné aplikace mohu načíst třídu náčrtu do aplikace, která je již na hodinkách spuštěna, čímž odpadá nutnost instalovat náčrt při každém spuštění. Jedná se o zásadně odlišný model, než jak v současnosti funguje APDE. APDE vytvoří skicu a ta je samostatnou aplikací, která se nainstaluje. Na obrazovce aplikace se hromadí několik skic, jak je uživatel spouští, a zůstávají tam, i když je APDE odinstalováno. Hodinky jsou jiné. Nyní se náčrty neinstalují, pouze se načítají. Jako ciferník hodinek je vždy k dispozici pouze jedna skica, která po odinstalování APDE zmizí.

Ukázalo se, že tento přístup funguje. Uživatel si do hodinek nainstaluje přemosťující aplikaci z Obchodu Play (zatím není k dispozici) s názvem „APDE Wear Companion“. Když APDE vytvoří náčrtek, odešle jej do aplikace wear companion. Nositelný společník skicu rozbalí a vyzve uživatele, aby si vybral ciferník hodinek zabudovaný do nositelného společníka. Tento ciferník pak načte náčrt a zobrazí jej. To je překvapivě bezproblémové.

Objevilo se několik problémů.

Když skica spadne, je spuštěna v aplikaci wear companion, takže spadne i celá aplikace wear companion. V současné době se snažím omezit poškození, ale někdy se wear companion rozbije a musí se restartovat, protože skica spadla příliš mnohokrát. APDE také v současné době nevidí stack traces z havarovaných ciferníků, protože proces zemře dříve, než se stack trace může odeslat. (Tiskové příkazy však fungují.)

Neexistuje jen jeden ciferník hodinek; ve skutečnosti jsou dva. Processing má dvě základní třídy pro watch faces: jednu pro výchozí renderer (JAVA2D) a jednu pro renderery založené na OpenGL (P2D a P3D). Existují tedy dva watch faces, jeden pro každý renderer. Když wear companion rozbalí náčrtek, zkontroluje, který renderer používá. Pak se příslušný ciferník zviditelní a druhý se skryje. Je to další druh černé magie, protože uživatel by si toho neměl ani všimnout, ale zdá se, že to funguje docela dobře.“

Právě jsem lhal. Ve skutečnosti jsou ciferníky hodinek čtyři. Ukázalo se, že při načtení nového ciferníku, pokud je nový ciferník stejný jako starý (a všechny náčrty používají stejné dva ciferníky), tak systém „zkratuje“ (to je odborný termín) a ciferník znovu nenačte. U běžných ciferníků je to v pořádku, ale ciferník APDE se musí znovu načíst, aby se zobrazil nový náčrtek. Řešení je špinavé, ale účinné: stačí mít pro každý renderer dva ciferníky (celkem čtyři) a při načítání nových skic je střídat, aby se ciferník musel znovu načíst.

Přes všechny tyto potíže mohu s radostí říci, že ciferníky zřejmě fungují docela dobře, alespoň na dvou sadách zařízení, na kterých jsem je testoval. Ostatní, pravděpodobněji používané cíle – tapety a VR – se implementovaly podstatně snadněji.

Výhled do budoucna

Další významnou funkcí plánovanou na letošní léto je režim „náhled“. V současné době se musí náčrty APDE instalovat při každém spuštění. Toto uspořádání není ideální, protože instalační program zdvojnásobuje dobu mezi stisknutím tlačítka „spustit“ a zobrazením náčrtu na některých telefonech. Jak bylo popsáno výše, všechny náčrty mohou také zahlcovat obrazovku aplikací. Nemuset instalovat náčrty je pravděpodobně nejžádanější funkcí APDE.

Původně jsem měl dva návrhy řešení tohoto problému. Zaprvé použít Processing.js pro převod náčrtku do JavaScriptu a spustit jej ve WebView. Za druhé, využít Instant Apps ke spuštění náčrtu bez nutnosti jeho instalace. Obě tato řešení jsou stále nedokonalá. Processing.js je zastaralý a nepodporuje žádné nativní rozhraní API systému Android, například akcelerometr. Instant Apps je přinejlepším vratký nápad, protože ani nevím, jestli bude možné podvrhnout debugger, aby hostoval skety lokálně a spouštěl je, nebo jestli by to bylo rychlejší než je prostě nainstalovat.“

Naštěstí mi rozlousknutí oříšku s ciferníkem hodinek dalo nový přístup. APDE nepotřebuje převádět náčrtek do JavaScriptu ani vytvářet okamžitou aplikaci. Stačí mu vzít existující náčrtek a místo instalace do něj načíst třídy.

Při tomto přístupu stačí APDE sestavit prostředky pomocí AAPT, zkompilovat třídy pomocí ECJ a dexovat třídy. Na mém telefonu trvá celý tento proces méně než dvě sekundy (ačkoli mnoho telefonů je podstatně pomalejších), což je obrovské zlepšení oproti nutnosti sestavit APK a nainstalovat ho.

Pokud se podíváme ještě dál, plánuji v létě implementovat inkrementální kompilaci, tj. nechat kompilátor běžet na pozadí a zobrazovat chyby v reálném čase. S tímto systémem bude skica pravděpodobně zkompilována ještě předtím, než uživatel stiskne tlačítko spustit, což znamená, že zbývá jen dexování. Jinými slovy, zavaděče tříd by pravděpodobně mohly proces sestavování zkrátit na méně než sekundu, samozřejmě v závislosti na hardwaru telefonu.

Tento rok v létě nás čeká ještě mnoho vzrušujících událostí!

Fin

Pokud si chcete změny, které jsem provedl, prohlédnout podrobněji, podívejte se na větev android-mode-4 na GitHubu. Zanechal jsem tam podrobné zprávy o revizích (většinou) a je tam veškerý kód.

Zůstaňte naladěni na náhled režimu!