Sunday, August 19, 2012

My Android Journey from ICS to JB (and back)

So, the other day I decided to upgrade the ROM on my trusty old Samsung Fascinate to the latest Jelly Bean offering from the AOKP crowd.  It turns out it was quite an ordeal, so I thought I'd detail the steps I took and the mistakes I made in the hope that someone might benefit. At the very least, maybe you can learn what NOT to do.
Challenge .. accepted.

So the first thing I did was download Steve Spear's latest test ROM, dated August 12.  Then I found a JB version of the google apps package on, and figured that would be safe, so I grabbed it, too.  Steve advised me to try the Devil's 1.1.3 kernel for JB, so I downloaded that as well.

I'm currently running AOKP Milestone 6, with the devil kernel and some of Steve's custom tweaks for Fascinate. So, I reboot into the TWRP recovery that comes with that and begin my journey.

The first thing I do, naively as it turns out, is set up a queue of 3 zip files to flash (in order): the ROM, the Google Apps package, and the kernel.  TWRP is supposed to be able to handle that sort of thing, so why not?

Because the JB ROM file apparently needs to re-partition your device when you flash it, that's why not. Also, apparently TWRP doesn't handle that very well, and leaves me in a recovery boot-loop with some error message flashing a big red exclamation point for about 1/5 of a second before rebooting. Just long enough that I realize I have no hope of actually reading it to find out what it thinks is wrong.

So, I load up Odin and nuke my phone all the way back to the stock, bloated, non-rooted Verizon EH03 Gingerbread ROM. This is the firmware you folks who don't believe in rooting your phones are currently stuck with, by the way.  So I let that boot and do its thing, which is basically a way to wipe the phone clean and start over with a clean slate. Whatever craziness was introduced by my previous error is now gone.

But, so are all the custom goodies I love so very much.  More importantly, so are the Gingerbread bootloaders required by most AOSP ROMs, so now I have to power off and Odin those separately.  At this  point, my only way back to AOSP goodness is via the ancient CWM 4 recovery with the CM7 fix. This particular file should be stored in the national archives. As old  as it is, it can still solve my problems most of the time. So I load that up and try flashing the AOKP JellyBean test ROM straight from that.

Oh hey!  Success!  Great!  Now I just have to get my google apps and the devil kernel on it.  So I reboot into the CWM-based recovery and flash the Google Apps package, reboot recovery, and flash the Devil-1.1.3 kernel, then reboot the system.

This is getting old..
The system comes up, and I sign into my google account, and everything seems good.  So I proceed to restore my apps from Titanium Backup.  Well, now .. where are my apps??  Opening TiBu, I only see system apps. None of my user-installed and paid apps are backed up!  The only place they are backed up is in the nandroid backup of my Milestone 6 install I had made before starting this little adventure .. which means I have to go back to that and run another FULL backup in TiBu.

But .. since the JB ROM re-partitioned my device again, I have to un-re-partition it to move back to Milestone 6. Which means Odin the ancient CWM recovery again, flash the old THS build 2 ICS ROM and let that boot.  Now I can put any ICS rom on my phone, so I flash the Milestone 6 ROM.  Once that boots, I have to reboot into TWRP recovery from there and restore my nandroid. 

Once that is back up, I open TiBu, and do a full backup.  Still with me?  Good.

At this point, I hadn't realized that I need to flash the JB ROM in the Ancient Recovery, so I encounter another recovery loop after trying to flash it in TWRP.  This time, though, instead of going back to stock, I Odin the Ancient Recovery and use that to flash the JB ROM.  After that, use the new JB recovery to flash Google Apps and Devil kernel.

Now, I launch TiBu again and restore all my apps, but without data.  This goes well.  But I have a few apps that I really have to preserve their data, so I restore only those (there are 5 of them out of 80+).  TiBu asks me for my encryption password to access the data, so I enter it.

It doesn't work. I think maybe I used a different one .. so I try a few more of my standard passwords thinking surely one of them must be right.  But no. TiBu refuses to decrypt my data.  So, instead of restoring from the backup, I decide to try and restore the data from the nandroid I had made. I was thinking that maybe TiBu would be smart enough to handle this in a compatible way between the two ROMs, but I was wrong.  With their important data restored, every app in question now force-closes immediately on execution.  So .. back to MS6 .. again.

Once I had fully restored the MS6 nandroid, I decided to check the apps themselves and found out how useful OI ConvertCSV is.  It allows me to export the app data to the SD card in a format that the same apps can then re-import once I have them loaded in the new ROM. This should work .. and it does.

So, now I have a nice new Jelly Bean ROM running on my ancient Fascinate, and its AWESOME. It feels much faster than ICS. No lag in the UI, even with the bloated Apex Launcher I insist on using. Everything seems perfect, like this is what Android was meant to be all along.
Accepting defeat .. this time.

.. until it randomly reboots on me twice in a matter of hours.  And did I mention that the modem dies randomly without any warning or indication?  Yeah.  I'm not trying to detract from the awesome work the guys are doing with JB, but I personally can't deal with that level of instability. I have a wife and young child at home who need to be able to contact me reliably, and my Fascinate is the primary way for that to happen.

So .. Once again, I restore to my trusty old AOKP Milestone 6 nandroid, and quietly admit that this whole process was all for nothing.  For now.  You can bet I will revisit JB once the critical errors I mentioned above are ironed out.