# JavaFX on Android using GraalVM and Gluon's client-maven-plugin
Dette prosjektet er et utviklingsprosjekt tilsvarende det en skal gjennom i IT1901. Det er ment å være til et nyttig eksempel på flere måter:
This branch allows you to build a native Android application using GraalVM and Gluon's client-maven-plugin.
- Det viser hvordan prosjektet kan deles opp i mange fokuserte og håndterbare trinn
However, if you code inside gitpod you cannot debug through the USB connection, so installing and running must be done locally:
- Prosjektoppsett og kodingsteknikker
- Det er utgangspunktet for en videoserie som også viser hvordan det jobbes praktisk med utviklingsverktøy
- Configure gitpod to use a docker image with the last graalvm and set it as default
- Code your application and provide build instructions according to [gluons documentation](https://docs.gluonhq.com/client/0.1.31)
Ikke alt vi gjør blir tatt opp på video, noe arbeid vil bli gjort som forarbeid eller mellom episodene, videoene skal gi en oversikt over alt arbeidet.
- Run **mvn -Pandroid package client:build client:package** to build the Android application
- Download the **aarch64-android** folder in *target/client* (you get a tar file). I think you could do with a bit less, but I haven’t experimented with minimising the download.
## Plan over arbeidet/episodene
- Clone your project onto your mac and untar the **aarch64-android.tar** file into **target/client** so you get the same/necessary build state as in gitpod
- Connect your phone to the USB port and ensure it enters debug mode and run **mvn -Pandroid client:install client:run**
Her følger oversikt over arbeidet/episodene. Først er dette en plan, men etterhvert som arbeidet blir utført så blir det en oversikt over faktisk gjennomført arbeid.
- The app should open on your phone and you’ll see lots of debug output from it in the console
\ No newline at end of file
### Gitpodifisering av repoet og oppsett av første trinn av utviklingsprosjektet
Planen er å primært bruke gitpod til utvikling (selv om det kanskje ville vært mest praktisk for meg å bare bruke Eclipse).
Først må vi "gitpodifisere" repoet, dvs. gjøre at gitpod kan startes opp rett fra repo-sida på gitlab.
I starten så setter vi opp et enkelt JavaFX-prosjekt med **maven** som bygge-system. Vi setter det opp fra scratch, vha. en enkel mal for
maven-prosjekter og så justerer vi litt på det ved å kopiere elementer fra andre prosjekter f.eks. malen som ligger i *javafx-maven*-grenen i
[gitpod-templates-repoet](https://gitlab.stud.idi.ntnu.no/it1901/gitpod-templates) eller [simpleexample-repoet](https://gitlab.stud.idi.ntnu.no/it1901/simpleexamepl).
Jeg gjør det på denne måten, fordi det da er enklere å forklare hvert element i pom.xml-fila, som inneholder oppsettet.
Merk at prosjektoppsettet i starten er enklere enn det vil bli etter hvert, men vi gjør det sånn for å komme raskere i gang.
Så bygger vi ut og omstrukturerer når det trengs.
### Vår første utviklingsoppgave: Et enkelt API for todo-lister
Vi tar utgangspunkt i [brukerhistorie 1](brukerhistorier.md) og definerer tre brukeroppgaver, én for API-et, en for JSON-basert tekstformat og én for GUI-et og begynner på API-et.
API-et består av to klasser, **TodoList** og **TodoItem**, hvor den første inneholder flere av den andre.
**TodoList** har metoder for å legge til, fjerne og hente ut TodoItem-elementer.
Det ble to episoder, episode 2 og 2b.
### JSON-basert tekstformat for handlelist-data
Vi bruker Jackson-biblioteket og implementerer serialisering- og deserialisering-klasser.