Råd för projektstart

Diskussion i 'Frågor, support och diskussion' startad av Harper, 2 mars 2014.

  1. Harper

    Harper Infant Droid Medlem

    Blev medlem:
    2 mars 2014
    Inlägg:
    8
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej,

    Bakgrund:

    Jag har programerat lite grann för Android innan, principelt för min HTC mobil där jag har skapat små appar. Inget märkvärdigt, men jag är bekant med hur man gör det och har universitetserfarenhet av att programemera. Jag saknar kunskap om frameworks och bra "practices" med Android och det är därför jag skriver den här posten.

    Vad jag vill göra:

    En seriös första app som jag skulle önska mig kunna dela med andra. Den ska kunna skicka information över till en databas - både lokal och extern. Ha egen grafik(dvs utan att använda Androids inbyggda standard knappar etc.). Syftet med applikationen är enkel: skriva, läsa text - prestanda är med andra ordinte super viktigt. Jag vill att man ska kunna använda den både på tablet som på mobiltelefon.

    Om jag hade börjat idag, så hade jag använt allt som finns i standard java för Android - en native app, sockets etc. Det kanske inte är optimalt dock, eller hur?

    Vad jag vill uppnå:

    Jag vill gå ett steg frammåt i min utveckling. Vilka frameworks bör jag kolla upp för det syftet? Vad används idag egentligen? Vad bör jag tänka på när jag börjar?
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Det finns så otroligt många sätt att utveckla på så det handlar mest om att välja vilken väg man vill gå. Fundera mer på hur arkitekturen ska se ut än på vilka ramverk du kan slänga in. När du väl har en bra arkitektur så kommer det mest att lösa sig.

    BaaS
    Här är en lista med några BaaS från maj 2013: http://www.kpbird.com/2013/05/list-of-mobile-backend-as-service.html
    Jag kör just nu ett stort projekt där vi använder Parse.com som backend. Som utvecklare slipper man all plumbing. Det är bara att skapa objekt och sen säga till det att spara sig så sparas det i databasen. Om jag vill ha en Facebook eller Twitter-inloggning så är det bara några få rader kod så fixar ramverket allt åt mig + många andra funktioner.
    -Nackdelen är att det blir en inlåsning mot Parse.com som kan kräva en del jobb att arbeta sig bort från om man vill flytta. Kan kosta en del om det blir en populär tjänst, men man får väl hoppas att pengar rullar in från tjänsten vid det laget.
    +Fördelen är hur snabbt det går att få upp allt på banan. Jag funderar mest på logik och design. Backend sköter sig själv väldigt mycket. Man är fortfarande fri att lägga in vad man vill som sqlite för lokal lagring av data då man inte är uppkopplad. Det skalar bra och jag slipper bry mig om prestanda.

    Gör det mesta själv
    Om du vill köra backend själv så ta fram ett RESTful-API som pratar JSON till din tjänst. Hur du gör det beror på vad du kör för server.
    Hur ska du kommunicera med din REST-server? En vanlig httpclient fungerar, men det kan underlätta med ett ramverk för det, ex. Restlet.
    Dina val beror mycket på hur din data ser ut. Underlättar ett ramverk eller skapar det bara onödig overhead? Bygg en prototyp och testa vad som fungerar bäst.

    Ramverk
    När det gäller ramverk för Android så kolla på varje funktion och se om det är något du behöver hjälp med.
    T.ex. för sqlite så kan ett ORM-ramverk vara trevligt. ActiveAndroid verkar intressant: http://www.activeandroid.com
    Vi kör Flurry för statistik i våra appar.
    Utöver det så använder vi bara ramverk för de funktioner vi behöver, ex. streckkodsläsare, SOAP-klient och liknande.
    Mobilappar ska vara så lättviktiga som möjligt.

    Om utseende på grafiska komponenter
    Trenden som jag ser det verkar vara mer back-to-basic nu där fler och fler appar använder standardkomponenter. Jag tror att det beror på att Android äntligen ser snyggt ut från 4.0. Samma sak ser jag på iOS-sidan i och med iOS7.
    Jag tycker att du bör skapa allt med standardutseende först så du får upp alla funktioner. Sen går du in och stylar det som behöver stylas.


    Så med ovanstående så vill jag säga att du bör först och främst fundera på din arkitektur och komma fram till vilken lösning som passar dig bäst. Ska du drifta allt själv eller lägga ut det på någon? Hur ska klienten hantera data, synkronisering etc.
    Senare kommer frågan om utseendet. Ska du följa design guidelines eller köra helt eget och i så fall varför?

    Finns det några ramverk eller bibliotek som gör det du behöver göra, t.ex. synka data sqlite till MySQL (hittade inget) eller hantera sqlite smidigt (ORM).

    Håll din app så ren som möjligt och lägg bara in det du verkligen behöver.
     
  3. Harper

    Harper Infant Droid Medlem

    Blev medlem:
    2 mars 2014
    Inlägg:
    8
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack för svaret, det var väldigt givande och jag följde nyckel orden och läste om t.ex BaaS.

    Jag har en liten dator som jag har använt som MySQL server som jag tänkte också använda nu för appens skull.

    Idéen är att man ska kunna skriva in ord på mobilen/tableten, skicka ut till sitt "konto" på servern och även kunna dela med sig dessa ord med andra användare.

    Jag har skrivit en prototyp(hade inte alla funktioner) innan där jag gjorde allting själv, då såg det ut så här:

    Servern har en java-server som tar emot meddelanden(strängar) och beroende på vilken sträng den får så utför den en motsvarande SQL-query och skickar data fram och tillbaka. Jag använde sockets.

    App---msg--->server--->mysql och tillbaka samma väg, med andra ord.


    Frågor:

    1) Finns det något intressant jag kan göra med min server för det här syftet?(alltså någonting annat istället för att köra en java-server som pratar med mysql osv)
    2) Vilken arkitektur skulle du föreslå?
     
  4. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    1. Om du med intressant menar något att lära sig och prova på så hade jag testat några av de ramverk för PHP som finns för att bygga RESTful-tjänster, ex. http://www.slimframework.com/
    Eller så hade jag slopat den egna servern och kört Google App Engine. Mycket kul att lära sig där också.

    2. Vilken abstraktionsnivå vill du ha det på? Det är en ganska klassisk klient-server. Klienten är ganska dum och allt jobb sker på servern.
    Skissa på hur du tänker att data ska flöde i din app. Ska du ha en lokal databas och hur ska kommunikationen med server ske?
     
  5. Harper

    Harper Infant Droid Medlem

    Blev medlem:
    2 mars 2014
    Inlägg:
    8
    Mottagna gillanden:
    0

    MINA ENHETER

    Det låter som att Google App Engine kan indeed vara intressant, jag kommer köra med den.

    Så jag har tänkt så här(kanske inte optimalt):

    a) Klienten(mobiltelefonen,tableten) har en egene databas där användare kan skriva till sakar i offline mode och om de vill skicka upp det till servern, för att ha en kopia på det. Det handlar om enkla ord, verb som användaren kan själv skriva och skapa. All "träning" med dessa verb görs från mobilens databas. Vad är det smidigaste sättet att göra det på? Är det bättre att ha en automatisk sync, eller ha en explicit knapp som "pushar" ?

    b) På servern har vi alla verb som användaren har skapat. Servern borde kunna lägga till/ta bort inlägg och ha olika databaser för olika användare som har i sin tur sina egna ord.

    Tidigare har jag använt sockets och skickat strängar som servern läser av och uppfattar vad som ska göras. Vad borde jag egentligen använda för att komunicera? Hur kan det läggas upp på ett smart sätt?
     
  6. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    a) Huruvida du synkar automatiskt eller manuellt är inte så intressant att ta beslut om nu. Du vet att det ska synkas på något sätt. Hur du gör det löser du när det är dags.
    Enklast är ju så klart att göra det manuellt. Då behöver du inte har några tjänster som triggar jobb i bakgrunden. Börja så enkelt som möjligt. Automatisk synk låter definitivt som något som ska komma i en senare version.

    Använd webbservices och REST för att kommunicera. Det är alltså vanliga HTTP-requester på en viss form. Sök på REST och RESTful så hittar du mängder med info.
    http://en.wikipedia.org/wiki/Representational_state_transfer
    Om du vill göra det ännu enklare så kan du bara posta data rakt upp och ner till en webbsida. Det kanske är det första du gör innan du sätter upp en komplett server. Särskilt i ditt fall då servern är ganska sekundär. Jag brukar börja så och bara sätta upp en PHP-sida som läser POST- och GET-variabler. Snabbt och enkelt.
     
  7. Harper

    Harper Infant Droid Medlem

    Blev medlem:
    2 mars 2014
    Inlägg:
    8
    Mottagna gillanden:
    0

    MINA ENHETER

    Hm hm :-).

    I see.

    Gäller POST/GET också för om man gör en app skriven i Java för Android ? Jag ser inte riktigt hur PHP kan vara inblandat i det här.
     
  8. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Japp, POST/GET går alldeles utmärkt i Android.

    Vad du har på serversidan är upp till dig och har inget med Android att göra. Du kan köra precis vad du vill där.
    Jag föredrar PHP för att det är så snabbt och enkelt att få upp på servern. Javaservlets har en större overhead och kräver en applikationsserver även för de mesta enkla saker.
    PHP-sidor är enkla att accessa via HTTP-requester och du kan enkelt plocka ut POST/GET-parametrar och göra vad du vill med dem som att uppdatera databaser eller hämta begärd data. Allt som skrivs ut på PHP-sidan landar i responsen så om du vill skicka tillbaks JSON till en klient så skriver du bara ut lite JSON på PHP-sidan.
     
  9. Harper

    Harper Infant Droid Medlem

    Blev medlem:
    2 mars 2014
    Inlägg:
    8
    Mottagna gillanden:
    0

    MINA ENHETER

    Tusen tack för alla svaren, de var till stor nytta! Jag har börjat leka lite med de grejerna. Kan jag PM:a dig om jag behöver lite mer vägledning? :-)
     
  10. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Javisst, men om det är något andra har nytta av så skriv det hellre här.