22/08/2023
Skab dine første Android-apps med Visual Studio
Android-operativsystemet, bygget på Dalvik Virtual Machine (VM), ligner Java VM, men er optimeret til mobile enheder. Med Oxygene for Java i Visual Studio kan du nemt oprette Android-projekter, der producerer både native Java JAR-filer og de nødvendige Android APK-filer til udrulning. Androids fleksibilitet med forskellige skærmstørrelser og formater betyder, at brugergrænsefladen (UI) designes via XML-filer, ligesom .NETs XAML. Selvom der findes online WYSIWYG-værktøjer som DroidDraw, anbefales direkte XML-redigering for mest kontrol.

Forudsætninger og Emulatorer
For at komme i gang med Android-udvikling i Visual Studio skal du installere Java Development Kit (JDK) og Android SDK. Når disse er installeret, kan du oprette en Android Emulator (også kendt som Android Virtual Device eller AVD) via Android Virtual Device Manager. Her kan du vælge API-niveauer (f.eks. Android 2.2 - API Level 8 eller Android 4.0.3 - API Level 15), angive SD-kortstørrelse og vælge en skærmopløsning (skin). Husk at køre SDK Manager som administrator for at installere opdateringer, især hvis Android SDK er installeret på standardplaceringen.
Ved første oprettelse eller åbning af et Elements-projekt til Android udføres en 'pre-flight check' for at sikre, at JDK og Android SDK kan findes. Hvis de er installeret på brugerdefinerede steder, kan du specificere installationsmapperne her.
Kom godt i gang med Projektet
I Visual Studio finder du Android-app-skabelonen under Oxygene for Java og Android i dialogboksen 'New Project'. Et nyt Android-projekt indeholder som standard en simpel 'Activity' kaldet MainActivity. En Activity repræsenterer en enkelt brugerhandling i appen. Den medfølgende MainActivity har kode til en simpel UI med en knap, der tæller klik og viser antallet på knappen.
Brugergrænsefladedefinition i XML
Brugergrænsefladen for MainActivity defineres i XML-filen main.layout.xml, som findes i mappen res/layout. Her defineres elementer som knapper og layouts. Kontroller navngives med attributten android:id. I koden refereres til disse IDs via R.id.DitNavn og kan tilgås med metoden findViewById(). For eksempel, en knap med ID'et MyButton tilgås som Button(findViewById(R.id.MyButton)).
Eksempel på main.layout.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <Button android:id="@+id/MyButton" android:text="@string/my_button_text" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> </LinearLayout>
Ressourcer og Streng-definitioner
Streng-referencer i XML-attributter (f.eks. @string/my_button_text) eller i koden som medlemmer af R.string-klassen, defineres i ressourcefilen strings.android.xml i mappen res/values. Du kan tilgå disse strenge i koden via metoden getString(R.string.dit_streng_navn).
Eksempel på strings.android.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">org.me.androidapplication1</string> <string name="my_button_text">Click Me!</string> <string name="my_button_text_2">%1$d clicks!</string> </resources>
Egenskaber (Properties) vs. Metoder i Java
Java understøtter ikke direkte egenskaber (properties) som f.eks. Delphi og .NET. I stedet bruges getter- og setter-metoder. Oxygene for Java giver dig dog mulighed for at arbejde med disse som egenskaber. For eksempel kan du tilgå en streng-ressource enten ved at kalde String.format() eller bruge den mere intuitive egenskabs-notation.
Kodeeksempel i Oxygene for Java:
type MainActivity = public class(Activity) private Count: Integer := 0; public method onCreate(savedInstanceState: Bundle); override; method ButtonOnClick(v: View); end; method MainActivity.onCreate(savedInstanceState: Bundle); begin inherited; // Sæt vores view fra "main" layout ressourcen ContentView := R.layout.main; // Hent vores knap fra layout ressourcen og tilknyt en event var myButton: Button := Button(findViewById(R.id.MyButton)); myButton.OnClickListener := new interface View.OnClickListener(onClick := @ButtonOnClick); end; method MainActivity.ButtonOnClick(v: View); begin inc(Count); (v as Button).Text := WideString.format(String[R.string.my_button_text_2], Count); end;
Metoden onCreate initialiserer Activity'en og sætter layoutet via ContentView. Derefter findes knappen, og dens klik-event håndteres af metoden ButtonOnClick. Denne metode tæller klik og opdaterer knappens tekst ved hjælp af en formateret streng-ressource.
AndroidManifest.xml - Appens Hjerte
Applikationens navn, ikon og aktivitetsdefinition findes i AndroidManifest.xml-filen, som ligger i mappen 'Properties'. Denne fil er essentiel for Android, da den informerer systemet om appens identitet, komponenter, nødvendige tilladelser og andre systemdetaljer. app_name strengen bruges både i appens titelbar og i listen over installerede apps.
Eksempel på AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.me.androidapplication1"> <application android:persistent="true" android:label="@string/app_name" android:icon="@drawable/icon" android:debuggable="true"> <activity android:label="@string/app_name" android:name="org.me.androidapplication1.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>
Bemærk: Filnavne som .layout.xml og .android.xml bruges for at aktivere IntelliSense/kodefuldførelse i Visual Studio.
Kørsel og Udrulning af din App
Når du bygger din app, kompilerer Oxygene-compileren først til en Java JAR-fil, hvorefter Android-værktøjerne skaber en Android APK-fil. Denne APK-fil indeholder den kompilerede Java-bytecode, optimeret til Androids Dalvik VM, sammen med alle nødvendige ressourcer. APK-filen kan derefter køre på en AVD (emulator) eller en fysisk enhed.
For at udrulle en APK fra din Windows-maskine til en fysisk Android-enhed, skal du først installere enhedsproducentens USB-driver. Tilslut derefter enheden til computeren via USB. Du kan vælge, hvilken enhed (emulator eller fysisk enhed) din app skal målrettes til, i projektets egenskaber.

Visual Studio's 'Start Debugging' (F5) eller 'Start Without Debugging' (Ctrl+F5) knapper udruller automatisk APK'en til emulatoren og starter den. Med 'Start Debugging' kan du sætte breakpoints og fejlfinde din app direkte fra Visual Studio.
Manuel Udrulning med ADB
Du kan også manuelt installere APK-filen ved hjælp af Android Debug Bridge (ADB) kommandolinjeværktøjet. ADB findes i mappen platform-tools i din Android SDK-installation. Det kan være en fordel at tilføje både platform-tools og tools mapperne til systemets søgesti (PATH) for nemmere adgang til Android SDK-værktøjer.
Brug kommandoen:
adb install -r org.me.androidapplication1.apk
Hvis APK'en allerede er installeret, bruges -r parameteren til at overskrive den. Du kan specificere, om installationen skal ske på en emulator (-e) eller en fysisk enhed (-d), hvis begge er tilgængelige.
Layout-muligheder i Android UI
Udover LinearLayout findes der flere andre layout-muligheder i Android:
- FrameLayout: Designet til at blokere et område af skærmen til visning af et enkelt element.
- LinearLayout: Arrangerer børneelementer i en enkelt kolonne (vertikal) eller række (horisontal).
- RelativeLayout: Positionerer børneelementer i forhold til hinanden eller til forældreelementet.
- TableLayout: Arrangerer elementer i rækker og kolonner, ligesom i HTML-tabeller.
Du kan tilføje forskellige kontroller som Button, ImageButton, TextView, ImageView og mange flere til dine layouts.
Hjælp til UI-design og Kodekonvertering
Der findes gode UI-tutorials til Android, selvom kodeeksemplerne ofte er i Java. Visual Studios 'Oxidizer IDE'-funktion kan hjælpe med at konvertere Java-kode til Oxygene-syntaks. Ved at kopiere et Java-kodestykke og trykke Alt+Ctrl+V, efterfulgt af J, kan Oxidizer forsøge at oversætte koden for dig.
Toast-beskeder i Android
En 'Toast' er en kortvarig popup-besked, der vises på skærmen. Du opretter en Toast ved at kalde Toast.makeText() og derefter .show().
Toast.makeText(self, "Hello World! This is a toast.", Toast.LENGTH_SHORT).show();
Metoden makeText tager tre parametre: konteksten (self eller getApplicationContext()), selve tekststrengen (eller en streng-ressource-ID) og varigheden (Toast.LENGTH_SHORT eller Toast.LENGTH_LONG).
Dokumentation og Ressourcer
Google tilbyder omfattende dokumentation for Android-udvikling i deres API Reference og API Guides. Selvom dokumentationen primært er rettet mod Java-programmører, er metode-signaturerne universelle. Oxygene for Java kan direkte tilgå Android SDK's klasser og metoder, så Googles officielle dokumentation er den mest værdifulde ressource.
Vigtige Noter om Biblioteker
Når du arbejder med biblioteker i større projekter, er det vigtigt at indstille egenskaben 'Copy Local' korrekt. For hovedplatformbiblioteker som android-14 skal 'Copy Local' være false. For alle andre refererede biblioteker skal den sættes til true for at sikre, at koden inkluderes i den genererede APK og er tilgængelig på Android-enheden.
Ved at følge disse trin og udnytte Visual Studios kraftfulde værktøjer, kan du effektivt udvikle og udrulle dine egne Android-applikationer ved hjælp af Oxygene for Java.
Hvis du vil læse andre artikler, der ligner Udvikl Android Apps med Visual Studio, kan du besøge kategorien Mobil.
