Verzeichnisstruktur der Werkzeuge

Erstmal werden die Werkzeuge zur Paketerstellung (apk) eingeordnet:
Die Verzeichnisstruktur ist folgendermassen (SDK 1.5):

android

  +add-ons

  +docs

  +platforms

    +android-1.1

    +android-1.5

      +android.jar

      +data

      +images

      +tools

        +aapt

        +aidl

        +dexdump

        +dx

        +lib

  +tools

    +lib

    +adb

    +android

    +apkbuilder

    +ddms

    +emulator

  +quellen  // Hier die neuen Quelltexte

Der Übersetzungsvorgang

Im folgenden werden die Schritte beschrieben.

Projekterzeugung activitycreator/android

Das Werkzeugprogramm activitycreator, das anhand des Packetnames Verzeichnisse und eine build.xml erzeugt hat, wird ab der Version 1.5 nicht mehr ausgeliefert. Stattdessen gibt es das Hilfsprogramm android. Ausgehend vom Verzeichnis tools:

# SDK 1.0

activitycreator --out ../quellen/HelloActivity com.example.android.helloactivity.HelloActivity

# SDK 1.5

# Targets (siehe android list targets: 1=And1.1, 2=And1.5, 3=Google APIs)

android create project -k com.example.android.helloactivity -a HelloActivity -p ../quellen/HelloActivity -t 2

Ausgabeverzeichnisse anlegen

Ausgehend vom Verzeichnis quellen/HelloActivity:

# SDK 1.0

mkdir bin

mkdir bin/classes

Klasse R.java aus Resourcen generieren

Es muss also unter HelloActivity bereits die Verzeichnisse geben: das verschachtelte src (je nach Package-Name) und res.

aapt package -m -J src -M AndroidManifest.xml -S res -I ../../platforms/android-1.5/android.jar

Übersetzung der *.java in *.class-Datei


SOURCEPATH=src/com/example/android/helloactivity

javac -classpath $CLASSPATH -sourcepath $SOURCEPATH -d bin/classes -bootclasspath ../../platforms/android-1.5/android.jar $SOURCEPATH/*.java # -target 1.5

Die .class-Dateien stehen dann unter bin/classes/com/example/android /helloactivity

Konvertierung der *.class in eine .dex-Datei


cd bin/classes  # wichtig, sonst 'trouble processing'

dx --dex -output=../classes.dex com/example/android/helloactivity/*.class

cd ../..  # wichtig: wieder zurück

Dann liegt unter bin die Datei classes.dex.

Erstellen des apk


aapt package -f -M AndroidManifest.xml -S res -I ../../platforms/android-1.5/android.jar -F bin/HelloActivity.apkx

Verpackung und Signierung mit einem Schlüssel.

apkbuilder bin/HelloActivity.apk -z bin/HelloActivity.apkx -f bin/classes.dex -rf src

Das Zwischenpaket HelloActivity.apkx kann gelöscht werden. Eine Ausgabe des endgültigen Pakets kann gemacht werden mit:

aapt list bin/HelloActivity.apk

Vorraussetzung für Installation des Pakets

Hier muss der SystemServer sowohl den 'Package Manager' als auch den 'Activity Manager' gestartet haben, und diese Dienste noch da sein (also nicht zwischenzeitlich durch den ServiceManager wieder beendet worden sein), sonst kommen die oben beschriebenen Fehler 'Error Type 1/2'.
Folgendes gibt logcat aus:

I/dalvikvm (   195): Splitting out new zygote heap

I/dalvikvm (   196): System server process 196 has been created

...

I/SystemServer(   196): Starting Package Manager.

I/SystemServer(   196): Starting Activity Manager.

... [programmierte Aktivität läuft]

I/process(   196): Sending signal PID:196 SIG:3

I/zygote(   196): Exit zygote because system server (196) has terminated.

Die Installation ist hierbei folgendermassen zu machen:

adb -e install bin/HelloActivity.apk

Übersicht mit dem Werkzeug ddms

Mit dem graphischen Werkzeug ddms hat man eine dreiteilige Ansicht:
Gegebenfalls muss man noch unter dem Menüpunkt "Preferences" die Ports richtig einstellen, so dass die Prozesse des Client-Emulators erkannt werden.