[Update 11/8/2012: Tethering may not work after updating. I have not figured out why.]
My Nexus S does not get OTA updates. (I suppose this is because I bought it new and unlocked, and not from my carrier.) I had to update it to Ice Cream Sandwich manually, and it looks like I will be doing the same for Jellybean. I’m making a few notes this time.
I own a Nexus S i9020a (the model for AT&T frequencies), so I grabbed the JRO03E factory image “sojua” from Google’s factory images site. Update 12/17/2012: The JRO03E image is no longer available since 4.1.2 is now available. Just choose the appropriate souja version from Nexus Factory Images.
The md5 checksum checks out fine.
$ md5 sojua-jro03e-factory-1ac76773.tgzMD5 (sojua-jro03e-factory-1ac76773.tgz) = 39f0a4079f81882d354f228000ccf8f4
You don’t have to root the device to do this update. Just use the fastboot tool to drop the factory image onto the device. However, you will lose all your application data, so you may want to back it up.
To backup the primary contents of your device (i.e. your apps and your network settings, etc.), I enable the built-in google Backup & Reset settings. This will make the recovery step so much simpler after you install the new OS. This is highly recommended. (If you are just now turning these settings on, you’ll need to wait until everything is sync’d to the cloud before proceeding.)
Because your data will be wiped, you will lose the arrangement of all your app icons on your home screens. I suggest taking a screen shot of each home screen to speed up this task later. (Press volume-down and power buttons simultaneously to get a screen capture.)
To backup the remaining contents of your phone (including the screen shots you just made), simply mount it via USB and manually copy all the folders to a backup location on your PC. Note that if you wish to restore any of this back to your “new” phone (like photographs from your DCIM folder), you will have to copy these files manually again. Note: I don’t think your SMS messages will be backed up by this method. (There are other apps in the android market that backup all this stuff for you.)
To mount as a disk via USB, drag down the notifications bar from the top of the screen, where the USB symbol is showing as a notification. Then click the “USB connected” notification, then on the next screen, click the “Turn on USB storage” button.
This should let you see all your (user) files on your Nexus S. I simply copy everything to a backup folder on my PC. It took about 8 minutes. :-|
Now turn off USB storage:
Now it is time to put your device in fastboot mode. To do this you first need to be sure you have a copy of fastboot.exe on your path. (You need to have a copy of the Android SDK, and you’ll find fastboot.exe living in platform-tools directory.)
Confirm you have fastboot.exe on your path by executing ‘fastboot –?’:
You will also need to have your USB driver setup properly. But that is beyond the scope of this post. If you encounter a < waiting for device > message when you use the fastboot.exe tool, then you need to update your USB driver.
To get in fastboot mode, first power off your Nexus S. Then boot into fastboot mode by pressing and holding the volume-up key and continue holding it while you press and hold the power key. You will get the fastboot screen, which looks like this:
You will need an unlocked bootloader to flash a factory image. Check your fastboot screen on your device to see if it says “LOCK STATE – LOCKED” or “LOCK STATE – UNLOCKED”.
Unlocking your bootloader will wipe your device of all data. Unlock it from the command line using the fastboot oem unlock command. (you should still have your device plugged in via USB)
You will have to use the Volume-Up/Down buttons to select “Yes”, followed by the Power button to accept. The screen will not respond to touch controls. Here’s what it looks like:
And then you should be unlocked:
Now change to your unzipped “sojua-jro03e” directory. You should these files:
Have a look at the file flash-all.sh. This file contains the sequence of commands to execute, which I will execute manually, rather than rely on the timing of sleep commands. (Also, this particular machine of mine is not a unix box, so the shell script is somewhat useless as an executable.) Here’s what the shell script contains:
fastboot flash bootloader bootloader-crespo-i9020xxlc2.imgfastboot reboot-bootloaderfastboot flash radio radio-crespo-i9020uckj1.imgfastboot reboot-bootloaderfastboot -w update image-sojua-jro03e.zip
So we simply execute these one at a time, executing reboots in between, and seeing small changes to the fastboot screen each time.
fastboot flash bootloader bootloader-crespo-i9020xxlc2.img
The screen shows “Verify Image (IBPL) … Success”:
The device reboots, and shows an updated bootloader version on the fastboot screen. In the same fashion we update the radio.
fastboot flash radio radio-crespo-i9020uckj1.img
We see “Verify Image (RADIO) … Success” on the screen, and then we reboot it again
The device reboots, and then we issue the big update command, which gives us the new OS.
fastboot -w update image-sojua-jro03e.zip
When it reboots, you’re done. You’ll have Jellybean running. You’ll have to sign in with your google account and give it a few minutes to download and restore all your apps and settings. Hopefully you have some bandwidth. You’ll still have to put the app icons back on the home screens yourself. You can find those screen shots in the “Pictures/Screenshots” directory that you backed up over USB.