App-Erstellungs-Prozess in Android

App-Erstellungsprozess: Jack and Jill
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