I bought a Samsung Galaxy S3 smartphone this weekend. Last night I flashed it with the latest stable build of CyanogenMod.
I've been watching the Android ecosystem mature over the last couple of years. For reasons I can't really recall now, I opted several years ago to purchase an Apple iPhone instead of an Android phone. I've never really regretted that decision -- the iPhone is indubitably an excellent product -- but I've chaffed at many of the decisions that Apple makes on my behalf. As a long-time Linux user, I'm comfortable poking around in options screens to tweak my systems to operate in ways that I like.
The initial transition to the Galaxy S3 was fairly seamless. I've been a long-time Google Apps user, so all of my email and contacts defined in GMail simply showed up on my phone when I authenticated my account. The friction of finding where the various UI buttons were located was minimal: smartphone UI and UX design is sufficiently sophisticated now that finding the "compose" button on any screen is pretty intuitive. The biggest mental hurdle for me was getting used to the two "physical" buttons on the Galaxy S3: the "menu" button at the bottom left of the screen, and the dedicated "back" button at the bottom right of the screen. After a day of use, these buttons became second nature.
Samsung's TouchWiz interface lies atop the stock Google Android experience. I didn't find anything terribly problematic about Samsung's efforts here. While I might grumble about the quantity (and relative uselessness) of some of the pre-loaded applications, the actual interface controls were very friendly. I particularly liked the camera application's use of the entire display as viewfinder.
But the reason I bought an Android device is because I wanted the "pure" Google experience, unmarred by carrier bloat. I'm a Verizon subscriber, which means that the new Google Nexus 4 smartphone is unavailable to me. In order to truly experience the native Google experience, I am required to flash a custom firmware onto my phone. CyanogenMod is the leading contender here, so I spent several hours researching my options, and the process for each.
There is an enormous community of Android enthusiasts using and developing solutions for doing exactly what I wanted to do. I'm not trail blazing, by any stretch. Indeed, I'm actually quite late to the game, and this has caused me no small amount of frustration. The enthusiast community has developed its own lingo, and currently assumes that all users are equally familiar with the ins and outs of flashing. This presents a major hurdle to new participants like myself.
I understand the concepts behind rooting, flashing, and superuser privileges, as well the different between locked and unlocked bootloaders. I do not, however, have any immediate understanding of terms like "ODIN" or "CWM". Nor am I intimately familiar with version numbers of existing Samsung firmware, or the differences between them (or, indeed, the sequence of their releases). Many of the tutorials I've found for flashing my phone presume a level of understanding that I am demonstrably lacking. This was frustrating.
After reading several tutorials, watching a number of YouTube videos, and performing an inordinate number of Google searches, I finally found what I thought was the best process for me.
Since mine was a brand new phone, with no data on it that I didn't already have somewhere else (ie: my GMail data), I didn't feel compelled to perform any kind of backup. If you're reading this because you want to flash your phone, you'll need to decide for yourself if you need to backup anything.
Since I was using a MacBook, many of the guides I found did not pertain to me. The guide that most applied to me was Mac Root Tool for S3 [Casual for Verizon S3]. This involves a Java application that roots the phone and optionally installs an unlocked bootloader. Notably, this solution does not install the CyanogenMod custom firmware. It merely performs some (but not all!) of the steps necessary to make such an installation possible.
The instructions state:
- Open this file
- Select Root with DebugFSRoot and Do It
- Select Flash Unsecure Aboot and Do It
- Use Odin or CWM to flash kernels to your device
The first two steps were easy enough. The third step confused me for several minutes until I realized that the "Flash Unsecure Aboot" required me to scroll down in the selector list. Once located and selected, this option gave a number of dire warnings about rendering my device unusable. I spent a good chunk of time trying to confirm whether this tool would work with the current version of my phone's firmware. This required a number of visits to various Android forums, and an awful lot of scrolling up and down. Finally satisfied, I clicked the "Do It" button, and felt remarkably underwhelmed when nothing much happened.
Step 4 didn't make much sense to me. Now that I've successfully flashed my phone, I do understand what they mean, and probably could have used them to finish the deal. But on my first attempt through this process, I didn't know what to do.
With a rooted phone, I now needed to unlock the bootloader. The recommended procedure was to download an app from the Google Play store called "ez_unlock". Once installed, the app simply showed me a white screen. Clearly something was wrong. I tried steps 1 and 2 from the Casual app again, but each time the ez_unlock app simply showed me a white screen.
More Google searching revealed that the way to tell if your running device is rooted is the presence of a new application called "Super User". I looked, and indeed that application was now present. I had not previously executed it. I clicked on it. It launched. I poked around, but couldn't find anything useful to do within in.
After launching the Super User app, I then tried the ez_unlock app again. This time it worked! It's (still) not clear to me if one needs to launch Super User first, but it seems probable. At the least, it can't hurt. ez_unlock allowed me to unlock the bootloader, which means I was now ready to install a custom firmware.
From the Google Play store I installed ROM Manager, and performed an in-app purchase to get the ROM Manager Touch upgrade. (An aside: I'm more than happy to give a couple dollars to the ingenious folks who produce tools to make this process easier.) This allowed me to download the latest stable version of CyanogenMod and the latest versions of various Google applications. This all worked without a hitch. My phone rebooted, and I was delighted to see the CyanogenMod splash screen.
After three or four minutes of the CyanogenMod splash screen, my delight turned to concern. Clearly something hadn't worked correctly. Several attempts to remedy the situation proved fruitless.
More Google searching took me back to the official CyanogenMod wiki for Galaxy SIII Full Update. This page specifically recommends using a microSD card to store the CyanogenMod image. I had not done this, because I do not yet have a microSD card for my Galaxy S3.
I used Angela's phone to download the latest stable CyanogenMod for the Verizon Galaxy S3, as well as the latest version of Google Apps, and copied these files to her microSD card. I installed this card into my phone, and followed the instructions for Flashing CyanogenMod using the Recovery Method. This worked flawlessly.
After a reboot, I was presented with the CyanogenMod splash screen, and then with the setup process for new devices. I set up my device, added my Google account, and within moments had a fully functional Android 4.1 "Jelly Bean" installation.
The tl;dr moral of the story here is to use a microSD card when attempting to flash your Verizon Samsung Galaxy S3 smartphone.