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:
- Links oben steht der Name des Emulators mit Status und Prozesse
- Unten steht das Protokoll analog zu adb -e logcat
- Rechts oben eine Liste mit Threads samt Status (timed-wait, wait, native)
Gegebenfalls muss man noch unter dem Menüpunkt "Preferences"
die Ports richtig einstellen, so dass die Prozesse des Client-Emulators erkannt
werden.