CustomROM kompilieren: Unterschied zwischen den Versionen

Aus Android Wiki
(→‎Quellcode herunterladen: Update für LineageOS)
 
(12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Anforderungen zum Kompilieren: ==
Einer der wichtigsten Pluspunkte von Android ist die Quelloffenheit. Durch die Lizenzierung unter der Apache Lizenz 2.0<ref>{{Internetquelle|titel = Licenses {{!}} Android Open Source Project|url = http://source.android.com/source/licenses.html|zugriff = 2015-12-01|werk = source.android.com}}</ref> und der öffentlichen Verfügbarkeit des Quellcodes, ist es grundsätzlich jedem erlaubt, sein eigenes Android-System zu erstellen, zu verändern und zu veröffentlichen. Daraus sind einige bekannte CustomROMs entstanden, bspw. den CyanogenMod. Das '''Kompilieren einer ROM''' ist grundsätzlich kein Hexenwerk, erfordert allerdings Zeit und Interesse, die investiert werden sollte, um auch die Hintergründe und Funktionsweisen zu verstehen. Diese Seite dient lediglich als kurze Schritt-für-Schritt-Hilfe.<ref>{{Internetquelle|titel = Custom ROM kompilieren|url = http://www.handy-faq.de/forum/custom-rom-kompilieren-t318233/|zugriff = 2015-12-01|sprache = de-DE|werk = Handy-FAQ.de}}</ref>
 
== System-Anforderungen ==


* PC oder Laptop mit mindestens 4GB RAM
* PC oder Laptop mit mindestens 4GB RAM
* Mindestens 100GB Speicherplatz
* Mindestens 100GB Speicherplatz
* 64-Bit Linux oder Mac
* 64-Bit Linux oder Mac OS
 
== Vorbereitungen zum Kompilieren: ==
 
Ins Terminal folgenden Befehl kopieren: '''sudo apt-get install git-core gnupg ccache lzop flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.8-dev python'''


Um den Quellcode der Custom ROM herunterladen zu können, muss man Repo installieren. Das tut man, indem man folgenden Befehl ins Terminal kopiert: '''<nowiki>mkdir ~/bin && curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod a+x ~/bin/repo</nowiki>'''
== Vorbereitungen ==


Nun installiert man das Programm Git, um Änderungen am Quellcode vornehmen zu können. Dafür kopiert man den Befehl '''sudo apt-get install git''' ins Terminal.  
Zum Kompilieren werden einige Tools benötigt, die in einem [[Linux]]-Derivat (bspw. Ubuntu) in der Regel in den vorinstallierten Paketquellen zu finden sind. Diese können bspw. mit diesem Befehl installiert werden, welcher in der Kommandozeile ausgeführt werden muss. Der aktuell angemeldete Nutzer muss selbstredend ein Nutzer sein, der berechtigt ist, Befehle als Root-User mit <code>[[Wikipedia:de:Sudo|sudo]]</code> sein.<syntaxhighlight lang="bash">
sudo apt-get install git-core gnupg ccache lzop flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.8-dev python git
</syntaxhighlight>Für die Quellcode-Verwaltung von [[Android]] wird eine eigens entwickelte Anwendung, mit dem Namen ''[[repo]]'', entwickelt, die die Verwaltung der verschiedenen Git-Repositories erleichtert. Die Anwendung basiert auf ''git'', dessen Client bereits mit dem obigen Befehl installiert wurde.<ref>{{Internetquelle|titel = <nowiki>git-repo -
repo - The multiple repository tool - Google Project Hosting</nowiki>|url = https://code.google.com/p/git-repo/|zugriff = 2015-12-01|werk = code.google.com}}</ref> Es wird empfohlen, repo im Heimverzeichnis des Benutzers zu installieren. Hierfür muss sichergestellt sein, dass ein '''bin'''-Verzeichnis vorhanden und in der [https://wiki.ubuntuusers.de/Umgebungsvariable#PATH-erweitern PATH]-Umgebungsvariable hinterlegt ist, in welches repo anschließend installiert wird. Die folgenden Befehle müssen einfach Zeile für Zeile in der Kommandozeile ausgeführt werden, Zeilen, welche mit ''//'' starten, sind Kommentare:<syntaxhighlight lang="bash">
// bin-Verzeichnis im Heimverzeichnis erstellen
$ mkdir ~/bin
// und zur PATH-Umgebungsvariable hinzufügen
$ PATH=~/bin:$PATH
// repo in das gerade erstellte bin-Verzeichnis herunterladen
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
// Rechte für repo setzen: a -> alle Gruppen/Nutzer; x -> ausführbar
$ chmod a+x ~/bin/repo
</syntaxhighlight>Anschließend steht der Befehl ''repo'' für den angemeldeten Nutzer global zur Verfügung.


== Kompilieren ==
== Quellcode herunterladen ==
Nun erstellt man einen Ordner, der so heißt, wie die zu kompilierende ROM. Also für Cyanogenmod gibt man '''mkdir Cyanogenmod''' ein. Nun wechselt man in den Ordner, indem man '''cd Cyanogenmod''' eingibt. Jetzt muss der Quellcode heruntergeladen werden. Dies tut man, indem man sich überlegt, welche Custom-ROM man kompilieren will.
Der Quellcode der zu kompilierenden [[CustomROM]] muss nun lokal heruntergeladen und gespeichert werden. Idealerweise wird hierfür ein entsprechender Ordner mit dem Namen des CustomROM im Heimverzeichnis des Nutzers erstellt und in diesen wechselt. Für [[CyanogenMod]] bspw.:<syntaxhighlight lang="bash">
$ mkdir ~/CyanogenMod && cd ~/CyanogenMod
</syntaxhighlight>Der Quellcode selbst wird mit Hilfe vom eben installierten Tool ''repo'' heruntergeladen und vorbereitet. Hierfür genügt es, den entsprechend richtigen Befehl der folgenden Tabelle (jeweils für Android {{Android|5.1}}im Terminal (im entsprechenden Ordner im Heimverzeichnis) auszuführen, um das Repository zu initialisieren:
{| class="wikitable"
{| class="wikitable"
!Cyanogenmod
!Custom-ROM
!<nowiki>repo init -u git://github.com/CyanogenMod/android.git -b cm-12.1</nowiki>
!Befehl für das Terminal
|-
|-
|'''BlissPop'''
|CyanogenMod
|'''<nowiki>repo init -u https://github.com/TeamBliss-LP/android.git -b lp5.1</nowiki>'''
|repo init -u <nowiki>git://github.com/CyanogenMod/android.git</nowiki> -b cm-14.1
|-
|-
|'''Resurrection'''
|BlissPop
|'''<nowiki>repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b lollipop5.1</nowiki>'''
|<nowiki>repo init -u https://github.com/TeamBliss-LP/android.git -b lp5.1</nowiki>
|-
|Resurrection
|<nowiki>repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b lollipop5.1</nowiki>
|-
|LineageOS (Nachfolger von CyanogenMod)
|repo init -u <nowiki>git://github.com/LineageOS/android.git</nowiki> -b cm-14.1
|}
|}


Jetzt gibt man den Befehl ein, der für die ROM vorgesehen wird. Ihr ladet den Quellcode nun, indem ihr '''repo sync -j18''' eingibt. Nachdem der ganze Quellcode heruntergeladen wurde, muss man einen Local_Manifest auf [[github.com]] finden, der für die ROM passt. Den gefundenen Local_Manifest kopiert ihr nun. Um den Local_Manifest einfügen zu können, muss man eine XML mit folgendem Befehl erstellen: '''cd .repo && mkdir local_manifests && cd local_manifests && nano local_manifest.xml.'''
Um den Quellcode nun herunter zu laden, muss das Repository mit synchronisiert werden. In der Kommandozeile geschieht das durch den Befehl<syntaxhighlight lang="bash">
$ repo sync -j18
</syntaxhighlight>Das Herunterladen kann je nach CustomROM und verfügbarer Internetverbindung einige Zeit in Anspruch nehmen.
 
Nahezu jedes Gerät erfordert, neben den Quellcode-Repositories, die in der sog. ''default manifest'' genannt sind, noch weitere, gerätespezifische Daten aus anderen Repositories um auf diesem speziellen Gerät problemlos zu funktionieren. Diese Abhängigkeiten können in einer sogenannten '''local manifest''' Datei hinterlegt werden, die beim Synchronisieren mit ''repo'' ebenfalls heruntergeladen werden. Die gerätespezifische ''[https://wiki.cyanogenmod.org/w/Doc:_Using_manifests local_manifest.xml]'' kann i.d.R. durch eine kurze Google-Suche gefunden werden. Diese muss anschließend in ein neu zu erstellendes Verzeichnis ''local_manifests'' im ''.repo'' Verzeichnis des Repositories kopiert werden. Ist die ''local_manifest.xml'' für das entsprechende Gerät im Heimverzeichnis gespeichert, kann dieses bspw. mit diesen Befehlen an die korrekte Stelle kopiert werden (der erste Befehl ist ein Beispiel-Befehl für das Herunterladen einer Manifest-Datei und kann, sofern die local_manifest bereits existiert, ignoriert werden):<syntaxhighlight lang="bash">
$ wget -O ~/local_manifest.xml https://raw.github.com/bruce2728/local_manifest/kitkat-mr0/bruce2728_manifest.xml
$ cd .repo && mkdir local_manifests && cd local_manifests && cp ~/local_manifest.xml ./
</syntaxhighlight>Durch das erneute Synchronisieren der Repositories werden auch die in der ''local_manifest.xml'' genannten Abhängigkeiten heruntergeladen:<syntaxhighlight lang="bash">
$ repo sync
</syntaxhighlight>
 
== Kompilieren der ROM ==
Das Kompilieren der ROM kann durch folgende Befehle vorbereitet und gestartet werden. Auch hier gilt: Die Zeit, die dies in Anspruch nimmt, hängt grundsätzlich von der Größe der ROM, sowie der zur Verfügung stehenden Rechenleistung ab.<syntaxhighlight lang="bash">
// Build vorbereiten
$ . build/envsetup.sh
// {GEARÄTENAME} ist der Name des Gerätes, ohne {}
$ breakfast {GERÄTENAME}
// Build starten
$ brunch {GERÄTENAME}
</syntaxhighlight>


Wenn ihr den Local_Manifest eingefügt habt, ladet ihr die Daten herunter, indem ihr erneut '''repo sync''' eingibt.  
Um eine weitere CustomROM aus dem Quellcode fehlerfrei zu kompilieren ist es wichtig, diese Befehle im Terminal auszuführen.
<syntaxhighlight lang="bash">
// In das CustomROM Verzeichnis wechseln
$ cd ~/CyanogenMod
// "Output" Ordner löschen
$ make clobber
// Quell-Code auffrischen, durch diverse Änderungen des Quellcodes.
$ Repo sync -j4
// Build vorbereiten
$ . build/envsetup.sh
// Build starten - {GEARÄTENAME} ist der Name des Gerätes, ohne {}
$ brunch {GERÄTENAME}
</syntaxhighlight>


== Bauen der ROM ==
== Einzelnachweise ==
Du gibst den Befehl '''. build/envsetup.sh''' <!-- Die Leerzeile zwischen dem Punkt und dem b nicht vergessen! --> ein, um alle Build-Daten bereit zu machen. Jetzt fangen wird an, indem du den Gerätenamen hinter dem Befehl '''breakfast''' eingibst. Um den Build zu starten, gibst du '''bunch *gerätenamen*''' ein
<references />

Aktuelle Version vom 16. Januar 2017, 23:44 Uhr

Einer der wichtigsten Pluspunkte von Android ist die Quelloffenheit. Durch die Lizenzierung unter der Apache Lizenz 2.0[1] und der öffentlichen Verfügbarkeit des Quellcodes, ist es grundsätzlich jedem erlaubt, sein eigenes Android-System zu erstellen, zu verändern und zu veröffentlichen. Daraus sind einige bekannte CustomROMs entstanden, bspw. den CyanogenMod. Das Kompilieren einer ROM ist grundsätzlich kein Hexenwerk, erfordert allerdings Zeit und Interesse, die investiert werden sollte, um auch die Hintergründe und Funktionsweisen zu verstehen. Diese Seite dient lediglich als kurze Schritt-für-Schritt-Hilfe.[2]

System-Anforderungen[Bearbeiten | Quelltext bearbeiten]

  • PC oder Laptop mit mindestens 4GB RAM
  • Mindestens 100GB Speicherplatz
  • 64-Bit Linux oder Mac OS

Vorbereitungen[Bearbeiten | Quelltext bearbeiten]

Zum Kompilieren werden einige Tools benötigt, die in einem Linux-Derivat (bspw. Ubuntu) in der Regel in den vorinstallierten Paketquellen zu finden sind. Diese können bspw. mit diesem Befehl installiert werden, welcher in der Kommandozeile ausgeführt werden muss. Der aktuell angemeldete Nutzer muss selbstredend ein Nutzer sein, der berechtigt ist, Befehle als Root-User mit sudo sein.

sudo apt-get install git-core gnupg ccache lzop flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.8-dev python git

Für die Quellcode-Verwaltung von Android wird eine eigens entwickelte Anwendung, mit dem Namen repo, entwickelt, die die Verwaltung der verschiedenen Git-Repositories erleichtert. Die Anwendung basiert auf git, dessen Client bereits mit dem obigen Befehl installiert wurde.[3] Es wird empfohlen, repo im Heimverzeichnis des Benutzers zu installieren. Hierfür muss sichergestellt sein, dass ein bin-Verzeichnis vorhanden und in der PATH-Umgebungsvariable hinterlegt ist, in welches repo anschließend installiert wird. Die folgenden Befehle müssen einfach Zeile für Zeile in der Kommandozeile ausgeführt werden, Zeilen, welche mit // starten, sind Kommentare:

// bin-Verzeichnis im Heimverzeichnis erstellen
$ mkdir ~/bin
// und zur PATH-Umgebungsvariable hinzufügen
$ PATH=~/bin:$PATH
// repo in das gerade erstellte bin-Verzeichnis herunterladen
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
// Rechte für repo setzen: a -> alle Gruppen/Nutzer; x -> ausführbar
$ chmod a+x ~/bin/repo

Anschließend steht der Befehl repo für den angemeldeten Nutzer global zur Verfügung.

Quellcode herunterladen[Bearbeiten | Quelltext bearbeiten]

Der Quellcode der zu kompilierenden CustomROM muss nun lokal heruntergeladen und gespeichert werden. Idealerweise wird hierfür ein entsprechender Ordner mit dem Namen des CustomROM im Heimverzeichnis des Nutzers erstellt und in diesen wechselt. Für CyanogenMod bspw.:

$ mkdir ~/CyanogenMod && cd ~/CyanogenMod

Der Quellcode selbst wird mit Hilfe vom eben installierten Tool repo heruntergeladen und vorbereitet. Hierfür genügt es, den entsprechend richtigen Befehl der folgenden Tabelle (jeweils für Android 5.1 Lollipop "Lollipop"im Terminal (im entsprechenden Ordner im Heimverzeichnis) auszuführen, um das Repository zu initialisieren:

Custom-ROM Befehl für das Terminal
CyanogenMod repo init -u git://github.com/CyanogenMod/android.git -b cm-14.1
BlissPop repo init -u https://github.com/TeamBliss-LP/android.git -b lp5.1
Resurrection repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b lollipop5.1
LineageOS (Nachfolger von CyanogenMod) repo init -u git://github.com/LineageOS/android.git -b cm-14.1

Um den Quellcode nun herunter zu laden, muss das Repository mit synchronisiert werden. In der Kommandozeile geschieht das durch den Befehl

$ repo sync -j18

Das Herunterladen kann je nach CustomROM und verfügbarer Internetverbindung einige Zeit in Anspruch nehmen. Nahezu jedes Gerät erfordert, neben den Quellcode-Repositories, die in der sog. default manifest genannt sind, noch weitere, gerätespezifische Daten aus anderen Repositories um auf diesem speziellen Gerät problemlos zu funktionieren. Diese Abhängigkeiten können in einer sogenannten local manifest Datei hinterlegt werden, die beim Synchronisieren mit repo ebenfalls heruntergeladen werden. Die gerätespezifische local_manifest.xml kann i.d.R. durch eine kurze Google-Suche gefunden werden. Diese muss anschließend in ein neu zu erstellendes Verzeichnis local_manifests im .repo Verzeichnis des Repositories kopiert werden. Ist die local_manifest.xml für das entsprechende Gerät im Heimverzeichnis gespeichert, kann dieses bspw. mit diesen Befehlen an die korrekte Stelle kopiert werden (der erste Befehl ist ein Beispiel-Befehl für das Herunterladen einer Manifest-Datei und kann, sofern die local_manifest bereits existiert, ignoriert werden):

$ wget -O ~/local_manifest.xml https://raw.github.com/bruce2728/local_manifest/kitkat-mr0/bruce2728_manifest.xml
$ cd .repo && mkdir local_manifests && cd local_manifests && cp ~/local_manifest.xml ./

Durch das erneute Synchronisieren der Repositories werden auch die in der local_manifest.xml genannten Abhängigkeiten heruntergeladen:

$ repo sync

Kompilieren der ROM[Bearbeiten | Quelltext bearbeiten]

Das Kompilieren der ROM kann durch folgende Befehle vorbereitet und gestartet werden. Auch hier gilt: Die Zeit, die dies in Anspruch nimmt, hängt grundsätzlich von der Größe der ROM, sowie der zur Verfügung stehenden Rechenleistung ab.

// Build vorbereiten
$ . build/envsetup.sh
// {GEARÄTENAME} ist der Name des Gerätes, ohne {}
$ breakfast {GERÄTENAME}
// Build starten
$ brunch {GERÄTENAME}

Um eine weitere CustomROM aus dem Quellcode fehlerfrei zu kompilieren ist es wichtig, diese Befehle im Terminal auszuführen.

// In das CustomROM Verzeichnis wechseln
$ cd ~/CyanogenMod
// "Output" Ordner löschen
$ make clobber
// Quell-Code auffrischen, durch diverse Änderungen des Quellcodes.
$ Repo sync -j4
// Build vorbereiten
$ . build/envsetup.sh
// Build starten - {GEARÄTENAME} ist der Name des Gerätes, ohne {}
$ brunch {GERÄTENAME}

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-12-01.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  2. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-12-01 (de-de).Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  3. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-12-01.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.