Big Bubbles (no troubles)

What sucks, who sucks and you suck

CyanogenMod: There and Back Again

CyanogenMod (CM) is an Android release based closely on the Android Open Source Project (AOSP) source code from Google. It offers an alternative to the stock Android experience on most vendor phones.

If none of that makes sense, stop here.

On my Samsung Galaxy S2 I9100, I migrated to CyanogenMod 10.1 in January due to frustrations with the existing stock ICS firmware, and reverted back to stock - with some regret - four months later due to the availability of an updated JB-based release from Samsung and lack of support for a key feature I required in CM. This post is a summary of what I learnt from the experience with some hopefully useful advice for others contemplating the same route. This is not a guide and you should probably call your mother at the very least before proceeding. It might be the last time you have a working phone for a start. Disclaimer: I am not a developer or an Android expert.

Why would you use CyanogenMod?

  • Because you want a ‘native’ Android experience without vendor bloat, reskinning or add-ons.
  • Because your phone has no official update based on recent Android releases (i.e. the original manufacturer has abandoned it in favour of more recent models), or you wait too long for vendor updates.
  • Because you’re the kind of person who can never settle for the default and you’re not scared of a little instability or the risk of bricking your phone.
  • Because you have an old(ish) Android phone lying around and you’re bored.

Why would you not use CyanogenMod?

  • Because you need your phone to Just Work (or some approximation thereof), and you want to be able to call the people who sold it to you if it stops working.
  • Because you know nothing about firmware, flashing, ROMs, RILs, basebands, bricking or just how little your needs matter to the CM developers.
  • Because some feature of your phone that is key to you is not supported very well/at all by CM (see below).
  • Because you don’t want to devote a small but not negligible percentage of your life to tracking nightly releases and issues. (Remember: it’s only free if your time is cheap.)

Why did I switch to CM? Because I was fed up with Samsung’s poor ICS release (4.0.3), particularly its spectacular lags and the bug that meant you couldn’t disable and re-enable wifi without chewing up most of the battery and then locking or crashing the phone. And mainly because there seemed to be no sign of a followup release to fix these issues (I’ve since learnt that you can flash a later international variant release instead of waiting for your carrier to provide one).

So your first job is to check the state of play for CM on your device. To be clear: there is currently no ‘stable’ or even ‘milestone’ release of CM 10.1 (for the Samsung Galaxy S2 at least), nor is there ever likely to be for reasons explained further below. What you get are a succession of ‘nightly’ releases with varying. but hopefully trending upwards, degrees of stability.

There used to be a ‘Known Issues’ wiki page for CM 10.1 on the Samsung Galaxy S2, but it appears to have gone away. Perhaps that’s just as well, because one of the issues it listed, just under “TV Out doesn’t work”, was “some audio features not supported”, which was sufficiently vague to be misleading. Specifically, auxiliary audio output via the official Samsung car dock does not work (as you can discover from the XDA forums). Had I known this in advance, I would not have used CM, because one of the main uses of my phone is listening to my music collection during my commute. (The official car dock is probably the killer feature for the SGS2, because once you’ve heard the audio from the auxiliary output, via the USB connector, you won’t ever want to go back to the standard headphone jack. The latter offers a much lower signal level and, presumably due to poor shielding, exhibits bad interference from the engine.)

So, if you value TV Out or aux audio from your S2, don’t use CM. Why don’t these features work? Because every Android release relies on something called the HAL (Hardware Abstraction Layer), which is code that allows it to interface with the specific hardware features of the device. For previous ICS-based releases such as CM10, the CM developers relied on integrating “binary blobs” from Samsung and hence were able to support the features of the hardware. These no longer work for Jelly Bean-based releases and, as Samsung have not released the source code for them, the CM Team Hacksung developers have had to hack together best-guess workalike substitutes. While these appear to work tolerably well - far better than they ought in the circumstances - the hardware support they offer is necessarily partial and some of the lesser-used features (especially if not used personally by any of the devs) are not supported. This affects:

  • Graphics: no Jelly Bean ‘Project Butter’ rendering due to limited GPU support (although CM10.1 is still surprisingly smooth considering this).
  • GPS: could be less accurate than stock.
  • Camera: still new features and resolutions being added, overall quality likely not as good as stock, several bugs along the way.
  • Audio: as above, and again output quality not as good as stock, plus some corner cases like the CM DSP Manager not being supported by some music players.

Note: there are many Android Jelly Bean ROM variants (Jelly Bam, ReVolt, etc.) and alternative kernels (Siyah, Dorimanx, …). If they’re based on AOSP or CM, as nearly all of them are, they will have the same issues above on Samsung Exynos-based devices.

For a glimpse of the HackSung team’s own private hell created by this situation, see this post. Or this post, in which one of the main Samsung hackers pretty much renounces the company and all their works. Moral: Samsung make great hardware but their software is a shitpile and they are unrepentant about it.

You best bet to ascertain the current state of CM is to track the tail end of the nightly discussion thread of the CM release for your device. Note that some devices like the S2 can have many minor hardware variations and model numbers; confirm that you are following the thread for your specific model, e.g. I9100, I9100G, I9100T, etc. (Yes, I followed the I9100G thread by mistake for too long.) This is visible in the thread title. For example, here’s the [ROM][GT-I9100][JB][4.2.2] CyanogenMod 10.1 official nightlies // discussion thread.

Say you decide to go ahead anyway: what do you do?

  1. Back your device up.
  2. No really, back it up.
  3. Read everything you can find about CM on your device, including the wiki, the nightly thread, the recent changelog and at least 2-3 different howto articles on installing the firmware. I used guides from and
  4. The guides I followed suggested first rooting the phone, which involves finding a download of a hacked version of your current (stock) firmware with a rooted kernel and installing that using a Windows utility called Odin, with the phone in Download Mode. This allows you to install the custom ClockWorkMod Recovery bootloader, from which you can install a CM build. However, this route is now deprecated in the CM wiki, which suggests simply installing CWM Recovery via the Heimdall utility that talks to the Download Mode on the I9100.
  5. Once CWM Recovery is installed, use the backup option to create a ‘nandroid backup’ of your device. Boot the device and copy the output archive off somewhere safe. This is your last resort, complete backup/restore point.
  6. Now you can copy the CM build files to the phone storage (internal or external SD card), plus the matching Google Apps archive (gapps), which is supplied separately because it isn’t open source. Reboot into CWM and use that to install the ZIP archives.
  7. Use the ‘Wipe disk cache’ option.
  8. Important bit: if converting from firmware of a different release tree (e.g. stock to CM or vice-versa), you must at this point use the ‘Wipe data/factory reset’ option. This will remove all the apps and user configuration from the device (though not your music or photos). For the most part, this is not a concern as the apps can be redownloaded from the Play Store and your data should be sync’ed to Google’s cloud. However, you will need to re-enter all the app-specific configuration later. This is the single biggest pain point in moving between Android ROMs, especially if you tend to tweak the config of everything you use. There are apps that can back up app configs, such as Titanium Backup - but the CM guys have specifically cautioned against them. At the very least, I suggest you install and use a password keeper app that backs up to the cloud, then you can download that first and use it to recover the login details for all your various cloud apps (Twitter, Facebook, Pocket, etc.). Memo to Google: Android 5 needs to have a central, generic cloud-based repository for application config. Note that you don’t usually need to perform a factory reset if updating to a release within the same stream (e.g. new CM nightly).
  9. Potentially, update your modem firmware. The modem (radio) is the bit that does mobile data (3G, etc.). Each Android release includes a RIL (Radio Interface Layer) library that talks to the modem. The RIL and modem versions need to match, otherwise you can experience odd signal drops and increased battery usage. So if the latest CM10.1 nightly includes (say) RIL XXLS6, you should be using modem firmware XXLS6. Install the GetRIL app and use it to check your current RIL and modem versions. If they match, sweet. Otherwise, you need to download the ZIP archive for the modem version that matches your current RIL. (Don’t let GetRIL update the RIL; i.e. you should match the modem to the current RIL rather than vice-versa, since the RIL is matched to the ROM.) You can find various download repositories of modem software in the CM threads. The version you need may be specific to your region. Like any other CM update, install the ZIP using CWM Recovery. (This is an example of the pain you avoid by sticking to stock firmware.)
  10. Keep following the CM nightly thread and changelog and occasionally update to the latest nightly, either at weekly/monthly intervals or whenever it looks like a sufficiently important or useful fix has gone in, and the feedback from the forum is basically good.

(This is intentionally not a comprehensive guide and if it reads like gibberish to you, Do Not Do This.)

Note that the CM threads on XDA are basically the Wild West and you will get pretty short shrift for any hint of entitlement or poor attitude in seeking help, particularly if it looks like you haven’t done the bare minimum to solve any problems yourself first. Understand that the CM devs are volunteers who do this for fun(?), and they don’t need outside pressure. Also, the responses to any complaints about problems with CM generally fall into one of three categories:

  • people who haven’t experienced the same problem;
  • people who have experienced the same problem and have a workaround that won’t work for you;
  • people who tell you to try ROM x or kernel y because they’re, like, sooo much better (but don’t really have anything to do with your problem).

This is not surprising, as there are sufficient variations of these devices, each with their own quirks, being managed by a wide spread of users with individual and widely varying usage patterns and ability. Obviously, you’re going to get a variety of odd errors that aren’t immediately replicable - and that the devs won’t care about anyway. If the issue is yours though - well, sucks to be you. (Similarly, the car dock audio problem remains unresolved because none of the devs use a dock and none of the users with one - including me - have sufficient time and skill to obtain the info that would make it trivial to fix.)

As a rule of thumb, any issue that appears to hit every recent poster on the forum is probably a real issue. Anything that only occurs to a small number of isolated posters probably won’t affect you - but don’t assume it definitely won’t.

What is CM like in use? If you like unvarnished Android, and most people probably would if vendors gave them the chance, it’s really, really nice. Sleek, minimalist, intuitive yet powerful. Lots of nice features, like the quick settings access. Reasonably smooth, although I found on the S2 that it was often slow to notice touchscreen taps or sometimes misinterpreted them (so that instead of your tap activating something, it merely moved it). Samsung’s ICS release was horribly laggy, usually taking a second or two to respond to any interaction, but CM generally displayed much less resistance. The Holo theming throughout and the lack of any vendor-supplied bloatware were welcome.

Why then did I abandon it? Mainly due to the aforementioned missing car audio, which clearly wasn’t going to be fixed any time soon (I don’t begrudge the developers this and wish I could have assisted). Also, I recently experienced random wifi dropouts and connection failures, while users were reporting crashes with more recent nightlies. This coincided with the availability of an official Jelly Bean stock firmware release from my local carrier (after nine months of waiting). Gritting my teeth, I reflashed back to stock and went through the tedious business of reconfiguring all my apps (note to self: take screenshots of your home screens so you can remember how they were organised before doing this). Samsung’s Touchwiz UI isn’t any prettier, but adding a third party launcher such as Apex and a widget utility like AntTek makes the phone work bearably most of the time. It is at least less laggy than the previous ICS release, and Samsung have even fixed the battery leak in the most recent Nordic release (XWLSN), although not apparently some of the random hangs and reboots. In-car audio, needless to say, is larvely - how I’ve missed it. (How can I ever use a phone without a dedicated dock or aux output now? But how can I ever put up with Samsung again??)

Would I go back to CM if the audio issue was fixed? Possibly - rather have a new phone without all this hassle though.

How do CyanogenMod and stock compare?

Speaking only for the Samsung SGS2:

  • CyanogenMod is based on JB 4.2.2, whereas stock is currently JB 4.1.2; in practice, the differences between the base releases are minor.
  • CM generally has better battery life, probably because it’s more efficient and has less crapware included.
  • Stock is smoother, but that isn’t to say CM feels rough by comparison. Subjectively, stock is more responsive once in an app, while CM switches between them quicker. CM’s touch responsiveness is slightly poorer.
  • Audio and graphics are better in stock; quelle surprise.
  • CM’s interface is much, much nicer. Vendors reskin Android for many reasons (of which creating a better design standard than Google isn’t one), none of which ultimately benefit the consumer.
  • Featurewise, I’d say they’re pretty even if not directly comparable.
  • If you’re capable of flashing it, don’t want specific features that CM doesn’t support and can find a reasonably stable nightly release without any bugs that concern you, CM is the better firmware overall.
  • There’s more chance of the CM team addressing overall stability and performance issues in a timely manner than Samsung. Neither of them are guaranteed to address your specific bug at all - but at least someone on the XDA forums will take the time to tell you they’re not interested.
  • Almost certainly, neither of them are going to support Android 5 on this device.

Update, 2013-06-12: If you want the stock firmware experience but without the bloat, you could also try NeatROM Lite. This is the way I would go if I could face the rigmarole of wipe/reconfigure again.

Other bubbles

  • The list of links I used at various points (some may be out of date).