\section{Στήσιμο API και εγκατάσταση εφαρμογής}

Παρακάτω περιγράφονται η διαδικασία στησίματος της εφαρμογής API που είναι απαραίτητη για την λειτουργία της εφαρμογής Android καθώς και τα βήματα για το χτίσιμο της Android εφαρμογής στο περιβάλλον Android Studio και η εγκατάσταση της σε κινητό.

Οι οδηγίες αυτές μπορούν να βρεθούν και στον \href{https://gitlab.com/Apostolof/flavours-without-borders/blob/master/UI/Database\%20API/SETUP.md}{οδηγό εγκατάστασης στο online repository} του κώδικα σε μία πιο συνοπτική έκδοση (στα αγγλικά).

Αρχικά πρέπει να γίνει λήψη του κώδικα του project από το repository χρησιμοποιώντας το git:
\begin{lstlisting}[language=bash]
git clone https://gitlab.com/Apostolof/flavours-without-borders.git
\end{lstlisting}

Έπειτα στήνεται η εφαρμογή API, ο κώδικας της οποία βρίσκεται στη διαδρομή:
\begin{quote}
\texttt{flavoursWithoutBorders/UI/Database API/}
\end{quote}

Οι παρακάτω οδηγίες αφορούν Debian based, Linux συστήματα. Ωστόσο το λογισμικό θα πρέπει να λειτουργεί σε οποιοδήποτε λειτουργικό σύστημα, με μικρές αλλαγές στη διαδικασία εγκατάστασης.

\subsection{Προαπαιτούμενα}

Για να εκτελεστούν οι παρακάτω εντολές θα πρέπει το σύστημα στο οποίο δουλεύει ο αναγνώστης να έχει εγκατεστημένο το λογισμικό MySQL server και να υποστηρίζεται η εκτέλεση κώδικα python 3. Επίσης πρέπει να υπάρχει εγκατεστημένο το λογισμικό pip 3.

Τέλος απαιτείται η εγκατάσταση των πακέτων \texttt{virtualenv}, \texttt{python3-dev} και \texttt{libmysqlclient-dev}, χρησιμοποιώντας τις εντολές:

\begin{lstlisting}[language=bash]
apt install virtualenv
apt-get install python3-dev libmysqlclient-dev
\end{lstlisting}

Αν είναι επιθυμητή η πρόσβαση στο API μέσω της δημόσιας IP του συστήματος στο οποίο εκτελείται το πρόγραμμα θα πρέπει να ανοίξει η πόρτα \texttt{8181} του router και να εξασφαλιστεί ότι κανένα firewall που τυχόν είναι εγκατεστημένο δεν θα αποκλείσει την επικοινωνία σε αυτή τη πόρτα.

\subsection{Στήσιμο βάσης δεδομένων και προγράμματος API}

Αρχικά πρέπει να γίνει απεγκατάσταση του πρόσθετου password\_validation της MySQL διότι προκαλεί προβλήματα στην δημιουργία χρηστών της βάσης. Για να γίνει αυτό, πρέπει να γίνει σύνδεση με τον root λογαριασμό στον server της MySQL:
\begin{lstlisting}[language=bash]
mysql -h localhost -u root -p
\end{lstlisting}
και απεγκατάσταση του πρόσθετου με την εντολή:
\begin{lstlisting}[language=SQL]
UNINSTALL PLUGIN validate_password;
\end{lstlisting}

Τέλος πρέπει να εκτελεστεί το bash script που έχει γραφτεί και αναλαμβάνει το υπόλοιπο της εγκατάστασης, τρέχοντας τις εντολές:
\begin{lstlisting}[language=bash]
cd flavoursWithoutBorders/UI/Database\ API/
./install.sh
\end{lstlisting}

Το script θα ζητήσει την είσοδο μίας IP την οποία θα χρησιμοποιήσει για το στήσιμο του server. Αυτή μπορεί να είναι είτε η δημόσια (public IP) του συστήματος, αν έγινε προηγουμένως άνοιγμα της πόρτας 8181, είτε η τοπική (LAN IP).

Το script δημιουργεί τη βάση \texttt{flavoursWithoutBorders}, δημιουργεί ένα εικονικό περιβάλλον (virtual environment) python 3, εγκαθιστά τοπικά όλα τα απαιτούμενα python modules, συνδέει την εφαρμογή API με την βάση δεδομένων και δημιουργεί έναν superuser. Τέλος ξεκινά τον server στον οποίο τρέχει το API.

Όταν ο python server του API ξεκινήσει, ο αναγνώστης έχει πρόσβαση στο API μέσα από τις διευθύνσεις του admin panel και της λίστας διαθέσιμων εντολών του API.
\begin{lstlisting}[language=bash]
sensible-browser YOUR_IP:8181/admin/
sensible-browser YOUR_IP:8181/api/
\end{lstlisting}
όπου με τον όρο \texttt{YOUR\_IP} εννοείται η IP που επιλέχθηκε για χρήση σε προηγούμενο βήμα.

\subsection{Χτίσιμο και εγκατάσταση της Android εφαρμογής}

Για την εγκατάσταση της Android εφαρμογής δίνονται δύο επιλογές, το χτίσιμο της ή η χρήση του έτοιμου apk που διατίθεται μαζί με τον κώδικα.

Για το χτίσιμο (build) της Android εφαρμογής απαιτείται η εγκατάσταση τουλάχιστον του Android SDK. Οδηγίες για τη διαδικασία δίνονται από την Google. Παρακάτω θα περιγραφεί η διαδικασία χρησιμοποιώντας το λογισμικό Android Studio.

Μετά την εκκίνηση του λογισμικού, εμφανίζεται η οθόνη καλωσορίσματος. Αν υπάρχει ήδη ανοιχτό κάποιο project, το κλείνουμε μέσω της επιλογής του μενού File → Close Project. Από το μενού επιλέγεται το ``Open an existing Android Studio project''. Στο παράθυρο που εμφανίζεται, γίνεται επιλογή του φακέλου του project στη διαδρομή:
\begin{quote}
\texttt{flavoursWithoutBorders/UI/AndroidApp/flavoursWithoutBorders/}
\end{quote}

Προσοχή στην ύπαρξη του \texttt{\textbf{flavoursWithoutBorders/}} στο τέλος του path! Η διαδρομή δεν λήγει στο \texttt{AndroidApp/}.

Τέλος συνδέεται στο σύστημα με USB ένα Android smartphone και επιλέγεται από το μενού Run → Run 'app'. Στο μενού που εμφανίζεται επιλέγεται η σωστή συσκευή και γίνεται κλικ στο OK.

Τονίζεται εδώ ότι κατά τη διαδικασία αυτή απαιτείται η λήψη πολλών, μεγάλου μεγέθους αρχείων, συνολικού μεγέθους αρκετών Gigabytes, κάτι που μπορεί να είναι αποτρεπτικό. Για το λόγο αυτό δίνεται ένα έτοιμο signed apk της εφαρμογής για εύκολη εγκατάσταση. Το apk μπορεί να βρεθεί στην διαδρομή:
\begin{quote}
\texttt{flavoursWithoutBorders/UI/release.apk}
\end{quote}

Την πρώτη φορά που ανοίγει η εφαρμογή ζητείται από τον χρήστη η IP του API server. Θα πρέπει να δοθεί η IP η οποία χρησιμοποιήθηκε κατά το στήσιμο του server.