Einleitung
Bevor wir dir den App-Erstellungs-Prozess unter Android zeigen, möchten wir dir vorher ein paar grundlegende Dinge erklären.
Jeder Programmierer beherrscht heutzutage mind. eine Programmiersprache wie Java und findet sich im Quellcode der Sprache, je nach Erfahrung, ganz gut zurecht. Eine Sprache wie Java wird auch „Hochsprache“ genannt, da sie für Menschen wesentlich leichter zu verstehen ist, als etwa Assembler- oder gar Maschinensprache. Nachfolgend siehst du dreimal das Programm „HalloWelt“ in den drei unterschiedlichen Sprachfamilien Hoch-, Assembler- und Maschinensprache:
Hochsprache: Java
public class HalloWelt { public static void main(String[] args) { System.out.println("Hallo Welt!"); } } -> Hochsprache -> Leicht verständlich für Menschen (menschennah) -> 1. Sprachebene
Assemblersprache:
DATA SEGMENT Meldung db "Hallo Welt" db "$" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA Anfang: mov ax, DATA mov ds, ax mov dx, offset Meldung mov ah, 09h int 21h mov ax, 4C00h int 21h CODE ENDS END Anfang -> Hardwarenahe Sprache -> Für Menschen weniger gut lesbar (mnemonische Symbole) -> 2. Sprachebene
Maschinensprache:
BA 0B 01 B4 09 CD 21 B4 4C CD 21 48 61 6C 6C 6F 20 57 65 6C 74 21 0D 0A 24 -> Hexadezimale Maschinensprache für den x86-Prozessor (Kann auch binär sein: z.B. 01011010) -> Für die Maschine (Prozessor, Mikrocontroller) leicht zu verarbeiten -> Für Menschen nicht zu verstehen -> 3. Sprachebene
1. Schritt: Jack-Compiler (Java-Quellcode ->Android-Bytecode)
Unter der Kompilierung versteht man den Prozess eines Tools (Compilers), den vom Programmierer eingegebenen Quellcode (*.java-Dateien) in Maschinencode (Prozessor) oder Zwischencode (Bytecode, *.class-Dateien) zu übersetzen. In Java wird Quellcode durch den Java-Compiler „javac.exe“ zunächst in einen plattformunabhängigen Bytecode (*.class-Dateien) übersetzt und dieser wiederum von einem Interpreter zur Laufzeit in Maschinencode. In Android sehen die Schritte so aus, dass zunächst ein sogenannter Jack-Compiler „Java Android Compiler Kit“ den Quellcode in Android-Bytecode überführt.
Schritt 1: Java-Quellcode (*.java-Dateien) -> JACK-Compiler (jack.jar) -> Android-Bytecode (*.dex-Dateien)
Extra-Schritt: Jill-Compiler (Java-Bytecode->Jack-Dateien)
Sofern es im Android-Projekt externe Third-Party-Libraries mit Java-Bytecode (*.class-Dateien) gibt, übersetzt diese der Jill-Compiler „Jack Intermediate Library Linker“ in Jack-Dateien (*.jack). Der zuvor erwähnte Jack-Compiler verarbeitet diese Dateien dann später weiter.
Achtung: Dieser Schritt wird wirklich nur dann ausgeführt, wenn externe Libraries vorhanden sind!
Extra-Schritt: Java-Bytecode (*class-Dateien) -> JILL-Compiler (jill.jar) -> Jack-Dateien (*.jack)
2. Schritt: Android-Runtime (Android-Bytecode->Maschinencode)
Nachdem der Jack-Compiler den Android-Bytecode (*.dex-Dateien) erzeugt hat, wird dieser zusammen mit anderen App-Bestandteilen zu einer APK-Datei zusammengefügt, auf das Zielgerät transportiert und dort installiert. Während der Installation wird nun nach dem „Ahead-Of-Time (AOT)“-Prinzip durch die Android-Runtime (ART) der Android-Bytecode in Maschinencode übersetzt.
Schritt 2: Android-Bytecode (*.dex-Dateien) -> Android-Runtime (ART) -> Maschinencode