ADG W2T1 – Die erste Android App erstellen

Hallo, willkommen zurück zum Android Development Guide: Woche 2 Tag 1. Nach langer Vorbereitung programmieren wir heute endlich unsere erste App für Android, ein einfaches HelloWorld.

Start

Als erstes öffnen wir Eclipse. Die Android Development Tools (ADT) sollten als Plugin bereits installiert sein, spätestens jetzt sollte ein API-Level heruntergeladen werden (Android SDK Manager öffnen). Ich persönlich habe Android 4.1.1 auf meinem Handy (API Level 16), aber diese Version haben aktuell nur 0,8% aller Android Nutzer. Mit API Level 10 (Android 2.3.3) spricht man die meisten Nutzer und Geräte an, daher werden wir zunächst nur mit dem API Level 10 arbeiten.

Projekt Anlegen

Projektmanager fuer Android Apps

Hier werden grundlegende Einstellungen zum Projekt konfiguriert.

Ein neues Android Projekt wird wie bereits bekannt über den Projektmanager erstellt. Erst werden App-Name, Projektname und Packagename festgelegt. App-Name legt fest, wie die Anwendung heißt, Projektname legt nur den Namen des Projektes fest (lokal). Der Package-Name ist wichtig: Applikationen im Google Play Store brauchen einen einmaligen package namen. Anhand dieses Namens wird die App eindeutig identifiziert. Dabei ist der Name wie eine URL aufgebaut (nur rückwärts). Für dieses Projekt nehme ich z.b. de.tacticalcode.helloandroid. de.tacticalcode ist quasi mein ,,Namensraum“, helloandroid steht für diese spezifische Anwendung.
Außerdem legen wir noch die Ziel-API und die API fest, mit der das Projekt gebaut wird. Um ein Icon kümmern wir uns vorerst nicht.

Activity Auswahl

Als Preset kann eine Activity zum Projekt hinzugefügt werden

Danach erstellen wir eine Activity. Eine Activity kann man sich wie ein Bildschirmfenster vorstellen (Ein GUI-Element). Die Activity zeigt Inhalte an und reagiert auf Nutzereingaben. Wozu genau die Activities, Services usw. gut sind, werden wir im nächsten Artikel erfahren. Wir wählen jedenfalls aus, dass wir eine Activity anlegen wollen, und nehmen die Vorlage ,,Blank Activity“.
Danach wird die Activity konfiguriert: Sie erhält einen Namen (für die Klasse), einen Layout-Namen (dies ist der Name, unter dem die Layout.xml Datei gespeichert wird), Navigation und Hierarchie lassen wir außen vor, und geben dem Kind noch einen Titel.

Grober Aufbau

Die wichtigste Datei im Android Projekt ist die AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.tacticalcode.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Hier werden die Einstellungen wie SDK-Versionen, App-Name usw festgelegt. Außerdem werden hier Berechtigungen angefordert, denen der Benutzer zustimmen muss, um die App installieren zu können (Nutzung der Kamera / mobiles Internet etc.).
Die nächste Datei sollte uns wieder bekannt vorkommen: /src/de.tacticalcode.helloandroid/MainActivity.java

package de.tacticalcode.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Diese Datei ist die Hauptklasse unserer Anwendung. Die MainActivity ist eine Kind-Klasse von Activity, daher muss sie die Methoden onCreate und onCreateOptionsMenu erben (dies wurde von Eclipse/ADT schon selbstständig übernommen).
Zeile 13 ist für uns am interessantesten. Hier wird mit setContentView das Layout festgelegt, welches angezeigt werden soll. Das Layout ist wiederum in einer XML Datei gespeichert unter /res/layout/activity_main.xml (Wir erinnern uns: Layout-Name vom Projektmanager):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

</RelativeLayout>
Grafischer Designer fuer Android Apps

Tool zum grafischen Designen der Apps

Zugegeben, diese XML Schreibweise ist nicht sehr einfach zu lesen, besonders schwierig wird es, wenn man sich das komplette Design selbst vorstellen muss. Dafür hilft das Android Plugin, im Tab ,,Graphical Layout“ wird ein GUI Designer gezeigt, welcher das Gestalten der App wesentlich einfacher macht. Hier können beliebige Elemente per Drag&Drop auf den Bildschirm gezogen werden, und das Aussehen so leicht konfiguriert werden.

Eine Besonderheit in Android Apps sind die Daten, mit der die Anwendung umgeht. Standardmäßig sollte alles als Ressource ausgelagert in XML Dateien bereitgestellt werden. Dies ermöglicht nicht nur einfache Optimierungen: Man kann für jede Sprache, in der die App verfügbar sein soll, eine eigene Datei anlegen. Das System entscheidet später selbst, welche Strings zu wählen sind. So ist die Anwendung sehr flexibel gestaltet. Außerdem kann mit dem neuen Update-Mechanismus, der nur geänderte Dateien austauscht, viel Traffic eingespart werden.

Zeichenketten (Strings) werden normalerweise in /res/values/strings.xml gespeichert. Auch hier kann man entweder die XML Ansicht nehmen (finde ich bei Strings etc. einfacher), oder den Ressourcenmanager auswählen, der die Bearbeitung per GUI erlaubt. Die strings.xml sieht nach dem Erstellen des Projektes so aus:

<resources>

    <string name="app_name">HelloAndroid</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivityTitle</string>

</resources>

Im Projekt vorhanden sind auch noch Styles, Dimensionen, Bilder (Drawables) für verschiedene Bildschirmauflösungen, sowie einige Hilfsklassen, Eigenschaften usw… Wichtig ist erstmal nur, dass wir verstehen:
Die MainActivity steuert unser Programm. Damit wir etwas zu sehen bekommen, wird zunächst mit setContentView in der geerbten onCreate Methode ein Layout festgelegt.
Dieses Layout ist als XML Datei im Projekt vorhanden, und kann einfach per GUI Designer bearbeitet werden. Im Layout wird unter anderem Auf Strings zugegriffen. Diese sind als XML Datei ausgelagert:
Die Ressourcen werden durch unabhängige XML Dateien bereitgestellt. In diesen Dateien erhalten die einzelnen Ressourcen einen eindeutigen Namen, über den später auf die Ressource zugegriffen werden kann.

Unser Projekt nutzt im Layout in einem TextView den hello_world string:

android:text="@string/hello_world"

welcher in /res/values/strings.xml gespeichert ist:

<string name="hello_world">Hello world!</string>

Diesen Wert können wir einfach verändern, und die Änderung wird überall dort übernommen, wo die Referenz auf diese Ressource besteht.

HelloAndroid App

Unser erste App!

Wie können wir die App nun ausführen?
Ich gehe davon aus, dass ihr ein Android Gerät besitzt, die 99-android.rules Datei eingerichtet habt, und ADB bei euch funktioniert. Daher könnt ihr nun einfach das Gerät am PC anschließen und mit Rechtsklick auf das Projekt -> Run As -> Android Application die App auf dem Gerät installieren und ausführen.
Auf dem Gerät muss das Android Debugging eingestellt werden:
Systemeinstellungen -> Entwickleroptionen -> USB-Debugging
Und Apps von unbekannten Herausgebern müssen akzeptiert werden:
Systemeinstellungen -> Sicherheit -> Unbekannte Herkunft

Die App wird nun installiert und gestartet, in der DDMS Ansicht seht ihr Details über das Gerät wie laufende Prozesse / Threads, den Systemlog Logcat, und vieles mehr.
Ihr müsst noch nicht alles verstehen, wichtig ist, dass wir unsere erste App ,,programmiert“ haben. Das nächste mal werden wir uns genau ansehen, wie das Projekt aufgebaut ist, damit wir auch aktiv daran arbeiten können.

Das gesamte Projekt ist wie immer über GitHub erhältlich.

(PS: Bald kommt auch ein Tutorial über Git(Hub), damit ihr meine Projekte Klonen/Forken könnt und auch selbst Projekte anlegen könnt.)
MfG
Damon Dransfeld

Dieser Eintrag wurde veröffentlicht in Android, Handy
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.

2 Kommentare

  1. Erstellt am 25. Juni 2014 um 21:41 | Permalink zum Kommentar

    When I originally left a comment I appear to have clicked on the -Notify
    me when new comments are added- checkbox and from now on whenever a comment is added I recieve four
    emails with the same comment. There has to be a way you
    are able to remove me from that service? Many thanks!

  2. Erstellt am 4. April 2015 um 18:35 | Permalink zum Kommentar

    Excellent web site you’ve got here.. It’s difficult
    to find high-quality writing like yours nowadays. I really appreciate individuals like you!

    Take care!!

Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>