Artikel top billede

(Foto: Computerworld)

Guide: Lav din egen Android-app

Sådan kommer du i gang med at udvikle apps til Android.

Af Kenneth Geisshirt, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Med Android Studio på plads, kan vi gå i gang med at udvikle apps til Android. Men inden du kommer for godt i gang, må vi hellere forklare lidt om Android. Som bruger af Android er der mange ting, som man ofte ikke tænker på – heldigvis for det!

For en programmør er Android et komplekst styresystem. I bunden af systemet er en Linux-kerne. Kernen er stort set den samme kerne, som du finder i Linux-distributioner som Ubuntu Linux, men der er enkelte ændringer. For eksempel afvikles hver Android-app i et lukket miljø eller sandkasse. Til hver app oprettes en bruger på systemet, og på den måde kan Android bruge Linux’ indbyggede rettighedssystem og skærme adgangen. To apps har dermed ikke adgang til hinandens filer, og crasher en app, har det ingen betydning for den anden.

Android-apps skrives generelt i Java. C og C++ bruges i meget lille omfang, og mit gæt er, at over 90 pct. af alle Android-udviklere aldrig har skrevet en linje i C eller C++. Java-programmer oversættes til bytecode og afvikles på en virtuel maskine (Java Virtual Machine, JVM). Det gælder både et Java-program, som kører på din computer og din Android-telefon. Afhængig af hvilken version af Android, der er tale om, fortolkes bytecode, oversættes til maskinekode under installationen eller oversættes til maskinekode, mens din app kører. Det er generelt skjult for både brugere og programmører.

En Android-app består ofte af mange tråde. Ser du på dine Java-programmer, lever Java-trådene inden i JVM. Android har taget en anden vej: her er Java-tråde implementeret som Linux-tråde. Det gør, at multitasking i Android apps ofte udnytter din telefons cpu meget bedre. Det betyder også, at Android-apps består af mange tråde, da det vil give en mere flydende og responsiv app.

Én tråd er speciel, nemlig den tråd som står for opdatering af brugergrænsefladen (i daglig tale kaldet UI-tråden). Blokerer du UI-tråden længe (5 sekunder), vil Android foreslå brugeren at stoppe appen. Du ser en “Android Not Responding” (ANR) dialog. Kort fortalt, du skal bruge andre tråde end UI-tråden til lange operationer, f.eks. download af data fra nettet.

Ikke bare Android

Google tilbyder med Android en rig udviklingsplatform. Udover at Javas standard API/biblioteker er implementeret, finder du mange forskellige biblioteker. Der er biblioteker for at hente data fra servere på internettet, biblioteker til lyd og billeder, databaser, og naturligvis håndtering af brugergrænsefladen og vekselvirkningen med brugeren.

Selvom Google tilbyder en rig platform, udvikles apps i dag med brug af mange open source biblioteker. Godt nok dokumenterer Google-platformen godt, men den er ikke altid elegant at bruge, og mange kreative Android-udviklere hitter på lettere måder. Et website som Android Arsenal forsøger at samle mange af disse biblioteker i overskuelige oversigter.

Introduktion til app

Til denne artikel har vi skrevet en lille app. Den tager sit udgangspunkt i den gamle tegneserie ETC. Den udkom tilbage i 1980’erne og er en vittig – og til tider – besk kommentar til det nymodens EDB (ja, det hed jo EDB og ikke IT i 1980’erne). De to ophavsmænd til tegneserien har for et par år siden valgt at lægge hele tegneserien på nettet.

Ideen med appen er, at du kan læse tegneserien på din telefon. Ja, du kan bruge telefonens indbyggede webbrowser. Ved at skrive en lille app, føles det som at bringe et klenodie fra dansk datalogis historie frem i nutidens lys.

Start på en ny app

Når du skal i gang med at skrive en ny app, kan Android Studio, som vi beskrev i sidste nummer af Alt om DATA nr. 8, hjælpe dig på vej. Med menupunktet File / New / New project starter Android Studio en wizard som guider dig igennem en række valg. Det første, du skal beslutte, er navnet på din app.

Et vigtigt spørgsmål er, hvilket API/Android version ønsker du som minimum at understøtte? Jo ældre versioner, du ønsker, jo flere telefoner og tablet kan potentielt bruge din app. Omvendt betyder det, at der er funktionalitet, som du er afskåret fra at bruge. Det er vigtigt at huske, at omkring 30 pct. af aktive telefoner/tablets, som kører Android 2.x og 4.x – og sidste version 4.x, blev frigivet for snart fire år siden!

Du vil også blive spurgt om, hvilken type aktivitet (eng. activity), du ønsker. En Android-app består af en eller flere aktiviteter, og brugeren vekselvirker med din app gennem disse aktiviteter. Android Studio har en liste af hyppigt brugte aktiviteter, men du kan senere ændre på dine aktiviteter, så det er ikke så vigtigt at få valgt rigtigt.

Ud fra den valgte aktivitet samt de andre valg, vil Android Studio generere en app. Den nye app indeholder kildetekst, byggefiler (til Gradle, Android Studios byggesystem) samt UI-komponenter til den valgte aktivitet. Appen kan ikke noget, men du kan bygge den og afvikle den i en emulator eller en telefon. Figur 1+2

Figur 1
Figur 2

Når du skal bruge netværk

Appen, som skal vise tegneserien ETC, har brug for adgang til netværk. I Android kan en app ikke bare bruge netværk – den skal bede om tilladelse til det. Der er mange andre funktioner end netværk, som kræver tilladelse. Det er for at give en højere sikkerhed.
Filen AndroidManifest.xml indeholder mange detaljer om en app. Det er også her, du kan lade en app spørge Android-systemet om tilladelse til at bruge netværk. Ved at tilføje linjen <uses-permission android:name=”android.permission.INTERNET” /> har din app mulighed for at bruge internettet. Figur 3

Figur 3

Aktiviteten

Der er kun én aktivitet i den lille app, og den er begrænset. Der skal vises et billede (striben som skal downloades) og knapper til navigation (forrige og næste). Indrømmet, knapper er gammeldags, og en moderne app vil sandsynligvis benytte swipe mod venstre eller højre i stedet for.

I Android Studio kan du tilføje indeholder koden til din aktivitet. Du skal implementere metoden onCreate. Denne metode kaldes af Android-systemet, når din app starter op. Eftersom aktiviteten kører på UI-tråden, er det vigtigt, at du ikke har kode, som tager meget lang tid at udføre. For eksempel bør du aldrig læse eller skrive filer eller hente data fra nettet på UI-tråden. I onCreate skal du være varsom med at initialiseringen ikke tager for lang tid.

Når du har brug for at arbejde med en UI-komponent i din kode, kan du bruge metoden findViewById. Metoden returnerer komponenten som et objekt.
Knapper kan brugeren trykke på. Når det sker, vil du gerne have udført noget kode. Du kan tilføje en listener hvor kode udføres, når brugeren trykker på knappen. I infoboks “En knap” kan du se et eksempel på, hvordan en listener sættes op.

 

Databasen

Med Android følger databasen SQLite. SQLite er en relationsdatabase, men modsat relationsdatabaser som MySQL og Microsoft SQL Server, er SQLite indlejret i appen som et bibliotek.

Langt de fleste apps har brug for at gemme data. At bruge en database er en praktisk måde at gøre det. I den lille app bruges databasen til at holde styr på hvilke striber, som allerede er set.

Java er et objektorienteret programmeringssprog, og SQLite organiserer data i tabeller (den korrekte betegnelse er relationer). Der er ingen elegant måde at transformere objekter til relationsdatabaser og tilbage. Ofte benytter programmører sig af ORMs (Object-Relation Mappers), dvs. biblioteker som kan transformere (afbilde, eng. map) objekter til tabeller og tilbage.

Til daglig arbejder jeg med at udvikle en database (Realm) som gemmer objekter direkte. Der er ingen transformation, og det betyder, at du kan arbejde med dine objekter, som du plejer at gøre. I Infoboks “Strip.java” finder du den klasse, som modellerer de enkelte striber (alle setters og getters er udeladt). Som du kan se, er det en alm. Java-klasse – dog med den undtagelse at den nedarver fra RealmObject. Denne nedarvning sikrer at Realm-databasen kan gemme objekterne.

Appen er bygget op, så når brugeren ønsker at se en ny stribe, gemmes et Strip-objekt i databasen (se infoboks Strip.java). Feltet id er en unik nøgle som matcher det id, som striben har på serveren. Eftersom brugeren ikke har set striben endnu, sættes feltet seen til false.

Med Realm kan du “lytte” til ændringer. Det vil sige, ændres, slettes eller tilføjes et objekt til din Realm-database, kan du få et stykke kode udført. I infoboks “Lyt efter ændringer” kan du se hvordan en RealmChangeListener kan bruges til at få kode udført når der tilføjes en ny stribe til databasen.

Hent og vis billeder

I infoboks “Lyt efter ændringer” kan du se, hvor let det er at downloade et billede og få det vist. Til min app bruges biblioteket Picasso. Det er et meget fleksibelt, men også enkelt bibliotek til visning af billeder. Picasso har brug for et ImageView, men det har vi allerede tilføjet til vores aktivitet. Som du ser, kræver det kun en linje at downloade og vise billedet. Metoden load downloader billedet, mens metoden into viser det. Figur 4 

Figur 4

Afslutning

Som så meget andet programmering, lærer du det bedst ved at prøve det. Denne artikel kan på ingen måde give dig et fuldstændigt indblik i, hvordan en Android-app skal skrives. Skulle du have den fulde historie, ville det kræve, at alle sider i magasinet de næste mange måneder kun handlede om Android.

Det er også muligt at skrive unit-test som en del af din app. Endvidere kan du skrive monkey-test, hvor brungergrænsefladen afprøves. Når din app er færdig, skal den udgives i Google Play Store. Android Studio har en del funktioner til at hjælpe dig med det.

I denne artikel har du set kode skrevet i Java. Et varmt emne blandt Android-udviklere er alternative programmeringssprog - med Kotlin som det absolut mest varme. Kotlin er et programmeringssprog fra samme firma som IntelliJ IDEA (udviklingsmiljøet som Android Studio er baseret på).

Det er vigtigt at vide, at der findes en stor mængde af biblioteker, som kan hjælpe dig med at skrive din app. I denne artikel har du kun set to i brug. Hele appen finder du på Github (se infoboks “Links”), og du er velkommen til at prøve den selv (den er naturligvis open source).

Android Studio er i dag et godt og stabilt udviklingsmiljø. Samtidig er der stor hjælp at finde i podcasts, hjemmesider og YouTube-videoer. Android er en kompleks platform, men det er en åben platform, hvor alle kan være med.