After spending almost a year with my EVO 4G in what was essentially rooted stock condition (Fresh ROM, based on stock Sense, minus bloatware), I finally got frustrated to the point that I was ready to make the jump to CyanogenMod and see just how much better the fully unlocked stock Android experience with CM improvements is.

The Sense ROM offered by Fresh, even in its supposedly optimized form, was starting to get quite slow and would sometimes start choking for no reasons whatsoever. Whenever I was installing apps, I could forget about getting any useful response out of the phone - I had to wait till it was done in order to avoid frustration.

During my commute, seemingly at random, the 3G data would become ridiculously slow (you may have seen me complaining about it on Twitter a few times), causing annoying latency in my online activity. The 3G symbol stayed on, yet my connection was crawling at less than 100-200kbps at times (though, in its defense, at least it wasn't fully disconnecting me as was the case with both the Thunderbolt and the 3G/4G Verizon Wi-Fi hotspot, but I'll save it for another story).

But that wasn't all - I was constantly running out of internal space for apps, as average application size grew but my app partition remained the same. Installing new apps turned into a constant battle of figuring out what I'm willing to give up this time. I only had space for 3-4 games, and even with Google's official Apps2SD, there was simply not enough space for a power user.

Space is not the only thing I began to run out of - apparently, memory started getting a little tight, and both Sense and LauncherPro launchers were continuously getting killed and restarted by the OS, causing even more lag on my homescreen.

Additionally, the EVO was still stuck with Froyo, while my Nexus, custom ROM, and modern device-bearing buddies were running around with Gingerbread. May I remind you that Gingerbread is now over 6 months old too?

Here's a summary for you - I was getting pretty darn sick of what at first was a great device but turned into a clunker with an outdated OS, creaking under a moderate amount of apps.

2 months before that, I breathed new life into the wife's oh-so-slow HTC Hero by flashing CyanogenMod 7. The updated Gingerbread-based OS transformed the phone into something completely unrecognizable - it became fast (relatively) and usable. Before CM, I wanted to rip out all of my hair whenever I used it, but could now bear it without banging my head on the closest wall.

So, now it was EVO's time - after doing a nandroid backup in case I want to go back to Sense as if nothing happened, I flashed the stable CM7 release (currently, followed by the necessary Google Apps (gapps). The flashing process was absolutely painless and completed in record time - about 10 minutes from start to first boot.

Important: Before you flash CM, perform the "GPS fix" as instructed here. It only works from a Sense-based ROM, so make sure to do it while you still have it if you want to have working GPS.
Note: Go for the stable release - don't touch the nightly builds unless you're prepared to deal with bugs that make your device unusable.

wm_snap20110526_181530 wm_snap20110526_181654 wm_snap20110526_181711

Speed, snappiness, responsiveness

As you've already probably figured out, my biggest hope was that CyanogenMod 7 will bring noticeable performance improvements, due to both the fact that it runs Gingerbread vs Froyo and includes multiple optimizations.

I'm glad to report that I was not disappointed - in fact, the EVO got so fast that I could no longer recognize it anymore. It literally felt next-gen, and yet I was still holding the same familiar slightly beaten up black handset that I got so attached to in the last year.

I noticed performance improvements all around - navigating menus, starting applications, doing something when installing multiple apps at the same time, having multiple apps running in the background - almost nothing could slow the phone down anymore.

Night and day, folks. A transformation beyond all my expectations.

Automatic support for Apps2SD in most apps = free space to install more

As I mentioned earlier, I used to frequently run out of space and had to give up already installed apps when trying new ones. Get this - in CyanogenMod, almost all apps are automatically installable to SD. Rather than having to wait for developers to enable the feature explicitly, it is done globally.

Before CyanogenMod, I used to have around 50MB of free internal space, with Android no longer functioning right if I dipped below that (WTF by the way?). Now, I have about 120MB with roughly the same apps installed, and I haven't even gone through them all to make sure they're all moved to SD!

CyanogenMod Wiki explains:

CyanogenMod 6+ takes the native Google method, and improves upon it; no longer requiring the app developer to explicitly state whether an app can be moved or not, and giving that control back to the users.

The user can choose to override the developer's method and force an app to the SD card.

Limitations do exist, namely you cannot move protected apps, and those highlighted here.

Additionally, if an app is not designed to run from the SD card, it can break the app. Commonly, this includes home replacement apps, virtual keyboards, and widgets.

Latest Android version (currently Gingerbread) without having to wait for manufacturers

Because CyanogenMod is compiled from AOSP (Android Open Source Project), it is updated and merged with the latest code pretty much the moment Google lets it out. Sure, it may take a few weeks to get it to be stable enough for daily use, but it beats manufacturers' timelines every time.

In EVO's case, the stable release currently ships with 2.3.3, but if you want 2.3.4, it's available in unstable nightly builds.

And don't forget the sweet TV-off effect when powering off the screen that was added in Gingerbread - it looks so cool, it starts whole conversations!


More stable and consistent 3G data connection

One of my biggest frustrations with Sprint was the 3G connection. Since WiMax is still very spotty (I am not even going to go into how unusable it is while on the move), I am in 3G mode pretty much all the time. Or so the EVO says, and yet the connection speeds drop so low and the latency spikes up so high at times that the phone becomes almost unusable.

CM7 made this problem pretty much go away - my connection is much more stable and the weird dips have disappeared. I am no longer frustrated during my commute - the data speeds stay relatively uniform throughout the whole ride.

Another great CM feature is that it actually tells me when the phone switches to 1x from 3G. I don't remember ever seeing 1x in stock Sense, so I'm pretty sure it was made to hide it on purpose to make Sprint look better. Instead, it made me wonder why my speeds spike so much and threaten to switch to Verizon (that didn't go over so well - Verizon's coverage while moving around was way worse).

Here are my mobile network settings that I found give the most stable connection:


Painless Wi-Fi tethering built-in

No more carrier tether apps, no more Android Wi-Fi tether, which started to get kind of buggy lately - just pure Gingerbread Wi-Fi tethering built right into the OS (which normally gets disabled by carriers).

It's simple, it is secure, it works well, and I can use any power control widget that supports a native Wi-Fi Tether switch, including the one bundled with CM (see below).

The 2 features I kind of miss are MAC whitelisting and a disconnect timer that would kill the Wi-Fi hotspot after a period of inactivity. The first one is not really that essential, since I'm using WPA2, and I can live without the second for the time being.

wm_snap20110526_223130 wm_snap20110526_223141

Quick controls in the notification bar

I used to be a fan of ExtendedControls, which allowed me to place flexible power control widgets anywhere I wanted. However, lately it became so buggy that it became completely useless. In CyanogenMod, you get a power control widget that's almost just as flexible and built right into the notification dropdown.

Sure, it doesn't shrink 10 buttons into the 4x1 space, but it turns them into a horizontal slider instead. Come to think of it, that's exactly what I want in my power widget - lots of properly clickable buttons. CM lets me configure which ones show up, including the Wi-Fi tether switch that I mentioned above, as well as their order. And unlike ExtendedControls, everything works. Simple and robust.


A whole new 2nd notification LED

Oh boy, was I surprised to find out my EVO 4G actually has a 2nd LED (on the right) that can glow green and amber! Did you know this? I sure didn't, as it was never activated in the stock Sense ROM.

The 2nd LED actually glows softly and is used by default for notifications, leaving the regular blinking one for battery charging. Absolutely awesome.


Battery percentage in the top right of the notification bar

In stock ROMs there is no way to get the exact battery percentage to show up on the top right, next to the clock. You have to get separate widgets, that waste precious space in the notification bar and duplicate the functionality that should have been there from the start.

CyanogenMod to the rescue!


Built-in SetCPU-like functionality

Want to tweak advanced CPU-related settings? CyanogenMod comes with a CPU tweaker built right in. You can:

  • set max CPU clock speed
  • set min CPU clock speed
  • change governor profiles (presets optimized for performance, battery life, and everything in the middle)

Swipe-away notifications

A hidden and unexpected gem, CM supports Palm Pre style swipe-away notifications. Got a notification you want to get rid of without clicking into it? Just swipe it away left to right.

The only problem is that it is not very sensitive, so it takes me quite a few swipes that sometimes result in clicks. I'm looking forward to improvements in this area in the future, if someone from the CM team is reading.

No bloatware

Ah, the bliss of Stock Android OS - not only is it fast, but it comes with no carrier crapware or custom UIs that can both have negative side-effects on battery life, performance, and your overall satisfaction. Bye-bye, Sense, I'll hardly miss you.

Revoking permissions

Added in the latest nightlies (this is not in the stable ROM just yet), fine-grained permission revocation satisfies even the most paranoid among you. Want to deny Internet permissions on a per-app basis? No problem. No access to contacts? You got it.

Of course, there is a downside to this solution - apps that expect certain permissions they've declared might crash, and it's up to you to decide whether you're willing to live with that or not.

See here for more details.

While the Grant/Revoke buttons are gone in the actual CM release (instead, you just click each permission to cross it out) and Spoof is not supported at all, the screenshot below from this thread should give you a good idea of what to expect.


Countless tweaks way beyond stock Android

There are a whole bunch more tweaks that I am going to bundle into a single section here. Here are some of them:

  • widgets are grouped by the application they belong to in the Add Widget menu, which results in less clutter
  • long-pressing the power widget items in the notification area goes to their respective settings
  • just like in the latest Sense on the EVO, I can select a period of time during which the phone doesn't re-engage the pattern lock
  • 180 degree rotation
  • removal of time altogether from the notification bar
  • compact carrier label in notifications
  • customize the number of recent apps when you hold Home (I upped that to 12)
  • my podcasts are no longer annoyingly interrupted and muted by notifications sounds - instead the notification sound plays together with the podcast. Amen to that!
  • you can enable long-press on the Back button to kill whatever app you're in


What about battery life?

Surprisingly, I did not see much improvement in battery life after flashing stable CyanogenMod, and it was definitely awful in the nightly. Some people report great savings, while some say it gets worse. Really, only you will be able to tell whether it works better on your device or not - they are all too different to generalize.

Launcher that keeps restarting

One of the things that pushed me to flash CM was the fact that my launchers started continuously restarting. That included Sense, LauncherPro, ADW, and Go. I was hoping that this would no longer happen in CM, but alas, it does.

My ADW EX restarts pretty often, even though the amount of available RAM hovers around 100MB. I have gone through all the settings and enabled the CM tweak that should allow launchers to stay in memory, but it did not help.

If anyone knows a solution for this, please let me know.

What do I miss from Sense?

  • the HTC keyboard is still my preferred input method, even after using SwiftKey, Swype, Thumb Keyboard, and all kinds of others. The reason is simple - it has the best typing correction I've experienced, and that includes SwiftKey. I do miss the HTC keyboard, but SwiftKey should do for now
  • certain Sense widgets, like Calendar and Weather, though a lot of good replacements exist in the Market
  • the Sense Camera app that focuses and takes a picture when you touch and hold the screen


CyanogenMod 7 has completely transformed my phone into a device that feels future-proof and next-gen. It is faster, less buggy, and has more features that I actually care about. I was relatively happy with the EVO 4G before, but now I'm ecstatic.

If you're still on the fence, like I was for a while, do yourself a favor - go to CyanogenMod and don't look back.

Bonus: Read the Wired Modders Make Android Work the Way You Want story about the rise of CyanogenMod, including an interview with Cyanogen (Steve Kondik) himself. It reads like a Biography special and is quite entertaining.