Jak zkonvertovat aplikaci pro Android do iOS, z Java do Objective-C
Pravděpodobně nebudete potřebovat představivost úspěšného romanopisce, aby vám bylo jasné, jak jsme začali: Ano, na Google.com. Spousta vyhledávání, spousta klíčových slov a co jsme dostali? Mnoho lidí tvářících se jako experti, kteří tvrdili, že to prostě není možné. Tedy - není to možné bez spousty ruční práce. Operační systémy (Android, iOS) jsou velmi odlišné, víte, Android užívá Java Virtual Machine, problémy s licencemi, Apple má speciální API, jsou tu unikátní uživatelská rozhraní iPhone a iPadu... A Java je velmi, velmi odlišná od Objective-C... Znáte to: spousta bla, bla, bla...Pak tam byly jiné rady, většinou doporučující používat projekt j2objc od Google. Ale většinou jen teoretické rady, žádné skutečné zkušenosti.
Pokud nevíte, co j2objc je, pak tedy: j2objc je open source projekt od společnosti Google, který umí převést kód v jazyce Java do Objective-C (nebo, v krátkosti, Obj-C). A výsledný kód by měl být velmi dobrý - tak dobrý, že jej můžete prostě vzít a zkompilovat jej. Zní to příliš dobře, aby to byla pravda?
Google slibuje, že tento nástroj umožňuje kódu v Javě stát se doslova součástí aplikací pro iOS, žádná editace vytvořených souborů není nutná. Myšlenka je tato: Vytvoříte samostatné UI (uživatelské rozhraní) a příslušný kód UI pro obě platformy, ale aplikační logika a datové modely budou stejné - pro oba projekty. Ano, to zní dobře a my jsme to rozhodně museli zkusit...
Je j2objc tím pravým řešením pro překlad Javy do Obj-C?
Chcete-li použít j2objc (http://j2objc.org/), musíte jej stáhnout, rozbalit a použít tím správným způsobem - což znamená, že budete muset dát hlavičkové soubory a knihovny na to správné místo, aby je váš kompilátor našel - a používal je. A nastavit kompilátor, samozřejmě. Proč? Protože jakmile si přeložíte svůj projekt z Javy do Objective-C, kompilátor bude potřebovat tyto hlavičkové soubory a knihovny, aby vytvořil vaši finální aplikaci pro iOS.Budeme zcela upřímní: Trvalo hodně času projít celou (zcela nedostatečnou) dokumentaci j2objc i rady jiných lidí, aby to aspoň trochu fungovalo, a když jsme se konečně dostali k přeloženému Objective-C kódu, nebyli jsme zdaleka tak šťastní, jak jsme očekávali. Protože kód není určen pro další změny. Metody jsou přejmenovány (názvy jsou srozumitelné, ale docela dlouhé), jiné metody přidány a celý výsledek je trochu nepřehledný.
Ale buďme spravedliví: Tohle není problém tohoto nástroje - to je náš problém. Měli jsme nějaká (nevhodná) očekávání a ta nebyla splněna. Naše představa byla přeložit kód z Javy do Obj-C a pak udělat nějaké změny a získat pěkný Obj-C kód, kde budeme moci dělat tolik změn, kolik bude dnes - nebo v budoucnu - potřeba. Ale to není účelem tohoto konvertovacího nástroj.
Trochu jsme si pak hráli s tímto nástrojem i s výsledným kódem. Není možné využít některé konverze a použít je pro náš účel? Znova trochu upřímnosti: Raději bychom nepoužívat žádné knihovny z Google (jako v každém kódu, i tam jsou nepochybně nějaké chyby a proč přidávat chyby Googlu k těm našim?). A chtěli jsme kód udělat srozumitelnějším. Ale v jednu chvíli to už bylo jasné: Ne, to není ten správný způsob, jak převést naši aplikaci pro Android do iOS.
Našli jsme ten správný nástroj pro převod
A pak jsme našli další open source nástroj, čtyři nebo pět let starý java2objc (https://code.google.com/p/java2objc/). Jméno může vypadat podobně, ale není to totéž jako j2objc. Tento kód je zveřejněna pod licencí Apache a jeho účel je jiný. Výsledný kód může být nedokonalý, ale je velmi dobře použitelný. Tento nástroj se zabývá jednotlivými zdrojovými soubory v Javě místo konkrétními třídami a pokusí se dle vlastní dokumentace vytvořit "dobře řemeslně vytvořený Objective C kód, jako by byl psaný člověkem". A velmi snadno se používá.Nemusíte dělat žádné složité nastavení - stačí spustit: run xxx.java - z příkazové řádky, kde xxx.java je váš Java kód, který chcete přeložit do Objective-C. Java2objc je také velmi rychlý - po několika sekundách je přeložený kód ve výstupní složce - pojmenované output. Můžete přeložit všechny soubory jeden po druhém nebo více Java souborů najednou - a pak je použít v XCode. Bez jakéhokoliv zdlouhavého přepisování Javy do Objective-C vám tato aplikaci vytvoří zdrojový kód v Objective-C.
Zdokonalování kódu
V dokumentaci k java2objc si můžete přečíst, že výsledný kód pravděpodobně nebude fungovat podle očekávání - a pravděpodobně nebude ani zkompilován. Tak tomu bylo i v případě našeho kódu - ale bylo to pro nás naprosto OK. Vzhledem k tomu, že provést potřebné změny bylo docela snadné.Jistě, je třeba změnit všechny věci, které mají co do činění s uživatelským rozhraním. Přepsali jsme grafickou knihovnu, což bylo docela snadné, protože metody grafiky v iOS API jsou jednodušší, než ty, které jsou v Androidu, hudební knihovnu (stejný případ), dotykové ovládání a vstupy/výstupy souborů.
Pak jsme museli opravit hlavně některé funkce/metody pro práci s řetězci a pole. Abychom si věci zjednodušili, rozhodli jsme se použít převážně standardní pole ve stylu jazyka C, která byla pro naše účely zcela dostačující. Jen jedna věc zde byla k řešení - dynamická pole v C neví, jak jsou velká, takže jsme si to museli pamatovat v dalších proměnných.
Celá struktura souborů je velmi podobná v Xcode iOS i v Androidu, takže pokud používáte architekturu Model-View-Controller na Androidu, je poměrně snadné znovu totéž stvořit se stejnými soubory na iOS. Pokud jde o assets, byla tam jen jedna věc, kterou jsme museli převést - běžné grafické formáty jsou stejné, ale v Apple iOS API není žádná podpora mid souborů a ogg souborů. Tak jsme převedli mid soubory do ogg (pomocí skvělého softwaru LMMS) a poté použili Audacity pro převod všech ogg souborů (zvuků i hudby) do aac souborů.
A to je vše... Díky java2objc celá konverze z Javy do kódu Objective-C trvala mnohem kratší dobu, než jsme předpokládali - a i když hned po konverzi bylo zobrazeno v XCode mnoho chyb, vyrovnali jsme se s nimi poměrně rychle. Doufejme, že stejná taktika může být dobrá i pro vaše projekty.
GameStylus tým
(GameStylus je herní engine a editor pro adventure hry, který může použít kdokoli. Zkuste to! Můžete tak snadno vytvářet hry pro Android a iOS.)
Případný update najdete v našem článku o konverzi z Androidu do iOS zde.
Žádné komentáře:
Okomentovat