Compilation de LineageOS (sous Docker) pour ZTE Open C

Suite à la publication de la ROM de LineageOS pour ZTE Open C par HarcKurx, j’ai voulu apprendre à la compiler moi-même, et en passant par Docker.

Création de l’image Docker

Dans les grandes lignes, il suffit de suivre les instructions de https://github.com/HacKurx/android_device_zte_kis3/blob/cm-14.1/README.md.

Mais j’ai voulu faire la compilation sous Docker, de sorte de ne pas « polluer » ma machine avec toutes les librairies à installer, tout en pouvant exploiter toutes les ressources de cette machine (filesystem, CPU, RAM). Et puis la procédure de HacKurx est pour Debian alors que ma machine est sous Ubuntu.

Bref, j’ai créé le Dockerfile suivant :

FROM amd64/debian:stretch-slim

# Add contrib (for "repo" package), and add deb-src lines in sources.list
RUN echo "deb http://deb.debian.org/debian stretch main contrib" > /etc/apt/sources.list
RUN echo "deb http://security.debian.org/debian-security stretch/updates main contrib" >> /etc/apt/sources.list
RUN echo "deb http://deb.debian.org/debian stretch-updates main contrib" >> /etc/apt/sources.list
RUN echo "deb-src http://deb.debian.org/debian stretch main contrib" >> /etc/apt/sources.list
RUN echo "deb-src http://security.debian.org/debian-security stretch/updates main contrib" >> /etc/apt/sources.list
RUN echo "deb-src http://deb.debian.org/debian stretch-updates main contrib" >> /etc/apt/sources.list

# Install all required tools and dependencies
RUN dpkg --add-architecture i386
RUN apt update
RUN apt build-dep -y gcc binutils llvm-defaults

# Workaround for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199
RUN mkdir -p /usr/share/man/man1

RUN apt install -y gcc-arm-none-eabi cmake python-dev swig ant bc proguard maven-debian-helper libemma-java libasm4-java libguava-java libnb-platform18-java libnb-org-openide-util-java libandroidsdk-ddmlib-java libmaven-source-plugin-java libfreemarker-java libmaven-javadoc-plugin-java ca-cacert curl gawk libgmp3-dev libmpfr-dev libmpc-dev git-core gperf libncurses-dev squashfs-tools pngcrush zip zlib1g-dev lzma libc6-dev-i386 g++-multilib lib32z1-dev lib32readline-dev lib32ncurses5-dev zlib1g-dev:i386 xsltproc python-mako schedtool gradle dirmngr libandroidsdk-sdklib-java eclipse-jdt libgradle-android-plugin-java android-sdk-build-tools android-sdk-platform-23 aapt lzop rsync
RUN apt install -y repo imagemagick

# Configure git (put your own name and e-mail below)
RUN git config --global user.name YourName
RUN git config --global user.email youremail@youremailprovider.tld

# Workaround for jack needing a bigger xmx
RUN echo '#See https://stackoverflow.com/questions/35579646/android-source-code-compile-error-try-increasing-heap-size-with-java-option' >>/root/.bashrc
RUN echo 'export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX :+TieredCompilation -Xmx4g"' >>/root/.bashrc

# The USER environment variable needs to be set, and it's not set by default in Docker
RUN echo 'export USER=yourname' >>/root/.bashrc

Puis on crée l’image Docker correspondante, et on peut la lancer en montant le répertoire /zte sur un répertoire de votre machine hôte :

sudo docker build -t "docker-lineageos-kis3:v1" .
sudo docker run --mount type=bind,source=/path/to/compilation_lineageOS_ZTE_Open_C,target=/zte -it --name docker-lineageos-kis3 docker-lineageos-kis3:v1

Téléchargement des sources

Dans le conteneur docker :

cd /zte
mkdir LineageOS
cd LineageOS
repo init -u git://github.com/LineageOS/android.git -b cm-14.1
curl --create-dirs -L -o .repo/local_manifests/manifest_zte_kis3.xml -O -L https://raw.githubusercontent.com/HacKurx/android_local_manifest/cm-14.1/manifest_zte_kis3.xml
repo sync

La dernière étape ci-dessus est très longue, surtout si vous n’avez pas un gros débit Internet, car cela télécharge énormément de repositories git.

Derniers patchs de HacKurx

Comme mentionné dans son README, il a fait quelques modifications supplémentaires, qui se trouvent dans un fichier patch. Je conseille de les mettre aussi :

cd /zte/LineageOS
patch -Np1 --no-backup-if-mismatch < device/zte/kis3/Add_my_modifications_without_fork.patch

Dans ce patch, il y a notamment le fait d’inclure quelques applications dans la ROM (F-Droid, Firefox Lite etc). Les fichiers .apk correspondant doivent être placés dans vendor/cm/prebuilt/common/apps/. Si on ne veut pas les mettre, il suffit de les commenter dans vendor/cm/prebuilt/common/Android.mk.

Personnellement, je n’ai laissé que F-Droid. A noter que Firefox Lite semble ne pas pouvoir être upgradé quand il est ainsi préinstallé (alors que c’est possible pour F-Droid)

Compilation

cd /zte/LineageOS
. build/envsetup.sh
brunch kis3

(la compilation est elle aussi très longue. Il faut pas mal de RAM et une machine avec un peu de puissance)

Il m’a également fallu rajouter une ligne « export DISABLE_PAX_PLUGINS=y » au début de kernel/zte/msm8610/Makefile pour que la compilation fonctionne (c’est a priori quelque chose que HacKurx a dans sa TODO-list).

Après la compilation

Une fois la compilation terminée, cela génère un fichier zip (/path/to/compilation_lineageOS_ZTE_Open_C/LineageOS/out/target/product/kis3/lineage-14.1-xxx-UNOFFICIAL-kis3.zip depuis la machine hôte) qu’on peut installer sur un ZTE Open C, en utilisant la même procédure que dans mon article précédent.

Puis on peut arrêter et supprimer le conteneur Docker :

sudo docker container stop docker-lineageos-kis3
sudo docker container rm docker-lineageos-kis3

Voire même supprimer l’image Docker si on ne compte plus l’utiliser :

sudo docker image rm docker-lineageos-kis3:v1


2 réflexions sur « Compilation de LineageOS (sous Docker) pour ZTE Open C »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *