15.01
2012

In diesem kurzen Tutorial möchte ich an mein CM7 Tutorial vom letzten Jahr anknüpfen und eine aktualisierte Version bereitstellen. Wichtig ist, dass die Hardware-Anforderungen seit dem Gingerbread-Branch um einiges gestiegen sind und von daher potente Hardware erforderlich ist. Mein Tutorial bezieht sich lediglich auf Ubuntu 11.10 – für andere Versionen kann ich von daher keine anderen Aussagen treffen. Ich wende die beschriebene Konfiguration zum Kompilieren von CM9 für das LG G-Slate, Samsung Galaxy Tab 10.1N und das Samsung Galaxy Nexus an.

Zunächst müssen wir einige Packages installieren, sodass das Kompilieren überhaupt möglich wird. Ich werde in diesem Beitrag nicht noch einmal erklären, wie man das Android SDK einrichtet (und dem PATH hinzufügt). Auch werde ich nicht erklären, wie man die udev-Rules für die Geräte anlegt – dies sollte bequem per Google zu finden sein.

Zuerst benötigen wir das SUN JDK:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

Für ein 64-Bit Ubuntu bitte folgenden Packages installieren:
sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown
libxml2-utils xsltproc libx11-dev:i386 sun-java6-jdk

Für ein 32-Bit Ubuntu folgende Pakete:
sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown
libxml2-utils xsltproc sun-java6-jdk

Nun muss ein Ordner für den Source-Code und der bin-Ordner für das repo-Tool erzeugt werden. Natürlich kann man auch den Source in einen anderen Ordner als ~/android/system legen lassen:
mkdir -p ~/bin
mkdir -p ~/android/system

Inzwischen liegt repo nicht mehr auf git.kernel.org, sondern auf Googles eigener Plattform googlesource:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

Jetzt müssen noch die Rechte für repo angepasst werden:
chmod a+x ~/bin/repo

Nun wird in den zukünftigen Source-Ordner gewechselt und das Repository auf dem ICS-Branch initialisiert:
cd ~/android/system/
repo init -u git://github.com/CyanogenMod/android.git -b ics

Anschließend synchronisieren wir mit dem Branch, was beim ersten Mal mehrere Stunden dauern kann:
repo sync -j`grep 'processor' /proc/cpuinfo | wc -l`

Sollte es hierbei zu Problemen kommen, kann auch lediglich folgendes ausgeführt werden:
repo sync

Sobald der Download fertig ist, wird in den Ordner des gewünschten Geräts gewechselt (hier als Beispiel das Samsung Galaxy Nexus):
cd ~/android/system/device/samsung/maguro/

Nun beziehen wir die nötigen proprietären Dateien:
sh extract-files.sh

Wichtig ist auch die proprietären Dateien vom CM-Vendor zu ziehen:
cd ~/android/system/vendor/cm
./get-prebuilts

Nun kann der automatisierbare Bereich des Tutorials anfangen, indem wir ein Skript schreiben, welches den Code immer mit dem Repository abgleicht und das Build für euer Gerät kompiliert. Wenn ihr für ein anderes Device bauen möchtet, könnt ihr lediglich lunch eingeben und den Namen nachschauen. Wir arbeiten mit der anzahl der Cores der CPU beim kompilieren. Als Richtwert dient ein Wert: [Anzahl der Cores, (Anzahl der Cores)*2], also bei einem Quadcore-Prozessor zwischen 4 und 8 Jobs:
#!/bin/bash
PATH_TO_REPO="~/android/system/" # Dieser Ordner kann angepasst werden
cd $PATH_TO_REPO
repo sync -j`grep 'processor' /proc/cpuinfo | wc -l`
. build/envsetup.sh
lunch cm_maguro-userdebug
make clobber
time make -j`grep 'processor' /proc/cpuinfo | wc -l` otapackage

Sollte das Build nicht korrekt durchlaufen ist auch hier zu empfehlen mit nur einem Job zu kompilieren:
time make -j1 otapackage

Das generierte Zip-Archiv findet ihr nun unter ~/android/system/out/target/product/maguro/”.

Möchtet ihr jetzt noch zB unnötige/unerwünschte Dateien entfernen geht das zB folgend. Hier wird beispielhaft die chinesische und koreanische Tastatur gelöscht:
zip -d DATEINAME /system/app/OpenWnn.apk
zip -d DATEINAME /system/app/PinyinIME.apk

Solltet ihr ein noch nicht im CM-Repo befindliches CM9 kompilieren lassen wollen, geht das wie folgend:

Zuerst wechselt ihr in zu den Devices:
cd ~/android/system/device/

Wenn der Hersteller noch nicht existiert, dann erzeugt ihr diesen zuerst (Achtung: LG ist nicht der Ordner lg, sondern lge – dieser Name wird zB der build.prop des Geräts entnommen):
mkdir -p Herstellername

Nun wechselt ihr in den Ordner des Herstellers und klont das Repository (hier als Beispiel das G-Slate auf GitHub):
cd lge
git clone https://github.com/ChiefzReloaded/android_device_lge_startablet.git startablet

Anschließend wird wieder wie oben beschrieben einmalig (es sei denn es kommen noch Dateien dazu) extract-files ausgeführt.

Nun fügt ihr noch im Vendor das Gerät für CyanogenMod hinzu:
cd ~/android/system/vendor/cm/
gedit vendorsetup.sh

Und dort fügt ihr nun die folgende Konfiguration ein:
add_lunch_combo cm_startablet-userdebug

Viel Spaß beim Kompilieren. Wenn Ihr mehr Infos sucht, könnt ihr zB die Projektseite für das G-Slate auf Google Code besuchen.

Weiterführende Links:

  1. Cyanogen 7 für das N1 kompilieren
  2. Android Cloud to Device Messaging
  3. Android UI-Guidelines

2 comments so far

Kommentieren
  1. ich bekomme leider Fehler am Schluss das RomManager.apk fehlen würde …

    /vendor/cm/proprietary/RomManager.apk

    eine Idee was noch fehlen könnte ?

    getestet mit maguro (Galaxy nexus) bevor ich versuche an meinem Tablet (Galaxy 10.1 3g) zu experimentieren ;)

    [Antwort]

    Tim Antwort vom Januar 22nd, 2012 21:01:

    Hi,
    dieser Schritt fehlte im Tutorial:
    cd ~/android/system/vendor/cm
    ./get-prebuilts

    Gruß Tim :)

    [Antwort]

Dein Kommentar