Wie baut man das /e/OS-ROM?
Bearbeiten
Build-Kategorien
Wählen Sie die Kategorie, die zu den von Ihnen geplanten Änderungen passt und dazu, wie Sie das Ergebnis verteilen möchten.
| Kategorie | Erlaubte Änderungen | Verteilung und Updates |
|---|---|---|
| custom | Produktidentität, Funktionen, Anwendungen oder Dienste dürfen geändert werden. | Unter einem eigenen Namen veröffentlichen und eine unabhängige Update-Infrastruktur betreiben. |
| unofficial | Änderungen sollten darauf beschränkt bleiben, die Unterstützung für das Zielgerät zu ermöglichen oder zu verbessern. Kernfunktionen und der Standard-App-Satz bleiben unverändert. | Den Build klar als inoffiziell kennzeichnen. Nightly-Builds und OTA-Updates werden nicht bereitgestellt. |
| community | Die Geräteunterstützung wird auf einem für Community-Releases geeigneten Qualitätsniveau gepflegt, verfügbare Sicherheitsupdates werden eingespielt. | Builds können über den Community-Release-Kanal veröffentlicht werden und erhalten OTA-Updates. |
| official | Das Gerät muss die Qualitätsanforderungen des Projekts erfüllen und einen offiziellen Maintainer haben. | Builds werden über den offiziellen Release-Kanal veröffentlicht und erhalten OTA-Updates. |
Die Quellen für Community- und offizielle Builds müssen auf der GitLab-Instanz des Projekts oder einer anderen vertrauenswürdigen öffentlichen Quelle wie LineageOS oder AOSP gehostet werden. Siehe Build-Status für die Release-Kanäle und Support-Level.
So bauen Sie das ROM
Docker installieren
Falls noch nicht geschehen, installieren Sie Docker.
Das Docker-Image abrufen
docker pull registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
Ihren Gerätecode finden
Der Gerätecode findet sich in der /e/OS-Geräteliste oder durch Ausführen des folgenden Befehls über ADB:
adb shell getprop ro.product.device
Arbeitsverzeichnis wählen
Wählen Sie ein Dateisystem mit Groß-/Kleinschreibung und mindestens 400 GB
freiem Speicherplatz. Setzen Sie WORK_DIR auf einen Ort in diesem
Dateisystem; alle Quelldateien, Build-Artefakte, Protokolle und
Compiler-Cache-Daten werden darunter gespeichert.
export WORK_DIR=/path/to/eos-build
mkdir -p \
"${WORK_DIR}/src" \
"${WORK_DIR}/zips" \
"${WORK_DIR}/logs" \
"${WORK_DIR}/ccache"
Optional: proprietäre Blobs extrahieren
Überspringen Sie diesen Abschnitt für den üblichen Docker-Community-Build. Der Builder verwendet die öffentlichen Manifeste und enthält standardmäßig unterstützte proprietäre Vendor-Dateien aus den öffentlichen TheMuppets-Manifesten.
Verwenden Sie diesen optionalen Schritt nur, wenn die öffentlichen Manifeste nicht die für Ihr Zielgerät benötigten Vendor-Dateien bereitstellen, oder wenn der Device-Tree, den Sie bauen, lokal extrahierte Blobs erwartet.
So extrahieren Sie Blobs von einem verbundenen Gerät:
- Verbinden Sie das Gerät per USB mit Ihrem Computer.
- Aktivieren Sie ADB und Root.
- Wechseln Sie zu
${WORK_DIR}/src/<branch>/device/<vendorname>/<my-device>. - Führen Sie das Extraktionsskript des Device-Trees aus:
./extract-files.sh
Die Blobs werden üblicherweise nach
${WORK_DIR}/src/<branch>/vendor/<vendorname>/<my-device> kopiert. Sobald sie
an Ort und Stelle sind, führen Sie den Docker-Build aus.
Den Build starten
Führen Sie den folgenden Befehl aus. Vergessen Sie nicht, <my-device> durch
Ihren Gerätecode und <branch> durch einen vorhandenen öffentlichen
Entwicklungszweig zu ersetzen.
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=<branch>" \
-e "DEVICE_LIST=<my-device>" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
Wählen Sie einen Zweig aus dem öffentlichen
e/os/android-Repository.
Umgebungsvariablen
Übergeben Sie Build-Einstellungen an docker run mit -e "NAME=value". Für
einen Standard-Gerätebuild müssen nur BRANCH_NAME und DEVICE_LIST gesetzt
werden.
| Variable | Standard | Zweck |
|---|---|---|
| BRANCH_NAME | a16 | Öffentlicher Entwicklungszweig, der gebaut werden soll. Verwenden Sie einen versionierten Zweig wie v4.2-a16 für einen reproduzierbaren Build. |
| DEVICE_LIST | leer | Gerätecodename oder durch Komma getrennte Codenamen. |
| REPO | https://gitlab.e.foundation/e/os/android.git | Manifest-Repository, aus dem die Quellen ausgecheckt werden. |
| CCACHE_SIZE | 100G | Maximale Größe des Compiler-Caches. |
| REPO_JOBS | 10 | Parallele Source-Sync-Jobs; reduzieren Sie diesen Wert bei langsamem Speicher. |
| BUILD_JOBS | logische CPUs + 2 | Parallele Android-Build-Jobs; setzen Sie einen niedrigeren Wert, um CPU- oder Speichernutzung zu begrenzen. |
| INCLUDE_PROPRIETARY | true | Unterstützte proprietäre Vendor-Dateien aus öffentlichen TheMuppets-Manifesten einbeziehen. |
| LFS_STRICT | false | Fehlschlagen, wenn ein Git-LFS-Objekt nicht heruntergeladen werden kann, statt eine Warnung aufzuzeichnen. |
| IS_EMULATOR | false | Ein Emulator-Systemabbild statt eines Geräte-OTA-Pakets bauen. |
| BACKUP_IMG | false | Ein Factory-Fastboot-Paket erzeugen, wenn das Gerät eine Factory-Flash-Konfiguration bereitstellt. |
| MINIMAL_APPS | false | Ausgewählte optionale Anwendungen aus dem Build ausschließen. |
| ENG_BUILD | false | Einen Engineering-Build mit entwicklungsorientierten Standardwerten erzeugen. |
| OTA_URL | leer | Die im Build eingebettete Update-Server-URL festlegen. |
Der vollständige Satz an Optionen und ihre aktuellen Standardwerte ist in
Dockerfile.community
definiert.
Beispiel für Fairphone 3/3+ mit dem öffentlichen /e/OS v4.2 Android-15-Zweig:
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=v4.2-a15" \
-e "DEVICE_LIST=FP3" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
-e "INCLUDE_PROPRIETARY=false" \
-e "BACKUP_IMG=true" \
-e "REPO_JOBS=2" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
REPO_JOBS=2 eignet sich für ein Festplatten-Array. Der Standardwert ist
10; verwenden Sie den Standardwert oder einen höheren Wert bei schnellem
SSD-Speicher, falls die Netzwerkverbindung mithalten kann.
Für ein Android-16-x86_64-Emulator-Image verwenden Sie das Emulator-Produkt und aktivieren die Emulator-Paketierung:
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=v4.2-a16" \
-e "DEVICE_LIST=sdk_phone_x86_64" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
-e "INCLUDE_PROPRIETARY=false" \
-e "IS_EMULATOR=true" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
Das resultierende IMG-e-…-sdk_phone_x86_64.zip ist ein Android-SDK-
Systemabbild-Archiv, kein Factory-Flash-Paket für ein physisches Gerät.
Android 16 enthält derzeit einen defekten öffentlichen AOSP-Git-LFS-Zeiger in
einem Rust-Testdaten-Archiv. Der Community-Builder zeichnet dies als Warnung
auf und fährt fort, da die Datei für das Systemabbild nicht benötigt wird.
Setzen Sie LFS_STRICT=true, wenn in Ihrer Umgebung jedes LFS-Objekt
verfügbar sein muss.
Referenz-Build-Messwerte für FP3
Diese Messwerte sind ein Beispiel, keine Mindestanforderung und keine Leistungsgarantie. Sie wurden für einen Android-15-FP3-Build auf einem Intel Core i9-9900K (8 Kerne, 16 Threads), 62,7 GiB RAM und einem RAID-1-Array aus zwei SATA-Festplatten aufgezeichnet:
| Vorgang | Gemessene Zeit |
|---|---|
| Erstes Source-Checkout mit Git LFS | Ca. 3 Std. 7 Min. (ca. 2 Std. 32 Min. für repo sync, dann 35 Min. für Git LFS) |
Fortgesetztes repo sync mit REPO_JOBS=2 | 25 Min. 59 Sek. |
Android-Build (target-files-package und otatools) | 6 Std. 19 Min. 38 Sek. |
| Vollständiger Container-Lauf einschließlich Paketierung | 6 Std. 35 Min. 54 Sek. |
| Inkrementeller Rebuild und korrigierte Paketierung | 37 Min. 21 Sek. |
Der Build nutzte bis zu etwa 15 logische CPU-Kerne und 29,4 GiB RAM. Das erste Checkout übertrug etwa 43,9 GB und schrieb etwa 336 GB auf den Datenträger. Die Checkout-Messungen beinhalten Wiederholungsversuche und sind daher kein kontrollierter Cold-Cache-Benchmark.
Referenz-Build-Messwerte für den Android-16-Emulator
Derselbe HDD-basierte Host erzeugte ein Android-16-sdk_phone_x86_64-Image
mit BUILD_JOBS=18, ohne Compiler-Cache, mit den folgenden Zeiten:
| Vorgang | Gemessene Zeit |
|---|---|
| Erstes Checkout bis zur Git-LFS-Prüfung | 4 Std. 3 Min. 25 Sek. |
| Manuelle Wiederherstellung eines defekten, nicht build-kritischen öffentlichen LFS-Objekts | Ca. 22 Min. |
| Android-Build | 6 Std. 15 Min. 34 Sek. |
emu_img_zip-Paketierung | 9 Min. 56 Sek. |
| Vollständiger Build-Container-Lauf | 7 Std. 10 Min. 23 Sek. |
Das resultierende Archiv war 1,60 GB groß. Seine Prüfsumme und ZIP-Integrität
wurden verifiziert, und es enthielt die API-36-x86_64-SDK-Metadaten,
kernel-ranchu, ramdisk.img, system.img und vendor.img. Diese
Messwerte beinhalten einen ungecachten Build auf langsamem Speicher und sind
keine Leistungsgarantien.
Build-Optionen
Sie können jetzt die standardmäßig in /e/OS installierten Anwendungen anpassen.
- Wenn Sie den Standardanwendungen zusätzliche Anwendungen hinzufügen möchten: Fügen Sie Ihre APK dem Verzeichnis android_prebuilts_prebuiltapks/ hinzu und setzen Sie die Umgebungsvariable
CUSTOM_APPSim Docker-Image entsprechend, bevor Sie bauen. - Wenn Sie einen minimalen /e/OS-Build beibehalten möchten, setzen Sie die Umgebungsvariable
MINIMAL_APPSauf true (Standard ist false). Damit werden derzeit LibreOffice Viewer, PDFViewer, Maps und Weather entfernt.
Ihr Image abrufen
Wenn Ihr Build abgeschlossen ist, finden Sie die Pakete und ihre
.sha256sum-Dateien in ${WORK_DIR}/zips/<my-device>:
- Mit
BACKUP_IMG=trueistIMG-e-…-<my-device>.zipdas Factory-Fastboot- Paket zur Installation auf einem Gerät von Grund auf. Es enthält die Partitionsabbilder, das Flash-Skript und die Fastboot-Binärdateien, wenn das Gerät eine Factory-Flash-Konfiguration bereitstellt. e-…-<my-device>.zipist das OTA-Paket für ein Update oder eine Installation über die Recovery.- Mit
IS_EMULATOR=trueistIMG-e-…-sdk_phone_x86_64.zipein Android-SDK-Systemabbild-Archiv zum Erstellen eines virtuellen Emulator-Geräts.
Überprüfen Sie die Prüfsumme, bevor Sie ein Gerätepaket flashen oder ein Emulator-Systemabbild installieren. Für gerätespezifische Installationsschritte siehe die /e/OS-Geräteliste.
Weitere Hilfe benötigt
Wenn Sie Hilfe benötigen, wenden Sie sich bitte an andere ROM-Builder, die in unserem Forum aktiv sind und inoffizielle /e/OS-ROMs bauen. Eine Internetsuche nach Anleitungen zum Bauen von Android-ROMs kann ebenfalls hilfreiche Seiten liefern.
Weitere Informationen zu unserem Docker-Image und seinen Umgebungsvariablen finden Sie hier.
Um ein Problem mit einem Build zu melden, lesen Sie bitte diese Anleitung