18.03.2016

Cyanogenmod 13 Marshmallow auf dem Galaxy S2

Seit einiger Zeit gibt es Nightlies, und kürzlich auch die Meldung über die ersten "echten" Releases von CyanogenMod Version 13, das auf Marshmallow, also Android Version 6, basiert.

Da ich immer noch ein paar alte Galaxy S2 zum Basteln und Experimentieren verwende, wollte ich mir die neueste Version natürlich gleich anschauen. Es gibt tatsächlich Enthusiasten, die für das S2 (i9100) noch neue Android-Versionen zusammen bauen.


Also ein Nightly heruntergeladen und gleich ganz mutig auf das Smartphone in den Ordner cmupdater geworfen. Danach in den Einstellungen "CyanogenMod-Update" angewählt, auf den Eintrag für CM 13 getippt, gewartet, und zack!, hatte ich CM 13 auf dem Gerät.

Das ging eigentlich ganz gut - ich war nur etwas überrascht, dass das fertig eingerichtete S2 plötzlich kein Google-Konto mehr hatte. Das Gerät war eigentlich vom letzten Update auf Lollipop noch mit einem Testkonto angemeldet, aber das war plötzlich weg.

Auch ein Factory Reset half nicht - danach hatte ich gar keine Google Apps mehr auf dem S2.

Generell denke ich mittlerweile, dass man bei einem Umstieg auf eine komplett neue Release-Version (5 -> 6) einen Factory-Reset machen sollte. Die internen Strukturen ändern sich so stark, dass man sich versteckte Probleme einhandelt, die man kaum selber finden und reparieren kann. Innerhalb einer Version (6.0 -> 6.0.1 etwa) funktioniert das Update problemlos ohne Neueinrichtung.

Etwas Forschen und Nachlesen brachte dann einige gravierende Veränderungen zutage, auf die ich prompt hereingefallen bin. Vielleicht sollte ich erst lesen und dann ausprobieren. Aber andersherum macht es mehr Spaß ;)

Eine der Veränderungen hatte ich mit Lollipop schon erledigt: die /system-Partition hatte ich damals schon mit Odin und einer .pit-Datei vergrößert, weil die vorhandenen 500 MB nicht mehr für CM 13 und die Google Apps ausreichen. Man sollte mindestens 1 GB vorsehen. Wenn man die komplette Google-Apps-Sammlung vorinstallieren will (in die Systempartition) sollte man 2 oder 4 GB einplanen. Das geht dann natürlich wieder zu Lasten des freien Speichers für Apps, Daten, Bilder, Musik etc. Kann man sich überlegen ;)

Aber eine andere Veränderung hat mir ein Bein gestellt: Cyanogenmod bringt jetzt ein eigenes Recovery mit, das bei jedem Update das bisherige Recovery ersetzt. Und das CM-eigene Recovery schafft es nicht, die Google Apps von opengapps.org zu installieren. Es erscheint eine sehr gut lesbare Fehlermeldung in dunkelblau auf schwarz (oder bin ich nur mittlerweile zu alt für sowas?), dass man TWRP als Recovery nehmen muss, um die opengapps zu installieren.

Erschwerend beim S2 und einigen anderen Galaxy-Modellen ist nun, dass es kein separates Recovery-Image zum Flashen gibt - das Recovery ist mit dem Linux-Kernel zu flashen. Es gibt zwar eine Recovery-Partition im Speicher des S2, aber die wird nicht verwendet. Alles ein wenig seltsam, aber damit muss man wohl leben ...

Der Ablauf, um ein funktionsfähiges S2 mit CM 13 zu erhalten, sieht also so aus:

Herunterladen und Flashen eines Linux-Kernels für das S2 mit einem aktuellen TWRP-Recovery. Dazu verwendet man das "isorec"-Projekt. TWRP selbst ist wegen der Geschichte mit dem Kernel (s.o.) zickig und baut selbst keine Pakete für Samsung Galaxy mehr.

Das Flashen dieses Paketes führt man am besten per "adb sideload" durch. Um das erfolgreich durchzuziehen, braucht man eine Minimalinstallation der Google Android Developer-Tools, von denen "adb" ein Teil ist. Es gibt aber auch Minimalpakete, die nur ein lauffähiges "adb.exe" mit ein paar Windows-DLLs enthalten.

Wichtig ist, dass man auf dem S2 bei einem laufenden Android in den Entwickleroptionen den Debugmodus aktiviert, damit S2 und PC sich über USB anfreunden und man den Schlüsselaustausch zwischen den Geräten bestätigen kann. Ansonsten kann man mit adb keine Dateien übertragen, wenn man im Recovery "sideload" anwählt. Beim Befehl "adb devices" erscheint dann "unauthorized" und es geht nicht weiter.

Wenn man das TWRP-Recovery geflasht hat, kann man mit "adb reboot recovery" gleich in dieses Recovery wechseln. Im TWRP wählt man nun unter "Advanced" den Punkt "ADB sideload" an, markiert die beiden Kästchen unter "wipe flash/wipe dalvik" und wischt dann zur Bestätigung den blauen Schalter nach rechts.

Nach dem Flashen eines neues Recovery-Image könnte man übrigens mit "Triangle Away" das gelbe Warn-Dreieck vom Samsung-Startbildschirm entfernen.

Jetzt wird es umständlich:
man muss in der richtigen Reihenfolge die heruntergeladene zip-Datei von CM 13 mit "adb sideload" installieren, danach die gewünschte Version der opengapps (pico, nano, micro,  etc. - je nachdem, welchen Umfang von Google Apps man vorinstallieren möchte), und danach muss man nochmals das TWRP-Recovery flashen, weil mit CM 13 ja das CM-interne Recovery mitkommt, dass das vorhandene TWRP-Recovery gerade wieder überschrieben hat.


Nach jedem "adb sideload" kehrt man mit der "<--"-Taste auf dem Touch-Screen wieder einen Schritt zurück, wählt erneut "ADB sideload" an und  wischt zum Aktivieren. Dann erneut auf dem PC den nächsten "adb sideload"-Befehl eingeben.

Es ist wichtig zu wissen, dass dadurch der "adb sideload" ebenfalls gerade wieder kaputtgegangen ist, und man das im Debugmode wieder neu autorisieren muss.

Als Erfolg zeigt sich nach dem Booten und der üblichen Wartezeit mit dem CM-Gesicht und dem "Optimieren der Apps ... x von y" unter den Eigenschaften so etwas Ähnliches wie hier rechts.

Es ist übrigens empfehlenswert, im Entwicklermenü dann den Schalter "CM recovery aktualisieren" zu kontrollieren und auszuschalten, damit man nicht nach jedem CM-Update erneut auch TWRP wieder flashen muss.

Außerdem habe ich die Beobachtung gemacht, dass das CM-Recovery nicht von der eingesteckten SD-Karte (sdcard1) installieren kann, es springt nach dem Anwählen sofort zurück ins Recovery-Hauptmenü.

[Update 20160412]
Nachtrag zum Thema "TriangleAway": die derzeitigen Nightlies von CM 13 haben ein Problem, Root-Zugang zu gewähren. Es ist nicht möglich, TriangleAway zu starten. Auf einem der S2 bin ich von Factory 4.1.2 direkt auf CM 13 gegangen, und TriangleAway funktioniert nicht. Auf einem zweiten hatte ich zuerst das Update auf CM 12.1 ausprobiert, und unter 12.1 funktioniert der Root-Zugriff. Derzeit ist es also eine Überlegung wert, das Update in zwei Schritten durchzuführen, zuerst auf CM 12.1, dann TriangleAway aufzurufen, und danach wie oben beschrieben das Update auf CM 13.