utvikling

Skal gjøre det enklere å lage mobilapper: Nå kommer Flutter – Googles nye SDK

Fra Kasper Lunds foredrag på Goto-konferansen i København.
Fra Kasper Lunds foredrag på Goto-konferansen i København.

Google er igang med noe nytt til selskapets mobile utviklingsmiljøer. Utover Java og Kotlin skal man nå også kunne skrive apper med språket Dart, som er oppfunnet av danske Lars Bak sammen med amerikanske Gilad Bracha.

Dart er Googles svar på web-språk som kompileres til Javascript, men nå får språket en helt ny og sentral rolle i Googles kommende SDK for mobil-apper, som har fått navnet Flutter.

Her kompileres Dart til «native» ARM-kode, oppå Androids Linux-lag. Utover dette kan Flutter-apper også krysskompileres til iOS ved hjelp av Xcode, Apples utviklingsverktøy. Det skulle redusere utviklingstiden for apper som går etter begge de to store plattformene med kun én kodebase, samtidig som det er snakk om kompilert og ikke fortolket kode.

Det var Kasper Lund fra Google som fortalte dette på Goto-konferansen som nylig gikk av stabelen i Bella Center i København. Han har tidligere vært en del av det teamet som under Lars Baks ledelse skapte Googles Javascript-motor V8, som er kodeknuser i Chrome-nettleseren. Og nå er han med på Flutter-teamet, som geografisk spenner fra Aarhus i Danmark til flere amerikanske delstater.

Det er nok ikke snakk om at Flutter skal overta Android-Java og Kotlins rolle, da Google ofte satser på flere teknologier parallelt, slik vi har sett med Chrome OS og Android. I stedet er det snakk om et nytt tilbud til mobilutviklere fra IT-kjempen.

API-er som er hyggelige å jobbe med

Ut fra den koden som Kasper Lund demonstrerte på Goto-konferansen, ser det enklere ut å ha med å gjøre enn Androids Java- og Kotlin-miljø, synes Version2s utsendte medarbeider.

– Liker du ikke XML-filer? spør Kasper Lund for moro skyld, og fortsetter:

– Vi har forsøkt å lage API-er som føles hyggelige å jobbe med, også når det skaleres opp til skikkelige apper. Det har vært et stort fokusområde under utviklingen av Dart, at det skal være lett å ta i bruk. Hvis vi skal lage noe nytt kan det ikke være vanskelig tilgjengelig.

Kasper Lund forestiller seg også at Flutter i det lange løp kan oppdatere plattformen, litt slik som den utviklingen nettlesere og Javascript har vært igjennom, i motsetning til Android-Java, der i stil med vanlig Java legger stor vekt på bakoverkompatibilitet.

Det betyr også at Flutter kommer med sin egen runtime, som fyller seks megabyte.

– Når appen er sendt ut døren, har du alt med deg. Appen din blir ikke ødelagt av en eller annen operativsystemoppdatering.

Google: Bedre enn andre miljøer til kryssplattformutvikling

Kasper Lund sier gjerne at Flutter er et bedre miljø til utvikling av kryssplattform-apper enn andre systemer.

– Det er veldig forskjellige systemer. Men når man skal lage et «custom UI» kan det være vanskelig på de andre plattformene.

Kasper Lund. Foto: Version2.dk
Kasper Lund.

Et «custom UI» er når apputviklerne lager et brukergrensesnitt som ikke benytter de komponenter og konvensjoner som finnes på native-plattformen, men i stedet skaper en unik brukeropplevelse.

– Der har vi den store fordelen at fordi vi har valgt en helt annen tilnærming, så kan vi tegne det hele. Vi er ikke et lag oppå det eksisterende native laget. Så et custom UI er mye enklere å ha med å gjøre for oss. Jeg vil ikke påstå at Flutter er bedre for alle apper enn for eksempel Xamarin eller Cordova, men det er færre kompromisser ved en Flutter-stack, er Lunds argument – med henvisning til to andre populære miljøer til mobilutvikling på tvers av plattformer.

Hvis det skal være et problem med Flutter, skulle det handle om å integrere med plattformens native komponenter, et klassisk problem for grafiske brukergrensesnittmiljøer som skal avvikles på tvers av plattformer.

Bedre ytelse på gammel maskinvare

Flutter skryter av å kunne levere høytytende animasjoner med de ettertraktede 60 frames per sekund, som får brukergrensesnitt til å virke «friksjonsløse» i brukerens øyne.

– Vi tester på gammel maskinvare, som det er masser av – spesielt på Android-siden. Vi har et rammeverk som tillater oss å kjøre en helt ny kode, og ny brukerflate, på gammel maskinvare.

Det betyr også at Flutter ikke er avhengig av Androids mange API-versjoner.

For en del år siden var det mye snakk om mobile web-apper. Selv om Kasper Lund har sitt utspring i nettleserverdenen, mener han at den mobile weben ikke har kunnet innfri behovene.

– Jeg synes det er fint at vi har en browser som kan en masse, og hvorfor skulle den ikke kunne være en plattform? Det har vært mange utfordringer, fra det ordinære, som å få adgang fra browseren til de underliggende tjenester som plattformen tilbyr.

Det har kommet flere API-er til nettleserne til disse formålene, men det føles alltid som om man ligger et stykke bak.

– Men det virkelige problemet er at browseren kan for mye – den er som en sveitsisk lommekniv som skal kunne alt. Vi har ikke så mange ressurser å ta av på en mobiltelefon, med hensyn til ytelse. Vi har sett at det har vært vanskeligere enn antatt å få web-stacken til å være en god plattform for apper. En browser er et komplekst stykke programvare som skal kunne mange forskjellige ting, og det skal en mobilstack som Flutter ikke.

Flutter har ikke noe med weben å gjøre, selv om en stump kode til tekstlayout er lånt fra Chrome. Men det er altså ikke tale om et såkalt «webview» hvor en webside integreres med en native brukergrensesnitt-komponent, fastslår Kasper Lund.

Les også: Giraffe bringer funksjonell webutvikling til .Net Core (version2.dk)

Flutter er fortsatt i en tidlig alpha-fase, men inntil videre finnes det en plugin til IDE-et Intellij Idea, og denne måneden kommer en utgave av Googles IDE, Android Studio, med støtte for miljøet. Kasper Lunds foredrag på Goto-konferansen kan ses her.

Artikkelen ble først publisert på Version2.dk

Her er et eksempel på Dart til Flutter, tatt fra Flutters hjemmeside:

class MyScaffold extends StatelessWidget { @override Widget build(BuildContext context) { // Material is a conceptual piece of // paper on which the UI appears. return new Material( // Column is a vertical, linear layout. child: new Column( children: [ new MyAppBar( title: new Text( 'Example title', style: Theme.of(context).primaryTextTheme.title, ), ), new Expanded( child: new Center( child: new Text('Hello, world!'), ), ), ], ), ); } } void main() { runApp(new MaterialApp( title: 'My app', // used by the OS task switcher home: new MyScaffold(), )); }

Powered by Labrador CMS