Mina listor En Android-applikation Rickard Karlsson 2013-06-09 Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.se
Innehållsförteckning 2. Innehållsförteckning 3. Abstrakt 4. Inledning/bakgrund 5. Positiva erfarenheter 6. Negativa erfarenheter 7. Sammanfattning 2
Abstrakt Detta är en slutrapport för det projekt jag bedrivit inom ramen för kursen Individuellt Mjukvaruutvecklingsprojekt 1dv430 på Linnéuniversitetet. Kursen går ut på att under 10 veckor utveckla någon slags applikation inom valfritt språk och plattform. Jag valde att utveckla en Androidapplikation med hjälp av HTML, CSS, JavaScript och ramverket PhoneGap. För mig innebar det att sätta mig in i hur PhoneGap fungerar, hur utvecklingsmiljön för Android är och generellt hur det går till att utveckla en Android-applikation. Den slutprodukt jag kom fram till i slutet av kursen är en applikation för att skapa checklistor utvecklad med Android Jelly Bean i åtanke. Under utvecklingen så har jag fått en betydligt större förståelse för hur man utvecklar en smartphone-applikation med hjälp av att använda en WebView och mer specifikt hur man gör det med hjälp av PhoneGap. Här är mina erfarenheter av denna utvecklingsprocess. 3
Inledning/bakgrund Att utveckla applikationer till mobiltelefoner är något jag alltid varit intresserad av men det har inte varit något jag har haft kunskapen till att göra. Just på grund av det intresset så blev det också mitt syfte med detta projekt att lära sig mer om hur det är att utveckla smartphone-applikationer. Det finns många olika sätt att utveckla applikationer till dagens mobiltelefoner och alla olika smartphones kör olika operativsystem (ios, Android etc.) och de olika operativsystemen använder i sin tur olika programmeringsspråk men något som finns gemensamt för alla är att man kan använda något som kalls WebView. WebView kan man kort beskriva som en komponent man kan använda i en applikation för att visa en webbsida och detta är något som finns i alla mobila operativsystem. Så genom att kombinera komponenten WebView med ett ramverk som PhoneGap så kan man använda tekniker vi alla är vana vid: HTML, CSS och JavaScript för att skapa en applikation som ser ut och som känns som en native smartphone-app. Det är spännande att man kan kombinera webbteknikerna med PhoneGap för att skapa något för mobilen och med hjälp av API:er som PhoneGap erbjuder kan man göra saker utöver det vanliga man är van vid med JavaScript som till exempel komma åt kontakter, arbeta med telefonens kamera eller spara data i telefonens minne. Sedan, med tanke på den tiden vi hade och min begränsade kunskap, så valde jag att göra en typ av to-do applikation. Det är en applikation där man kan skapa sina egna checklistor som är väldigt simpelt utformad och utan krångel. Det finns en hel del sådana applikationer ute på marknaden men alla konkurrenter är lite för avancerade och svåra att använda medan min fokus har legat på användarvänlighet och enkel utformning. 4
Positiva erfarenheter Under dessa tio veckor som kursen gått har jag lärt mig en hel del. Jag valde visserligen att programmera i språk jag är väldigt van vid och som jag kan ganska väl men trots det har det ändå varit en hel del nytt. Först och främst så gäller det ramverket PhoneGap. Ramverket har väldigt mycket att erbjuda och jag har lärt mig mycket. Det jag kan säga är att även om det är ett kraftfullt ramverk så tog det ändå inte lång tid att sätta sig in i hur det fungerar. PhoneGap har en bra dokumentation som tar upp hur alla olika API:er fungerar och har bra exempel. Genom att ständigt gå tillbaka till dokumentationen och läsa väldigt noggrant hur saker och ting fungerar så har det inte tagit lång tid alls för mig att förstå de olika komponenterna. Därför har det för mig varit en väldigt bidragande del till hur jag har lärt mig det under så pass kort tid. Just när det gäller PhoneGap så finns det en väldigt bra dokumentation men så är nog inte fallet för alla ramverk och API:er som finns där ute och är tillgängliga för oss utvecklare och när så är fallet så kommer ramlar jag in den andra punkten jag vill ta upp; Google. Alla problem jag stött på som jag inte har kunnat lösa har jag googlat fram en lösning. Det är förvånansvärt ofta man stöter på nästintill samma problem som någon annan gjort och det är också förvånansvärt ofta det finns en bra lösning också. För mig är Google det bästa verktyget man har som utvecklare och det är förmodligen nästan en klyscha att säga det men det är också således sant. Man ska aldrig någonsin underskatta förmågan att kunna googla effektivt och bra. En annan väldigt positiv sak som jag upplevt under dessa 10 veckor är att jag är ganska bra på tidsuppskattning. Eftersom tidsuppskattning och att arbeta från vecka till vecka var ett av kriterierna till projektet så blev jag mer eller mindre tvingad att inför varje vecka lägga upp en veckoplanering tillsammans med en tidsuppskattning av hur lång tid varje uppgift skulle ta. Detta är verkligen inget jag normalt sätt skulle ha gjort men eftersom jag mer eller mindre blev tvingad så gjorde jag det. Något jag märkte ganska snabbt med mina planeringar var att jag var väldigt nära, om inte exakt, på när det kom till att uppskatta tiderna. Det var väldigt sällan jag arbetade över tiden jag uppskattade och om något så var jag under tiden. Detta ledde naturligtvis till att jag fick ett väldigt bra arbetsflöde och jag kunde ganska snabbt identifiera punkter i min product backlog som jag inte skulle hinna med och på samma sätt kunde jag också göra snabba beräkningar på om jag skulle hinna lägga till nya funktioner eller inte. Detta är något som verkligen hjälpte mig i min utvecklingsfas genom att jag väldigt lätt kunde planera min vecka och aldrig behövde stressa. Jag har som sagt lärt mig en hel del under denna kurs gång och det finns säkert mer jag skulle kunna ta upp här men för att sammanfatta denna sida så vill jag säga det att: 1. Läs igenom dokumentationen. 2. Om 1 misslyckas; Googla. 3. Använd din tidsplanering väl. 5
Negativa erfarenheter Dessa tio veckor har verkligen inte varit enbart positiva erfarenheter. Något jag lärde mig väldigt tidigt var att man förlorar väldigt mycket tid om man inte gör ett riktigt förarbete. Det var något jag missade att göra och när jag den första veckan planerade att sätta upp min utvecklingsmiljö och sedan också hinna med en hel del programmering så misslyckades jag ganska så rejält med tidsuppskattningen eftersom jag inte hade utfört mitt förarbete tillräckligt väl och tagit reda på hur man sätter upp sin utvecklingsmiljö för Android. Detta problem var ingenting jag stötte på senare i projektet och när jag väl hade fått upp min utvecklingsmiljö så gick det rätt smidigt efter det men det är definitivt något jag kommer ta med i framtida projekt. En sak som gick ganska dåligt under utvecklingsprocessen var min testning. Testning är en sådan viktig del i utveckling och det var därför väldigt frustrerande att det var så segt och trögt att testa. Det var två problem jag hade med testning: 1. emulatorn och 2. felsökning. Problemet med emulatorn var att det var väldigt omständligt att använda den. Det var segt och trögt att arbeta med och generellt sätt en väldigt dålig upplevelse. Mitt alternativ var att installera om applikationen på min telefon varje gång jag hade gjort en ändring som jag ville testa och även om upplevelsen var bättre på telefonen och även om den verkligen inte är lika seg som emulatorn så var det istället frustrerande att jag var tvungen att spara.apk-filen (det är alltså applikationen som blivit exporterad från programvaran) på ett ställe som mobilen kom åt, gå in i mobilen och installera den. Detta var speciellt i början ett ganska stort problem men allt eftersom jag kom längre in i utvecklingsprocessen så kom jag på smartare lösningar för att hantera detta problem men ändå nu i slutet känner jag mig inte helt nöjd med det. Jag har tyvärr inte kommit på en lösning som jag är 100% nöjd med och det är också tyvärr något jag får ta med mig till nästa projekt och fortsätta fundera på. Det andra problemet jag hade med testning var felsökning. Problemet låg i att JavaScript i sig inte är det lättaste programmeringsspråket att testa och om man dessutom tar bort möjligheten till konsol som man normalt sätt kan använda sig av om man skriver JavaScript för webben så blir det ännu svårare. I början var det oerhört svårt för mig men ju mer jag höll på med det ju vanare blev jag och jag lärde mig på något sätt hur man ska gå till väga för att felsöka. Om man bortser från de två punkterna testning och dåligt förarbete så vill jag ändå påstå att jag inte tar med mig så många negativa erfarenheter från detta projekt. Det finns fortfarande lite saker i själva applikationen som jag önskat att jag hade gjort bättre men i det stora hela så gick det ändå bra. De saker jag önskar jag hade gjort bättre hade jag kunnat fixa om jag bara hade haft mer tid och det är inget jag egentligen inte hann med eller så heller. Överlag så gick det bra. 6
Sammanfattning Ja, vad kan man säga? Dessa tio veckor har förmodligen varit de bästa tio veckor jag någonsin spenderat med ett skolarbete. Det har varit underbart att få välja helt fritt vad man vill göra och dessutom få friheten att lägga upp sitt eget schema har också varit en jättetrevlig upplevelse. Att jag dessutom lyckades producera en fullt fungerande applikation är också ett plus. Jag har lärt mig en hel del om det går till att utveckla applikationer för smartphones och eftersom målet med mitt projekt var att skapa en Androidapp som man kan skapa egna listor som sparas och som man kan bocka av sina listpunkter en och en i så säger jag definitivt att jag nådde mitt mål. Det var stundtals en klurig resa men generellt sätt så gick det väldigt smidigt och snabbt. Något som jag kan ta med mig till nästa stora projekt jag ger mig in på är att det är jätteviktigt att planera framåt, att följa sin planering och att alltid försöka vara ett steg före. Dessa punkter går naturligtvis hand i hand. Det är genom att tänka framåt som man kan planera bra och om man dessutom gör bra tidsuppskattningar och aldrig fastnar på något allt för länge som man kan hålla sin planering. Det är på så sätt som jag lyckats slutföra mitt projekt och ganska stolt kan visa upp min slutprodukt för andra människor. Men allting är naturligtvis inte helt perfekt. Så här i efterhand så ser jag definitivt förbättringspunkter i min applikation. Om projekttiden hade varit längre hade jag förmodligen strukturerat om all min kod för att optimera och få ett rent och mer lättläst kod. Jag hade också arbetat mer på mitt gränssnitt men med brist på testpersoner, bristande testmiljö och naturligtvis brist på tid så får jag tyvärr nöja mig med något jag enbart är nöjd med till 70 procent. Det finns en hel del mer punkter jag också skulle vilja ha gjort annorlunda men än är jag nog inte helt klar med denna applikation heller. Kursen är visserligen slut men för min personliga utveckling så kommer jag ändå fortsätta förbättra applikationen. Det finns funktioner som jag skulle vilja lägga till, som till exempel att kunna dela med sig av sina listor på Facebook/mejl/ etc. eller att kunna synka sina listor mellan två olika enheter. Jag ser fortfarande framtida möjligheter och om jag väljer att fortsätta arbeta på den så tror jag att jag i slutändan kan ha en applikation som är värdig nog att publicera på Google Play och dela med mig av till resten av Sveriges Androidanvändare. Överlag känner jag mig väldigt nöjd med hur projektet gått. Det finns funktioner som jag skulle velat ha med och saker jag gärna hade gjort annorlunda men jag är nöjd med det jag åstadkommit. Detta var mitt absolut första försök att göra en applikation för smartphones och jag tror ingen kan säga att jag inte gjort ett bra jobb. Den är egentligen bara en i mängden om man ser på hur den enorma mängden applikationer som utgör samma syfte och förmodligen är den också nästan för simpel i jämförelse med de andra men för att vara den försöka applikationen så är den bra. I mina slutord såhär i slutet av rapporten vill jag påpeka att det var ett jättekul projekt att utföra och att jag verkligen nu i slutet inser vikten av bra planering. Det hade aldrig gått om jag hade chansat mig fram som jag normalt sätt gör. 7