Sat 28 November 2009

Upgrading to CyanogenMod 4.2

CyanogenMod has just released his latest stable build featuring the newest Android 1.6 “donut” and many other improvements.

Detailed HowTos are available covering the upgrade procedure, but in most cases a factory reset including a wipe of your user date will be required for 4.2 to work. Luckily it is possible to transfer your call logs, messages, phonebook and application settings to the build without syncing your data with google.

You will need:

  • HTC-recovery-Image and CyanogenMod-ROM as detailed in the wiki
  • unyaffs
  • adb from the android SDK
  • CM Recovery 1.4 Image already installed on your phone
  • hard disk space to backup your sdcard (optional but recommended)
  • SD card reader
  • ~1h of free time
  • and of course a phone supported by CyanogenMod.

I upgraded from CyanogenMod 4.0.4 on a G1, but the following instructions should apply to upgrades from other android versions and phones as well.

One last thing: This procedure worked for my setup, which does not necessarily mean it will work for yours, so backup your data. Oh, and of course I don’t take responsibility in case something goes terribly wrong and you brick your phone. Did I mention to backup your data?

Getting started:

Follow the wiki instruction up to step 7.. After the backup is finished, shut down the phone and remove the sdcard. To have the possibility to go back to your current android setup create a backup of your microSD card with your favorite disk image software now.

If your are using Apps2sd you will need to delete all the files on your apps partition. Don’t forget to upgrade your apps partition file system to ext3 or ext4 if you have not done so already, because ext2 is known to cause performance issues on CyanogenMod >4.1.99.
The data partition on your sdcard can stay unmodified.
Next you will have to unpack the data.img from your latest nandroid backup:

Create a temporary directory to unpack the data.img to

mkdir /tmp/android_data
cd /tmp/android_data

Unpack the data.imb with unyaffs

/path/to/unyaffs /path/to/latest/nandoid/backup/data.img

Now insert the SD card back into your phone, boot it to recovery mode again and continue from step 8. of the wiki by performing a full wipe.

Finishing up:

After your phone has booted to 4.2.* and you have confirmed everything is working so far, you can transfer your user data back to the phone.

Copy your contacts to the phone using adb

cd /tmp/android_data
/path/to/adb push data/com.android.providers.contacts/databases/contacts.db /data/data/com.android.providers.contacts/databases/

Copy the database containing your SMS/MMS history

/path/to/adb push data/com.android.providers.telephony/databases/mmssms.db /data/data/com.android.providers.telephony/databases/

Proceed with the user data of your favorite applications after your have installed them:

/path/to/adb push data/favorite.app.name/ /data/data/favorite.app.name

It probably is possible to push the whole data/ directory at once, but I used the chance to clean up the stored data a bit and get rid of application data I was not using anymore.

Final note:

The upgrade to 4.2* made my G1 a lot more responsive and added a couple of nice new features. Sadly some apps are not working on Android 1.6 yet and will force close or not start at all. For example my favorite contact app Voxmobili Phonebook will randomly force close or not launch. But considering the increase in performance and the fuzzy warm feeling when using the latest and greatest incarnation if Android , the upgrade definitely was a good idea ;)

Update:

List of apps causing problems right now:

  • Andnav 2 0.8.8.2 (does not work with donut right now)
  • Phonebook 1.0.6 (does not work with donut right now)
  • k9-Mail 1.010 (has to be set up again, pushing the old setting made it force close)