Bleadof’s world of tinkering

September 9, 2010

Ajatuksia mobiilikehityksestä

Filed under: Just something — Bleadof @ 13:09

Koska sanomisiani tullaan julkaisemaan MikroPC-lehdessä, niin päätin julkaista myös kokonaisuudessaan tekstin, josta lainaukset ovat peräisin, mahdollisten väärinymmärsten välttämiseksi.

Päivityksiä!

  1. Tekstissä on vanhaa tietoa, koska Apple tänään 09.09.2010 höllensi aiemmin tänä vuonna tekemiään rajoituksia ja mahdollistaa sovelluksien kehittämisen millä työkalulla tahansa, kunhan lopullinen sovellus ei ajonaikaisesti lataa ajettavaa koodia.
  2. Mobility APIen avulla pystyt kyllä soittamaan jo musaa, mutta ne eivät ole vielä mukana Qtn levityksessä.

Taustaa

Annetaan nyt alustavasti taustaa, että olen tehnyt Nokian alustoille kahdella eri teknologialla, eli Qtlla ja webbikehityksenä. Androidille ja iPhonelle en ole kirjoittanut mitään, kunhan vain lueskellut ja katsellut videoita asiasta kiinnostuneena.

Kehitysteknologiat

Webbiteknologialla tarkoitan JavaScript, HTML(5), CSS(3/2)

  • Nokia: Symbian C++ (natiivi), Qt & C++, Java ME, Python, JavaScript ja selaimen kautta webbiteknologiat.
  • Android: Java (dalvik), C, C++, webbiteknologiat
  • iPhone: Objective-C ja webbiteknologiat

Tästä jo nähdään, että periaatteessa webbiteknologioilla voidaan tehdä sovelluskehitystä kaikille alustoille. Nykyään webbiteknologioilla voidaan myös tehdä sovelluksia ilman verkkoyhteyksiä. Rajoittavana tekijänä on tässä tapauksessa teknologian rajoitteet, eli hitaus, rajoitettu pääsy raudan ominaisuuksiin. Nämä rajoitteet ovat hyvin pitkälti samat jokaisella alustalla, mutta periaatteessa näitäkin voidaan kiertää. Se on taas oma asiansa, joten en ota niihin nyt kantaa sen enempää. Näissä ongelmat ovat joka alustalla samanlaisia, eli skaalautuvuus eri näyttökokoihin ja resursseihin.

Symbian

Natiivien ohjelmakehityksen rajoitteet ovat ehkä Symbian C++ kannalta suurimmat osaltaan juuri eri käyttöjärjestelmäversioiden takia, kuten myös osaltaan hankala käyttöisten kirjastojen takia. Useat eri puhelinmallit ja käyttöjärjestelmäversiot auheuttavat päänvaivaa myös testaamisen kannalta. Yksittäisellä kehittäjällä esimerkiksi on harvemmin varaa testata monella eri laitteella.

Qt C++ tuo vähän helpoutta ohjelmistokehitykseen itsessään todella näppärien kirjastojen ja huomattavasti helpomman käyttöliittymäohjelmoinnin osalta, mutta tässä riippakivenä on edelleen se, että Qt ei vielä löydy vakiona kaikista laitteista, joten se pitää toimittaa mukana. Harmillista on myös, että Qt 4.6. versiossa ei ole vielä mahdollista käyttää 3Dhen tarkoitettua APIa, joten 3D pelien tekeminen Qtlla ei vielä onnistu.

Molemmissa, Symbian C++ ja Qt C++, pitää ohjelmoijan hoitaa resurssienhallinta käsin, vaikkakin Qtssa on automaattisia tapoja sen helpottamiseksi.

Käyttöjärjestelmänä S60 on suunniteltu mobiilikehitykseen, mutta on sittemmin rapautunut osaltaan ikänsä takia, mutta pääasiallisesti muuttuneiden vaatimusten takia. Multimediaominaisuudet ovat aikalailla päälle liimattuja.

Työkalut Symbianille eivät ole parhaasta päästä. Emulaattori on esimerkiksi todella hidas.

Tietoa ja esimerkkisovelluksia löytyy Symbianille Nokian omasta palvelusta forum.nokia.com .

Android

Java on Androidin pääkehityskieli, mutta C ja C++ mahdollistavat myös pääsy lähemmäksi rautaa. Kehittäjän kannalta Java on heti webbiteknologioiden jälkeen tästä kehityskielirepertuaarista korkeimmalla tasolla. Ohjelmoijan ei tarvitse hoitaa käsin kaikkea resurssien hallintaa, kuten muistinkäsittelyä.

Peruskirjastot on suht hyvät ja lisäkirjastojakin löytyy, tosin ne pitää erikseen kääntää Dalvikille, koska Dalvik käyttää omaa binäärimuotoansa. Dalvik on siis Googlen kirjoittama virtuaalikone, joka eroaa Sunin, eli nykyään Oraclen, JVMstä.

Hankaluuksia Androidissa tuo lähinnä se, että sitä on mahdollista ajaa hyvinkin rajatuilla resursseilla ja erilaisella raudalla, joten jos haluaa ohjelmansa toimivan joka yhdistelmässä on se otettava huomioon ja tämä aiheuttaa taas testauksen kannalta päänvaivaa.

Käyttöjärjestelmänä Android on ehkä lähtökohdiltaan parhaassa tilanteessa. Ikää ei ole vielä kertynyt kovin paljoa ja se on suunniteltu mobiilialustaksi. Nykyaikaiset multimediaominaisuudet ovat otettu huomioon alusta alkaen.

Työkalut ovat Androidille ihan kohtuulliset jo sen kautta, että kielenä on Java. Eclipse on Googlen tukema työkaluympäristö.

Tietoa, videoita ja esimerkkisovelluksia löytyy varsin hyvin Googlen omasta dokumentaatiosta.

iPhone

Objective-C on nykyään ainoa hyväksytty kieli heidän raudassaan, joten vaihtoehtoja ei ainakaan tarvitse miettiä – tosin Objective-C on myös Cn jälkeläinen, joten C koodi toimii siellä myös. Objective-C on abstraktiotasoltaan C++ ja Javan väliltä. Ohjelmoija on vastuussa resurssien hallinnasta.

iPhonen kirjastoista minulla ei ole juurikaan kokemusta, mutta pikaisella dokumentaatiovilkauksella vaikuttavat ne suhteellisen kattavilta.

Käyttöjärjestelmänä sijoittuu iOS Androidin ja Symbianin väliin, vaikkakin asettaa ehkä eniten rajoitteita sovelluskehittäjälle. Nykyaikaiset multimediaominaisuudet ovat otettu huomioon alusta alkaen.

iPhone on ehkä testauksen kannalta tällä hetkellä helpoin. Puhelimesta on neljä versiota ja erot esiintyvät pääasiassa suorituskyvyssä ja joidenkin ominaisuuksien eroavaisuuksina. Käyttötapaus sanelee sen, että mikä on ongelmallisinta.

Työkalut ovat iPhone-kehitykseen varsin kohtuulliset. XCode on Applen tukema työkaluympäristö.

Tietoa ja esimerkkisovelluksia löytyy varsin hyvin.

Yhteenveto

Lyhyesti ja ytimekkäästi jos kerrataan, niin Android on kehittäjän näkökulmasta peruskäyttötapauksille helpoin lähestyä tuttujen työkalujen takia (Java ja Eclipse) varsinkin kun dokumentaatiota ja tietoa löytyy suhteellisen paljon, vaikkakin käyttöliittymäohjelmointi poikkeaakin hieman standardi-Javan tavasta. Myöskin muistinhallinnasta ei tarvi pitää huolta niin tarkasti, joten se on selkeä etu iPhoneen ja Symbianiin.

iPhone on oma lukunsa näissä piireissä ja karsii tekijöitä maksullisuutensa kuten myös Applen asenteen takia, mutta on ehdottomasti myös yksi mielenkiintoisimmista alustoista. Väittäisin ohjelmistokehityksen olevan iPhonelle ja Symbianille Qt C++ teknologialle samaa tasoa. Kirjastot ovat molemmissa hyvät, mutta ohjelmoijalle jää edelleen enemmän vastuuta muunmuassa muistinhallinnasta, verrattuna Androidiin. Toki helpompi 3D -ohjelmointi ja rajatumpi laitepohja on myös etuja.

Symbianille (, Maemolle ja Meegolle) kehittäessä on monia tapoja tehdä asioita ja jokaisen käyttötapauksen kohdalla kannattaa valita siihen sopiva, mutta Qt on Nokian alustoilla tulevaisuus ja toimii suurimmassa osassa käyttötapauksia, joten minä suosittelen lämpimästi sitä, vaikkakin työkaluissa on vielä hieman parantamisen varaa.

Android on siis minun näkökulmastani helpoin ja väittäisin, että iPhone ja Symbian Qtlla ovat samassa tasossa. Tämä tosin sillä varauksella, että jos haluaa 3Dtä tai multimediaa, niin Symbianilla joutuu käyttämään Symbian C++, joka on taas huomattavasti vaikeampaa. Perusjutut onnistuvat kaikilla suhteellisen helposti, mutta Android ja iPhone ovat selkeästi paremmissa lähtökohdissa pelien ja multimediasovellusten teon kannalta. Webbiteknologiolla voi kehittää kaikille alustoille, mutta käyttötapaukset ovat osittain rajattuja, eli videoa, 3Dtä ja osittain ääniä ei voi käyttää.

Powered by WordPress