Tajemství vývoje mobilních aplikací. Co je to „nativní aplikace“? Vývoj nativních aplikací pro Android

💖 Líbí se vám? Sdílejte odkaz se svými přáteli

Trh s mobilními aplikacemi je starý více než deset let, ale stále se rychle rozvíjí. Poptávka ze strany firem neustále roste a stále výrazně převyšuje nabídku, což vede k neustálému zvyšování nákladů na vývoj. Jedním z řešení, jak snížit náklady na tento proces, je vývoj napříč platformami, kdy se na všech platformách používá stejný kód.

Minule jsme se dotkli multiplatformního mobilního vývoje a od té doby se hodně změnilo. Je čas znovu mluvit o metodách a nástrojích.

Nejprve si znovu projdeme terminologii.

Rodák

Pokud vývojáři v procesu psaní aplikace použijí programovací jazyk přijatý pro konkrétní platformu, ať už je to Objective-C a Swift pro iOS, nebo se taková aplikace bude nazývat nativní (z angličtiny native - native, natural).

Výhody nativních aplikací:

  • rychlost a odezva rozhraní. Aplikace reaguje na kliknutí okamžitě, prakticky nedochází k prodlevám v animaci, rolování, příjmu a výstupu dat;
  • jasný a snadný přístup k funkcím zařízení a senzorům. Pro vývojáře není problém práce s geolokací, push notifikacemi, pořizování fotek a videí přes kameru, zvuk, akcelerometr a další senzory;
  • schopnost pracovat do hloubky s funkcemi smartphonu. Stejně jako v předchozím odstavci jsou věci jako animace, vytváření složitých rozhraní a provoz neuronových sítí přímo na zařízeních implementovány možná ne jednoduše, ale předvídatelně;
  • . Nativní aplikace obvykle pracují s prvky rozhraní „platformy“: nabídky, navigace, formuláře a všechny další prvky návrhu jsou převzaty z operačního systému, a proto jsou uživateli známé a srozumitelné.

Má to jen jednu nevýhodu – vysoké náklady na vývoj a podporu. Pro každou platformu musíte napsat svůj vlastní kód. S růstem trhu mobilních aplikací se vývojáři stali nejen drahými, ale velmi drahými.

A ne příbuzní

Multiplatformní aplikace jsou psány pro několik platforem najednou v jednom jiném než nativním jazyce. Jak může takový kód fungovat na různých zařízeních? I zde existují dva přístupy.

První je, že ve fázi přípravy aplikace k publikaci se pomocí transpileru změní na nativní pro konkrétní platformu. Ve skutečnosti je jeden multiplatformní programovací jazyk „přeložen“ do jiného.

Druhým je, že se do výsledného kódu přidá určitý obal, který již pracuje na zařízení a za běhu převádí volání z nenativního kódu do nativních systémových funkcí.

Předpokládá se, že většinu tohoto kódu lze přenášet mezi platformami – je zřejmé, že se nemění například logika nákupu, ukládání zboží do košíku, kalkulace trasy pro taxi, psaní zprávy do messengeru. podle toho, zda má klient Android nebo iOS. Potřebujeme jen vylepšit UI a UX pro platformy, ale nyní lze v určitých mezích kombinovat i toto – například hamburgerové menu se aktivně používá na Androidu i iOS. Takže i provádění oprav rozhraní tak, aby aplikace splňovala ducha a literu požadované platformy, je otázkou přání, požadované rychlosti a kvality vývoje.

výhody:

  • náklady a rychlost vývoje. Protože je potřeba napsat mnohem méně kódu, sníží se náklady na práci;
  • schopnost využívat vnitřní zdroje společnosti. Jak si ukážeme později, vývoj mobilních aplikací pro různé platformy mohou často provádět vaši stávající programátoři.

nedostatky:

  • nenativní rozhraní nebo minimálně nutnost pracovat s rozhraním každé platformy zvlášť. Každý systém má své vlastní požadavky na design prvků a někdy se vzájemně vylučují. To je třeba vzít v úvahu při vývoji;
  • problémy při implementaci složitých funkcí nebo možné problémy při práci i s jednoduchými postupy kvůli chybám v samotných vývojových rámcích. Prostředí pro více platforem pouze překládá požadavky na systémová volání a rozhraní do formátu, kterému systém rozumí, a proto v této fázi mohou nastat jak potíže s porozuměním, tak chyby v rámci samotného;
  • rychlost práce. Vzhledem k tomu, že multiplatformní prostředí je „nadstavbou“ nad kódem (ne vždy, ale v určitých situacích), má svá vlastní zpoždění a pauzy ve zpracování uživatelských akcí a zobrazování výsledků. To bylo zvláště patrné před několika lety na chytrých telefonech, které měly nižší výkon ve srovnání s těmi dnešními, ale nyní, s nárůstem výkonu mobilních zařízení, to již lze zanedbávat.

Jak vidíte, tyto dvě metody jsou prakticky zrcadlovým obrazem jedna druhé – výhody nativního vývoje, nevýhody cross-platformního vývoje a naopak.

Populární multiplatformní vývojové platformy a nástroje

Jak jsme psali výše, existují dva přístupy – přeměna kódu na nativní ve fázi sestavení nebo přidání určitého wrapperu, který překládá volání do a ze systému.

Cordova a PWA jsou dva nástroje, které fungují přesně v ideologii wrapperu.


Cordova a HTML5

Jedna z nejoblíbenějších oblastí v multiplatformním programování, které se často lidově říká PhoneGap. Ve skutečnosti se vytvoří mobilní web, který je „zabalen“ do malého kódu platformy, který přenáší hovory ze systému do aplikace a zpět.

Všechny nevýhody a výhody jsou zde vyjádřeny jasněji než kdekoli jinde. Můžete použít webové vývojáře (HTML, CSS a JavaScript jako základní technologie) a vytvořit první verzi aplikace za měsíc nebo dokonce za pár týdnů za relativně málo peněz. Ano, zpomalí provoz, možná nebude mít úplně přesnou geolokaci, ale bude fungovat na všech zařízeních a umožní vám minimálně otestovat poptávku zákazníků na mobilních zařízeních.

Pro tento přístup bylo vytvořeno obrovské množství frameworků, ale všechny dělají v podstatě to samé. Rozdíl mezi nimi je v tom, že Cordova (PhoneGap) nenastavuje omezení a šablony na logiku a uživatelské rozhraní pro váš HTML5 projekt a frameworky fungují s vlastními hotovými prvky uživatelského rozhraní, které napodobují mobilní platformy a jejich vlastní vývojovou logiku. Příkladem tohoto přístupu je: Ionic Framework - wrapper; Framework7, Mobile Angular UI, Sencha Touch, Kendo UI - rozhraní rozhraní.

PWA

Módní technologií od Googlu jsou stejné webové aplikace, ale díky použití určitých technologií (především tzv. Service Worker - skripty běžící na pozadí a Web App Manifest - popis webové aplikace ve formě srozumitelné pro mobily systém ) mohou fungovat jako nativní bez obálky PhoneGap. Lze je nainstalovat na domovskou obrazovku, obejít obchod s aplikacemi, pracovat offline, pracovat s oznámeními push a s nativními funkcemi.

Problém je, že ne všechny platformy ani nyní tyto „určité technologie“ podporují. Týká se to především Applu, kterému se zřejmě moc nelíbí možnost distribuovat aplikace obcházející App Store.

S přihlédnutím ke všem nedostatkům HTML5 řešení mnoho společností vytvořilo nástroje, které umožňují psát kód v jednom, nenativním, jazyce a ten je pak přeložen do nativního. To zabije dvě mouchy jednou ranou: existuje pouze jedna základna kódu a aplikace jsou co nejblíže nativním.


Xamarin

platforma Microsoft. Standardním programovacím jazykem pro podnikový vývoj je C# a vývojovým prostředím pro různé platformy je Visual Studio. Výstupem jsou nativní aplikace pro iOS, Android a Windows. Pravda, rozměrově poměrně velké.

Reagovat Native

Platforma od - aplikace jsou napsány v JavaScriptu a používají styly podobné CSS. Rozhraní se ukazuje jako nativní a kód je interpretován na platformě, což mu dává potřebnou flexibilitu.

Jako relativně mladá platforma React Native stále zjevně (i když ne katastrofálně) trpí nedostatkem vývojových nástrojů a dokumentace.

Třepetání

Takový gigant jako Google přirozeně nemohl ignorovat téma crossplatformního vývoje aplikací pro Android a iOS. Flutter, i když je zatím pouze v beta verzi, zaujímá odlišný přístup než React Native a Xamarin. Neproměňuje zdrojový kód v nativní kód, který je spuštěn platformou, ale ve skutečnosti vykresluje okno na obrazovku smartphonu a sám vykresluje všechny prvky. Použitým jazykem je „proprietární“ Dart, který Google vytvořil jako vylepšenou verzi JavaScriptu.

To má jak výhody (například externě identická rozhraní), tak nevýhody (například překreslení rozhraní vyžaduje určité množství paměti a času CPU).

Platforma se rychle vyvíjí a Google do ní investuje hodně úsilí a peněz. Ale ve srovnání s Flutter se i React Native zdá jako velmi zavedený a působivý ekosystém.

Co si vybrat

Už se vám asi motá hlava, ale stále netušíte, co si vybrat. Uveďme jednoduchý seznam otázek, které vám pomohou:

  • Mělo by to nějak fungovat na jakémkoli zařízení? Vybrat HTML jako základ;
  • Máte dostatek finančních prostředků, nespěcháte a chcete tu nejkvalitnější aplikaci? Máte přímou cestu nativní vývoj;
  • Máte „vestavěného“ webového vývojáře nebo si jen chcete rychle a jednoduše vyzkoušet mobilní aplikaci v akci? Zde můžeme doporučit Cordova/HTML nebo PWA;
  • Máte svůj vlastní CRM systém a C# vývojáře, který jej podporuje? Vzít to Xamarin;
  • „chcete to zkusit“, ale potřebujete udělat všechno krásné a módní? Nedívej se Reagovat Native nebo Flutter.

Můžete jít i z druhé strany. Podívejte se na funkce, které budete ve své aplikaci potřebovat, a pokračujte odtud:

  • jednoduchá aplikace pro vizitky? Vzít React Native nebo HTML5 a získáte dvě platformy za minimální cenu;
  • Máte web s velkou návštěvností a potřebujete otestovat svou přítomnost v mobilním prostoru? HTML5;
  • komplexní aplikace s přístupem k požadovaným funkcím zařízení? Nativní vývoj, Xamarin, React Native.

Vývoj napříč platformami není všelék

Při výběru je potřeba vycházet z přidělených úkolů a existujících zdrojů. Cross-platformní vývoj je dobrý a srozumitelný směr, ale má své výhody a nevýhody, které je třeba mít na paměti před spuštěním projektu. Dokončená multiplatformní aplikace je samozřejmě lepší než nevytvořená nativní. Můžete ji rychle a levně vyvinout, nahrát do obchodu a jednoduše zkontrolovat poptávku ze strany uživatelů – zda ​​vaši aplikaci někdo shání, zda ji instaluje, jaké funkce používá. Na základě výsledků takového experimentu bude možné rozhodnout o osudu mobilního směru ve vaší společnosti a investicích do ní.

Máte stále pochybnosti a otázky ohledně multiplatformních aplikací? Přečtěte si, jak jsme vytvořili aplikaci pro rychlé získání předplatného jedné z městských sportovních institucí a vyzkoušejte aplikaci pro placení za všechny druhy služeb – od bydlení a komunálních služeb až po objednávky v internetových obchodech. Ještě lépe, přihlaste se na bezplatnou konzultaci s uvedením přibližného rozpočtu a stručného popisu nápadu nebo kontaktujte naši manažerku Katyu telefonicky

Smartphony si stále více a více získávají prostor na slunci nejen jako nástroj pro konzumaci fotografií koček a XXX videí, ale také jako pracovní nástroj. Poptávka po mobilním vývoji proto roste. Obecně se uznává, že práce a cool jsou Objective-C/Swift pro iOS a Java/Kotlin pro Android. Není pochyb o tom, že je to tvrdá práce a cool, ale existuje velké množství skutečných scénářů, ve kterých je použití multiplatformních rámců výhodnější než nativní nástroje.

Někteří vývojáři očekávají, že multiplatformní frameworky vyřeší všechny jejich životní problémy, jiní jsou k nim nepřátelští. Oba „válčící tábory“ mají své vlastní mylné představy způsobené nedostatkem pochopení toho, jak a co funguje. To přilévá olej do ohně, protože místo technických argumentů se používají emoce.

Také mezi vývojáři, zejména začátečníky, existuje mnoho mýtů o multiplatformních mobilních frameworkech. V našem článku budeme analyzovat nejoblíbenější z nich. Nejprve se však podívejme na mobilní vývoj očima firmy, která poskytuje peníze na celý IT blackjack.

Proč potřebujeme multiplatformní nástroje?

Historicky na trhu počítačů vždy existovala konkurence a každý výrobce poskytoval optimální sadu tzv. nativních nástrojů pro vývoj aplikací pro své operační systémy a zařízení.

Nativní nástroje = poskytuje vlastník ekosystému.

Všechny ostatní znaky „nativeness“ jsou SEKUNDÁRNÍ – chování a aplikační rozhraní, přístup k možnostem OS, výkon atd.

Téměř vždy se navíc ukázalo, že nativní nástroje jsou mezi sebou nekompatibilní nejen na úrovni vývojových jazyků, přijatých konvencí a architektur, ale také na úrovni mechanismů pro práci s operačním systémem a knihovnami. V důsledku toho bylo pro implementaci stejných algoritmů a rozhraní nutné napsat aplikaci pro několik prostředí v různých programovacích jazycích a poté ji podporovat na základě „jeden příkaz na platformu“. Možnosti a vzhled aplikací na různých platformách jsou přitom téměř vždy z 90 % shodné. Jen pro zajímavost porovnejte implementaci vašich oblíbených programů pro iOS a Android.

Druhým důležitým bodem je přítomnost nezbytných znalostí a zkušeností v týmu: pokud tam nejsou, bude to nějakou dobu trvat, než se to naučíte.

Aby byly oba tyto problémy vyřešeny, na trhu se již dávno objevily multiplatformní vývojové nástroje (nejen mobilní), které nabízejí:

  • maximalizovat společnou kódovou základnu v jediném programovacím jazyce, aby se produkt snáze vyvíjel a udržoval;
  • využívat stávající kompetence a specialisty k implementaci aplikací na nových platformách.

Vzhledem k tomu, že nyní existuje mnoho programovacích jazyků (a prostředí) (a specialistů, kteří těmito jazyky mluví), existuje velké množství nástrojů pro vývoj napříč platformami. Jako příklad se zaměříme na ty oblíbené v našem okolí PhoneGap, Xamarin, React Native a Qt.


Nyní můžeme mluvit o mýtech.

Mýtus 1. Magie

Nejčastější mýtus, který pronásleduje mysl začínajících vývojářů, souvisí s vírou v super-algoritmy (a superprogramátory, kteří je vytvořili), které magicky mění multiplatformní aplikace na nativní. Něco ve stylu „převod kódu JavaScript na Swift a následné kompilace aplikace Swift“. Tento mýtus podporují samotní vývojáři multiplatformních nástrojů, kteří jako výsledek slibují vytvoření „nativních aplikací“. A není to tak, že by tu někdo lhal, ale bohatá představivost a nepochopení základních mechanismů někdy vedou vývojáře k úvahám o šamanských technikách.

Hlavním principem řešení napříč platformami je rozdělení kódu na dvě části:

  • multiplatformní, žijící ve virtuálním prostředí a mající omezený přístup ke schopnostem cílové platformy prostřednictvím speciálního mostu;
  • rodák, který poskytuje inicializaci aplikací, správu životního cyklu klíčových objektů a má plný přístup k systémovým API.


Pro propojení „nativního“ světa a „crossplatformního“ světa je nutné použít speciální most, je to on, kdo určuje možnosti a omezení multiplatformních frameworků.

Při použití mostu je výkon vždy snížen v důsledku konverze dat mezi „světy“ a také konverzí volání API a knihoven.

Všechny multiplatformní aplikace tedy musí mít nativní část, jinak je operační systém prostě nebude moci spustit. Pojďme se tedy blíže podívat na to, jaká systémová API a mechanismy poskytují samotné iOS, Android a Windows. Přejděme k dalšímu mýtu.

Mýtus 2. Není domorodec!

Máme tedy multiplatformní část aplikace, která žije ve virtuálním prostředí a interaguje s operačním systémem prostřednictvím rámcové infrastruktury a mostu.

Všechny operační systémy: iOS, Android a Windows UWP poskytují přístup k následujícím subsystémům (sadám systémových API):

  • WebView (webový prohlížeč v aplikaci) se používá v mashupech založených na PhoneGap a v podstatě funguje jako běhové prostředí pro místní web;
  • JavaScriptové enginy se používají v React Native a analogech pro rychlé provádění kódu JS a výměnu dat mezi Native a JS;
  • OpenGL ES (nebo DirectX) se používá v herních enginech a aplikacích založených na Qt/QML nebo analogech pro vykreslování rozhraní;
  • Subsystém uživatelského rozhraní je zodpovědný za nativní uživatelské rozhraní aplikace, které je relevantní pro React Native a Xamarin.


Multiplatformní aplikace mají nativní část a stejný plný přístup k systémovým API jako nativní aplikace. Rozdíl je v tom, že systémová metoda je volána přes most a rámcovou infrastrukturu:

WebView- aplikace žije ve svém webovém prohlížeči, podobně jako jednostránkový web. Chybí přístup k nativním ovládacím prvkům (tlačítka, seznamy atd.), vše je založeno na HTML/CSS/JavaScriptu. Na druhou stranu se webový vývojář bude cítit jako ryba na suchu.

JavaScriptové motory se stal populární relativně nedávno, protože podobný mechanismus byl přidán do iOS až ve verzi 7.0. Jednou z funkcí, která stojí za zvážení, je potřeba serializovat složité datové struktury přenášené mezi prostředím JavaScript a nativním prostředím v JSON. Abychom stručně popsali tuto třídu řešení, kód JS, který řídí nativní aplikaci, se spouští v prostředí JavaScriptu.

OpenGL ES a DirectX jsou nízkoúrovňové subsystémy a používají se k vykreslování uživatelského rozhraní ve hrách a například Qt/QML. To znamená, že při použití OpenGL/DirectX vývojáři sami kreslí ovládací prvky a animace, které mohou být pouze podobné nativním. Na druhou stranu jde o nízkoúrovňový subsystém s velmi vysokým výkonem, proto se používá i v multiplatformních herních enginech.

Všechny multiplatformní aplikace mají nativní část, a tedy potenciálně stejný plný přístup k systémovým API jako nativní. Také multiplatformní aplikace jsou sestaveny a zabaleny s nativními nástroji do nativních instalačních balíčků. Klíčovou otázkou je, jak je organizována interakce mezi multiplatformní částí a nativní částí. Například uvnitř WebView nebo pomocí Open GL ES / DirectX neexistuje způsob, jak vytvořit uživatelské rozhraní se zcela nativním look'n'feel, ale zároveň je zde plný přístup k GPS, Push Notifications a dalším funkcím. A kód v JavaScriptu nebo C# může zcela volně ovládat nativní aplikaci a její chování, což poskytuje zcela nativní vzhled.

Abych to shrnul, ano, je to „nenativní“ z pohledu použitých vývojových nástrojů (ne od Applu, Google). Aplikace však může být zcela nativní, pokud jde o přístup k systémovým rozhraním API a poskytovat zcela nativní vzhled a dojem. A přecházíme k dalšímu mýtu.

Mýtus 3. Berla o berli

Zde stojí za to pochopit, že nativní API nejsou standardně považovány za berličky (i když zde existují různé názory), takže veškeré rozhořčení směřuje k multiplatformní části. Je zřejmé, že prováděcí prostředí (například WebView, JavaScript engine nebo Mono) je také těžké nazvat berličkou – zralá vyspělá řešení s dlouhou historií.

Zdá se, že berličkou je, jak se multiplatformní část integruje s tou nativní. Abychom lépe porozuměli tomu, jak fungují různé rámce, na příkladu PhoneGap, Xamarin, Qt a React Native se podíváme na ty mechanismy operačního systému, které se používají k propojení meziplatformních a „nativních“ částí.

Začneme PhoneGapem. Níže je uvedena architektura nejvyšší úrovně aplikace založené na tomto frameworku.



Aplikace na PhoneGap je ve skutečnosti nativní aplikace, která zobrazuje WebView jako jediný ovládací prvek uživatelského rozhraní. Právě přes něj dochází k interakci s nativní částí. Všechny standardní WebViews v iOS, Android a Windows UWP podporují možnost přidat vlastní nativní obslužné nástroje pro vlastnosti a metody JS. JS kód přitom žije ve svém vlastním izolovaném prostředí a o nativní části nic neví – jednoduše si vytáhne potřebné JS metody nebo změní potřebné JS vlastnosti. Vše je uvnitř standardního webového DOMu, do kterého se jednoduše přidávají nové prvky spojené s nativní implementací.



Při vytváření aplikací v React Native bude vývojář téměř vždy potřebovat implementovat nativní část v Objective-C, Javě nebo C# a samotná správa nativní aplikace bude pocházet z JavaScriptu. Ve skutečnosti je JavaScript engine prvkem WebView, který je k dispozici samostatně. K interakci dochází přes stejný JS most jako v případě PhoneGap. V React Native však kód JS neřídí strom DOM webu, ale nativní aplikaci.

Vezměte prosím na vědomí, že kvůli omezením systému iOS (neexistuje způsob implementace JIT) je kód JavaScript interpretován za běhu, nikoli kompilován. Obecně to nemá zásadní vliv na výkon v reálných aplikacích, ale stojí za to to mít na paměti.

Nyní se podíváme na klasické Xamarin.iOS a Xamarin.Android, protože Xamarin.Forms (který podporuje Windows UWP) je nadmnožinou nad nimi.



Xamarin používá k interakci s cílovým operačním systémem knihovnu Mono, která umožňuje volat nativní kód pomocí mechanismu P/Invoke. Používá se také ke komunikaci s nativními API v iOS/Android. To znamená, že pro všechny veřejné nativní metody API jsou obaly vytvořeny v C#, které zase volají systémová API. Tímto způsobem můžete přistupovat ke všem systémovým rozhraním API z vaší aplikace Xamarin.

A nakonec se podíváme na Qt, protože o něm je spousta dotazů od zkušených vývojářů.



Qt je „věc sama o sobě“, má své výhody i omezení. Knihovny Qt se jednoduše připojují k rozhraním API systému C++, která se nacházejí na všech operačních systémech. K vykreslení uživatelského rozhraní se používají nízkoúrovňové mechanismy, ale vlastní grafický engine podporuje nativní styling. V tomto případě na Androidu musíte přistupovat k Java API přes speciální most (JNI bridge) a pro Windows UWP použijte převodník volání Open GL ES na DirectX, protože Open GL není pro UWP k dispozici.

Abychom to shrnuli: všechny multiplatformní frameworky využívají standardní nativní schopnosti operačních systémů, jsou vyspělé a jsou vytvářeny zkušenými týmy a open source komunitou s podporou gigantů IT průmyslu. A konečně je čas na „nejsilnější“ argument.

Mýtus 4. Pomalu

Důležitým trumfem, který lidé rádi využívají ve sporech o crossplatformní frameworky, je nízký výkon. Opět záleží na tom, s čím porovnávat a jaké papoušky počítat.

Připomeňme, že zvláštností multiplatformních aplikací je paralelní existence dvou světů spojených mostem:

  • PhoneGap: HTML/JS a nativní Java / Objective-C / C#;
  • React Native: JS a Native Java / Objective-C / C#;
  • Xamarin: Mono a nativní Java/Objective-C;
  • Qt: C++ a nativní Java / Objective-C.

Při porovnávání výkonu je tedy třeba vzít v úvahu rychlost provozu:

  • multiplatformní část;
  • nativní část;
  • most.

Pokud zadáte do vyhledávače, například reakce nativní versus rychlý výkon, můžete se podívat na mnoho různých testů a mnoho z nich si všimne, že výkon prudce klesá s aktivním používáním mostu, včetně aktivní manipulace s UI z cross- kód platformy. U Xamarinu vypadá situace stejně – crossplatformní část je velmi rychlá a ve zpracování dat srovnatelná s tou nativní, ale při použití bridge může klesat výkon. Qt obecně funguje na úrovni C++, což je samo o sobě rychlé. Pokud vezmeme v úvahu řešení založená na PhoneGap, pak bude výkon do značné míry záviset na WebView, ale přesto byste neměli aktivně měnit uživatelské rozhraní v kódu JavaScript nebo provádět vědecké výpočty.

Pomalu? Ano, poklesy výkonu jsou možné kvůli nešikovné interakci s operačním systémem prostřednictvím mostu. Samotné multiplatformní světy jsou však stejně rychlé jako ty nativní.

Kde začínáte ráno? Dříve lidé u snídaně rádi četli nejnovější noviny, ze kterých se dozvěděli o nejnovějších zprávách, událostech ve světě, nacházeli reklamy a četli vtipy. Světlá sci-fi budoucnost však již přišla a noviny vystřídaly chytré telefony a tablety a ze sekce vtipů se vyvinula celá aplikace. Z aplikací zjišťujeme počasí, směnné kurzy, zprávy, vidíme, kde jsou dopravní zácpy, sledujeme aktivity našich oblíbených umělců, listujeme plakáty a tak dále. Pevně ​​vstoupily do života moderního člověka. A moderní člověk se často zavazuje je rozvíjet. A často se stává, že netuší, že existují nativní aplikace a existují hybridní a webové aplikace, neví, jak je rozlišit a který typ se lépe hodí do konceptu jeho projektu.

Dnes si povíme o nativních a hybridních aplikacích s Denisem Altukhovem, vývojářem pro Android ze společnosti Anadea.

Ahoj Denisi!
Ahoj!

Řekněte mi jako profesionál: jaký je rozdíl mezi nativními aplikacemi a hybridními?
Podívejte se: nativní jsou vytvořeny pro konkrétní platformu, ať už je to Android, iOS nebo Windows. Jsou napsány v rodných jazycích - Java v případě Androidu a Objective C v případě iOS. Staženo výhradně z oficiálních obchodů.

Líbí se vám PlayMarket?
Ano, pro nás je to PlayMarket a AppStore pro Apple. Instalace a distribuce se provádí prostřednictvím těchto prodejen. Otevírá se jako samostatná aplikace a má vlastní okna. Nenativní, napsaná v JavaScriptu, je v podstatě aplikace, která se otevírá v prohlížeči a má nějaké mobilní rozložení.

Je to v podstatě webová aplikace?
Ano. A jeho výhodou je, že je multiplatformní – píšete pro všechny platformy najednou, otevře je Windows, Android i iPhone nebo cokoli jiného. Zde je však stanoveno takové omezení, že nebudete mít přístup k mnoha technickým funkcím, které zákazník požaduje. Například chce aktivní práci s kamerou - to nemůžete udělat v non-nativní. Pomocí příruček, které jsou k dispozici pro iOS a Android, nemůžete vytvořit návrh.

Může se hybridní aplikace v různých prohlížečích zobrazovat jinak?
Může „plavat“, ale globálně bude vše vypadat stejně. Ale například, pokud je člověk zvyklý používat Android, bude očekávat, že uvidí některé standardní „Android“ věci. A když aplikace prohlížeče není uspořádána tak, jak očekáváte, je to, upřímně řečeno, otravné.

Všechny velké aplikace jsou většinou nativní. Proč?
Hlavním důvodem je absence jakýchkoli omezení. Máte přístup ke všem funkcím, které vám operační systém poskytuje. Taková aplikace je flexibilnější a má mnohem lepší výdrž baterie díky správné architektuře rodného jazyka. Operační systém se sám podívá na vaši aplikaci a zařídí správnou práci s baterií, obrazovkou a podobně. Implementovat stejnou práci s mapami v hybridní aplikaci bez použití nativních nástrojů od Googlu a Applu bude mnohem obtížnější.

Setkali jste se ve své praxi s hybridními aplikacemi?
Ano. Například před rokem přišel projekt, který pracoval s mapami – byl napsaný v JavaScriptu, bylo těžké ho spustit ve speciálním studiu, projekt samotný byl rozbitý. Nějak se mi to podařilo spustit jen na emulátoru iPhone!

Ó můj bože!
A to proto, aby bylo alespoň něco vidět! A bylo docela těžké pochopit, co se tam děje. Nakonec zákazník došel k tomu, že místo jedné hybridní si objednal dvě nativní aplikace – pro iOS a pro Android.

Takže jen ztrácel čas?
Ano. Ale nemůžete ho za to vinit - hybridní aplikace jsou levnější a rychlejší na vývoj. Inu, výběr vývojářů je mnohem širší – specialista na mobilní platformy už není nutný, stačí se obrátit na front-end vývojáře, který dostatečně ovládá JavaScript. Se znalostí syntaxe jazyka bude schopen dokončit objednávku, ale bez hluboké znalosti platformy mu může hodně uniknout a úroveň aplikace bude nízká.

Je to důvod, proč jsou nenativní aplikace často nekvalitní?
Ano – „havarují“ nebo nefungují správně, protože někdo přišel zvenčí. Dalším problematickým aspektem „hybridů“ je organizace oznámení. Možná tam ty služby nějak fungují, ale třeba teď pracujeme na sociální aplikaci pro sdílení fotek a tam jsou notifikace v iOS a Androidu postavené úplně jinak. Zde je pro vás podstatný rozdíl. Jak budou vypadat notifikace ve webové aplikaci na avizovaných třech platformách (iOS, Android, Windows), kde každá má své individuální vlastnosti... ale kdo ví?

A co bezpečnost?
Zde prohrávají i hybridi. Apk soubor si můžete stáhnout pouze z jednoho místa – z obchodu. Navíc, než aplikaci publikujete pomocí standardních nástrojů, máte možnost vše zašifrovat, skrýt implementaci a tak dále. Kromě šifrování se používá další věc zvaná proguard – ruší odkazy a maže jména. Nepůvodní nic z toho nemá, což znamená, že jej kdokoli může rozebrat, ukrást váš kód, stáhnout si ho z jiného místa.

To znamená, že nyní jsou hybridní aplikace stále velmi, velmi daleko od nativních?
Samozřejmě. Mají smysl, pokud vyvíjíte něco velmi jednoduchého, zobecněného, ​​pokud je rozpočet nízký a termíny jsou napjaté. Něco, co nevyžaduje veškerý výkon zařízení a není vázáno na hardware. Pokud je vyžadována veškerá funkcionalita, tak nativní operační systémy Google a Apple už mají v sobě zabudovanou celou horu metod a způsobů práce s fotoaparátem, mapami, bluetooth a dalšími věcmi. A samozřejmě to bude lepší a kvalitnější než znovuobjevené kolo od některých vývojářů třetích stran.

naprosto s tebou souhlasím. Děkujeme, že jste si našli čas na chatování!
Nemáš zač.

Shrňme náš rozhovor s Denisem:

  • pokud požadujete vysokou rychlost a vaše aplikace bude přímo využívat hardware (kamera, RAM, video čip, bluetooth, wi-fi, obrazovka atd.) zařízení – vyviňte nativní aplikaci;
  • pokud máte zájem o vysokou úroveň zabezpečení, vyviňte nativní aplikaci;
  • pokud pracujete na opravdu velkém projektu, vyviňte nativní aplikaci;
  • pokud potřebujete něco velmi jednoduchého a váš projekt výše uvedené body nepotřebuje, pak si vystačíte s hybridní aplikací.

Hybridní a nativní vývoj: srovnatelný?


Hybridní aplikace nebo nativní (z anglického native - native)? Toto je jedna z nejdůležitějších otázek, kterou má zákazník softwaru, když potřebuje vydat novou aplikaci pro spotřebitelské použití.

Začněme definováním každého z nich. Hybridní aplikace, jak to zní, kombinuje prvky nativní (aplikace běží bez jakékoli externí podpory) a webové (aplikace běží pomocí prohlížeče a je obvykle napsána v HTML5) aplikací. Aplikace si vypůjčuje křížově kompatibilní webové technologie, jako je HTML5, CSS a Javascript, a využívá část vlastního kódu, aby lépe reagovala na zařízení uživatele. Hybridní aplikace jsou umístěny ve vlastní aplikaci, kde se nachází WebView mobilní platformy (prohlížeč obsažený takříkajíc uvnitř mobilní aplikace). Jednoduše řečeno, hybridní aplikace je webová stránka, která je zabalena v originálním obalu. Příklady značek používajících mashups zahrnují Amazon App Store, Gmail a Yelp.

Nativní aplikace je vyvinuta pro konkrétní mobilní operační systém (Objective-C /Swift pro iOS nebo Java pro Android) a je optimalizována tak, aby plně využívala všechny možnosti platformy (fotoaparát, seznam kontaktů, GPS atd.). Nativní aplikace je v podstatě implementována pomocí vlastních nástrojů platformy. Příklady takových aplikací zahrnují Starbuck, Home Depot, Facebook (ačkoli někteří s tím druhým nesouhlasí).

Pojďme se podívat na několik důležitých úvah, které vám pomohou vybrat si mezi nativní nebo hybridní aplikací.

Náklady na vývoj

Hybridní aplikace jsou vyvíjeny pro mnoho platforem. Identický kód HTML lze použít a znovu použít na více než jednom mobilním operačním systému. Jednoduše řečeno, když si objednáte vývoj hybridní aplikace, váš finální produkt bude okamžitě fungovat na většině moderních smartphonů a tabletů. Tímto způsobem se výrazně sníží vaše náklady na vývoj.

Na druhou stranu vývoj nativních aplikací vyžaduje psaní zcela jiných programů pro každé jedinečné zařízení. Na rozdíl od hybridního programování, které si půjčuje z předchozích zkušeností s HTML5 na webu, je nativní programování často považováno za specializovanější. Zvyšují se tak náklady, což je pro malé firmy a jednotlivce nepraktické.

Čas

Hybridní aplikace jsou často oblíbené u společností, které chtějí co nejrychleji dostat něco na masový trh. Opět platí, že vzhledem k tomu, že stejný HTML kód je znovu použit v různých operačních systémech a pouze část složitého strojového kódu je třeba přepsat, bude aplikace připravena ke spuštění na více zařízeních co nejrychleji.

Pokud čas není prioritou, pak pro vás může být nativní vývoj to pravé. Jinak by byl vhodnější hybrid.

Aktualizace

Hybridní vývoj umožňuje aktualizovat obsah přímo z internetu. Pokud nedojde k náhlé změně funkčnosti, pak jsou aktualizace téměř nepostřehnutelné. Mnoho z těchto aktualizací nemusí být nainstalováno prostřednictvím App Store. Díky tomu je oprava chyb a přidávání aktualizací efektivnější a pro uživatele méně frustrující. S aktualizacemi webu je však spojeno jedno upozornění.

Může nastat situace, kdy aplikace cílí na funkce mobilní platformy, která již nefunguje, protože plugin je zastaralý. Když se to stane, stojíte před dilematem – musíte buď odstranit funkci aplikace, nebo najmout programátora, aby napsal plugin. Stejný scénář platí při vydání nových verzí mobilní platformy. Pokud chcete, aby vaše aplikace mohla využívat nové funkce, znovu zadáte úkol vývojáři, aby vytvořil plugin pro hostování aktualizace, nebo můžete počkat, až jej vytvoří komunita.

Díky nativnímu vývoji můžete svou aplikaci aktualizovat, aby zvládla změny platformy a využívat nové funkce, aniž byste se spoléhali na trvalou komunitní podporu pro vaše pluginy nebo byli závislí na cyklech vydávání komunity. Pro hybridní vývoj je nutné provést komplexní zvážení spolehlivosti pluginů, aby se předešlo nepříjemným překvapením v blízké budoucnosti.

Uživatelé

Z nativní aplikace můžete snadno využívat širokou funkcionalitu svého mobilního zařízení: fotoaparát, mikrofon, GPS a mnoho dalšího. Křivka učení uživatele je však malá.

Nativní aplikace jsou také obvykle vyvíjeny pro použití, když není k dispozici Wi-Fi nebo možnost přijímat data zvenčí. Hybrid může fungovat i v autonomním režimu, jen budete mít o něco méně možností.

Stojí za zmínku, že rychlost odezvy, ostatní věci jsou stejné, je obvykle vyšší pro nativní aplikace. To často pociťuje uživatel v herním prostředí, které je závislé na grafickém výkonu. To platí i v případě, že hybridní aplikace používá HTML5 Canvas a WebGL. Rozdíl v rychlosti je zlomek sekundy – je na vás, abyste se rozhodli, zda je to kritické nebo ne.

Bezpečnost

Hybridní kritici mohou citovat injekce JavaScriptu nebo zranitelnosti protokolu SSL, ale pokud jste svůj web zabezpečili, není to vaše starost. Hybridní aplikace však mají více veřejně dostupných znalostních informací, díky čemuž je proces reverzního inženýrství pravděpodobnější. Závisí také na zásuvných modulech, které tvoří další vrstvu kódu, kde lze potenciálně nalézt bezpečnostní chybu.

Nativní aplikace používají své vlastní bezpečnostní funkce bez pluginů. Pro aplikace, které vyžadují vysokou úroveň zabezpečení, může být tedy výhodnější nativní vývoj. Pro všechny ostatní potřeby podnikových aplikací nabízí hybridní vývoj zcela uspokojivou úroveň zabezpečení.

Kompatibilita napříč platformami

Zde je to jednoduché – zde vítězí hybridní aplikace: nativní aplikace vyvinutá pro iPhone nebude fungovat na Androidu a naopak.

Závěr

Hledáte definitivní odpověď? Jediné, co vám mohu říci, je, že nejlepší forma vývoje aplikací je ta, která vyhovuje vašim jedinečným potřebám. To bude záviset na vašich zdrojích a potřebách vašeho koncového uživatele. Dovolte mi připomenout, že mě můžete kdykoli kontaktovat ohledně vývoje programu; Umím vytvořit aplikaci v Javě nebo C#. Mám také zkušenosti s vývojem pro J2ME a Android.

V tomto článku porovnáme 6 crossplatformních vývojových řešení, která byla populární v roce 2016, a pokusíme se najít to nejlepší řešení.

Meziplatformní frameworky PhoneGap, Xamarin, Unity, Qt a Appcelerator Titanium, Telerik Platform v současné době zabírají 80 % trhu pro vývoj mobilních zařízení napříč platformami.



Níže uvedená tabulka ukazuje hlavní charakteristiky každého rámce:

PhoneGap Xamarin Jednota Qt Appcelerator Titanium Telerik AppBuilder
Jazyky JavaScript, HTML5, CSS3 a nativní jazyky (Java, Objective-C, C#) C#, Xaml C#, UnityScript, Boo C++ QML JavaScript, Python, Ruby, PHP .Net, JavaScript, HTML5, Java, PHP
Podporované platformy Android, iOS, Windows Phone, Blackberry, WebOS, Symbian, Bada, Ubuntu, Firefox OS. iOS, Android, Windows Phone a Windows 8/RT, Tizen Android, iOS, Windows Phone, Tizen, PS 4, Xbox One Android, iOS, WinRT, Windows, Symbian, Linux, QNX iOS, Android, BlackBerry, Windows, Tizen, Denso iOS, Android, BlackBerry, Windows, Windows Phone
Ceny Ceny PhoneGap

Placená verze: od 9,99 $

Bezplatná verze: k dispozici

Členství Adobe Creative Cloud: K dispozici

Ceny
Xamarin

Komunita Xamarin Studio: Zdarma

Komunita Visual Studio: Zdarma

Visual Studio Professional: K dispozici

Visual Studio Enterprise: K dispozici

Ceny
Jednota

Personal Edition: zdarma

Professional Edition: od 75 $ měsíčně

Ceny
Qt

Existuje bezplatná verze. Placené verze začínají na 79 dolarech.

Ceny
Appcelerator

Indie: 39 $ měsíčně

K dispozici je bezplatné zkušební období

Cena od 39 $ měsíčně

Open source + - - + + -
UI Web Rodák UI Canvas Rodák Rodák Web

PhoneGap

PhoneGap umožňuje vytvářet mobilní aplikace pomocí standardních webových technologií (HTML5, JavaScript a CSS3). Ve výsledku to vedlo k rychlému nárůstu popularity frameworku, s jeho pomocí se obejdete bez vývoje v programovacích jazycích, jako je Java pro Android, Objective-C pro iOS a C#.

PhoneGap Build umožňuje vytvářet sestavení pro iOS, Android a Windows Phone současně, bez nutnosti instalace jakýchkoli SDK nástrojů (samozřejmě je v tom určitá záludnost – při vývoji je stále lepší stavět lokálně, alespoň na Androidu , před odesláním k testování). Ale co je důležitější, tato služba vám umožňuje budovat iOS v cloudu, aniž byste museli vlastnit Mac.

Instalace PhoneGap vyžaduje neuvěřitelné úsilí, takže vám radím uvolnit půl dne... Dělám si srandu. Instalace pro XCode trvala asi 3 minuty - spočívala ve stažení archivu, rozbalení a instalaci. To je vše.

PhoneGap poskytuje možnost využívat nativní funkce mobilního zařízení pro práci s:

  • akcelerometr,
  • Fotoaparát,
  • kompas,
  • kontakty,
  • úložiště souborů,
  • geolokace,
  • databáze
  • události, upozornění,
  • média atd.
Pokud aplikace nepřekročí tyto body, pak bude rychlost vývoje pomocí frameworku PhoneGap řádově vyšší než vývoj nativní aplikace pro každou platformu. Video s vývojem aplikace a popisem PhoneGap.

výhody:

  • PhoneGap má jednoduché API, které usnadňuje zahájení vývoje pro ty, kteří se setkali s HTML, CSS a JavaScript.
  • Schopnost používat jakékoli existující JavaScriptové knihovny (JQuery, Prototype, Sencha Touch)
  • Podporuje všechny mobilní platformy
nedostatky:
  • Uživatelské rozhraní je vykreslováno pomocí vestavěného prohlížeče. Díky tomu je ve srovnání s nativní aplikací obtížnější získat zpětnou vazbu.
  • Stávající pluginy se často ukáží jako zastaralé, takže někdy musíte napsat vlastní.

Xamarin

Xamarin je druhý multiplatformní framework na našem seznamu. Xamarin vám umožňuje vytvořit jedinou aplikační logiku pomocí C# a .NET.

Funkčně platforma Xamarin představuje řadu dílčích platforem. Tyto subplatformy hrají velkou roli – jejich prostřednictvím mohou aplikace směrovat požadavky na aplikační rozhraní na zařízeních. Vizuální rozhraní je definováno, logika je svázána v C# a to vše bude fungovat na Androidu, iOS a Windows Phone. Video o vývoji aplikace na Xamarin.

výhody:

  • Velká a rostoucí komunita.
  • Vývojáři mohou používat TestCloud k automatickému testování aplikací.
  • Pokud již znáte C# a .NET, nebudete muset trávit mnoho času učením se několika nových frameworků.
  • Již napsaný kód můžete znovu použít.
  • Aplikace v různých systémech budou vypadat velmi podobně.
  • Dynamické rozvržení pro iOS je nekonečně jednodušší než ruční použití omezení.
  • Díky CustomRenderers jsou standardní ovládací prvky snadno doplněny o libovolné vlastnosti (například vytvoření přechodové výplně pro tlačítka trvá několik minut, i když to nefunguje hned po vybalení).

nedostatky:

  • Některé vzory rozhraní je obtížné implementovat na monodroidu a velmi obtížné na monotouch, protože výchozí řešení pro tu či onu funkci spoléhají na berličky platformy, které v Xamarin prostě nemusí fungovat.
  • Existují problémy s platformami mono, monotouch a monodroid. Vaše aplikace musí splňovat specifické požadavky na stabilitu.
  • Stránky Android nelze umístit jako součást existující aktivity/fragmentu.
  • Ne všechny ovládací prvky jsou implementovány.

Telerik AppBuilder

Jedním z hlavních důvodů, proč používat AppBuilder, je plnohodnotné online IDE. Umožňuje vytvářet, testovat a dokonce publikovat hybridní aplikace z jakéhokoli počítače nebo mobilního zařízení, aniž byste je museli stahovat.

Další výhodou je možnost vytvářet iOS aplikace běžící na Windows nebo Linuxu.

výhody:

  • Telerik poskytuje pluginy Visual Studio a Sublime Text pro AppBuilder.
  • AppBuilder nabízí rychlý způsob importu zásuvných modulů Cordova.
  • Plnohodnotné online IDE.
  • Snadné použití a učení

nedostatky:

  • Malá komunita

Jednota

Unity, multiplatformní nástroj pro vývoj 2D a 3D aplikací a her, je také jedním z nejlepších nástrojů pro demonstraci 3D obsahu. Aplikace vytvořené pomocí Unity fungují pod operačními systémy Windows, OS X, Linux, Android, Apple iOS, Windows Phone, BlackBerry a také na herních konzolích Wii, PlayStation 3 a Xbox 360. Video s vývojem mobilní hry na Unity .

výhody:

  • Skvělá volba pro vytváření mobilních her pro řadu zařízení
  • 3D engine poskytuje vysoce kvalitní výsledky bez jakýchkoli složitých konfigurací
  • Existuje mnoho dobrých bezplatných pluginů
  • Unity umožňuje vývojářům vytvářet vlastní shadery a měnit způsob, jakým Unity vykresluje hru.

nedostatky:

  • Uživatelské rozhraní a obtížnost použití pro začátečníky
  • Zdrojový kód není k dispozici
  • Kompilátory Unity nejsou na některých mobilních zařízeních optimalizovány pro procesory ARM.


Knihovna Qt pro vytváření aplikací s oknem pro více platforem v C++. Qt by se nemělo považovat ani tak za sadu tříd pro vytváření GUI, ale spíše za plnohodnotnou sadu nástrojů pro všechny příležitosti. Programy je možné vyvíjet nejen v C++, ale také v jazyce QML, který je velmi podobný JavaScriptu. Jedná se o speciální odvětví vývoje Qt zaměřené na rychlé prototypování a vývoj mobilních aplikací. Video s vývojem Tiled Map Editor na Qt.


výhody:
  • Qt má mnoho dobrých nástrojů, které pomáhají s vývojem, například: IDE QT Creator, Qt Designer a profilování kódu.
  • Má knihovny obsahující intuitivní rozhraní API pro prvky, jako jsou sítě, animace a další.

nedostatky:

  • Qt je pro začátečníky obtížné

Appcelerator Titanium

Titanium je zcela otevřená platforma pro vývoj, nasazení, distribuci a nakonec provoz webových aplikací. Appcelerator Titanium umožňuje vytvářet mobilní aplikace v JavaScriptu, HTML a CSS.

Moderní a hlavně nativní aplikace můžete vytvářet pomocí jakéhokoli aktuálně oblíbeného operačního systému: Windows, GNU/Linux nebo MacOS X.

Aplikace vytvořené pomocí této sady SDK budou skutečně nativní. Navigační ovladač na Androidu bude vypadat povědomě a bude se lišit od toho na iOS. Nativní navíc bude nejen vzhled, ale i samotný kód aplikace. To vám mimochodem nebrání vytvořit klasický WebView a naplnit jej požadovaným webovým obsahem.

výhody:

  • JavaScript usnadňuje vývoj aplikací bez použití jazyků platformy.
  • Appcelerator vám umožňuje provádět analýzy v reálném čase
  • Použití nativního API poskytne lepší výkon pro aplikace, které nejsou příliš velké.

nedostatky:

  • Při spouštění aplikace dochází ke zpoždění kvůli načítání knihovny
  • Je obtížné vytvářet složité aplikace, protože používání JavaScriptu má negativní dopad na výkon aplikací.

Reagovat Native

Co je React Native? Jedná se o JS framework založený na JS a React - JS knihovně pro tvorbu UI (View level).

Technologie je to velmi slibná, ale mladá, takže platforma je na některých místech ještě syrová. Verze pro Android se objevila později, takže komponent pro iOS aplikace je prozatím více. Také stojí za zvážení, že když je aplikace nasazena, všechny JS skončí na zařízení uživatele, takže byste neměli držet v tajnosti obchodní logiku na úrovni prezentace. Můžeme říci, že nyní lze React Native použít k rychlému prototypování mobilních verzí vašich webových aplikací. Navíc pokud je webová aplikace již napsána v ReactJS, pak se přenosová rychlost výrazně zvyšuje. Příklad vývoje pomocí React Native.

výhody:

  • Jednotný pracovní postup a nástroje: nezáleží na tom, zda pracujete na verzi pro Android nebo iOS, stále používáte stejné nástroje.
  • Z tohoto důvodu - rychlost a snadnost vývoje.
  • Propojení starší aplikace s JS API a hybridními aplikacemi: Řekněme, že již máte hotovou aplikaci pro iOS a chcete přejít na React Native. Poté můžete zabalit nativní komponenty tak, aby byly dostupné v React Native. Postupně tedy můžete přejít na React a výsledkem je hybridní aplikace – z poloviny nativní a z poloviny v Reactu a pár starších komponent v JS API.
Dokonalé řešení neexistuje, každý framework má své pro a proti. Pro velmi jednoduché aplikace bych doporučil používat PhoneGap, dokud se odezva nestane klíčovým kritériem. Pro serióznější vývoj je lepší použít Xamarin, ale i s Xamarinem je lepší kombinovat nativní vývoj pro většinu prvků uživatelského rozhraní.
říct přátelům