If you previously changed the default recovery mode with the ClockWorkMod version to root your phone, the Jelly Bean update might refuse to setup.
You might have been informed about the update automatically, or you can check it manually with the Software Update command in the About Device setting.
Once the update is downloaded and the telephone has rebooted in the recovery mode, the new update would probably fail with the following message:
assert failed: getprop(“ro.product.device”) == “m0” || getprop(“ro.bulid.product”) =
Luckily, a little trick can help you install this update without the fastidious process of removing the ClockWorkMod recovery and the super-user access.
Save the new update file on your computer
Once the official update is completely downloaded, do not reboot your phone immediately. A small change is needed inside the update file so that you can install it on your phone. First, you need to copy the update file to your computer. The update is located in a protected area, so you need to copy it to a location from where you can access it from the outside world. To do so, open the application Terminal Emulator and type su then confirm the switch to super-user mode.
Type cat /cache/fota/update.zip > /sdcard/update.zip
Now get this file on your computer (connect your phone with a USB cable, or send it to a FTP or WebDAV server, or even by email, pick your favorite way).
Alter the update installation script
On your computer, edit the file update.zip. I use vim editor for that, it allows me to modify directly the zip from command line, but if you are not used to this command, you can choose an friendlier editor, or maybe your desktop environment already includes adequate association if you click on the zip file.
The file to alter is /META-INF/com/google/android/updater-script
The first lines of the file look like:
mount("ext4", "EMMC", "/dev/block/mmcblk0p9", "/system"); assert(file_getprop("/system/build.prop", "ro.build.fingerprint") == "samsung/m0xx/m0:4.0.4/IMM76D/I9300XXBLH3:user/release-keys" || file_getprop("/system/build.prop", "ro.build.fingerprint") == "samsung/m0xx/m0:4.1.1/JRO03C/I9300XXDLJ2:user/release-keys"); assert(getprop("ro.product.device") == "m0" || getprop("ro.build.product") == "m0"); ui_print("Verifying current system...");
Remove this line:
assert(getprop("ro.product.device") == "m0" || getprop("ro.build.product") == "m0");
And save the new file.
Install the update to Jelly Bean
Copy back the freshly modified update.zip file into the /sdcard directory of you phone and restart in recovery mode. To do so, shut down you device, count up to ten, then start it again by pushing simultaneously the Volume Up, Home and Power keys. Your phone should boot into ClockWorkMod recovery. Install the update from the file /sdcard/update.zip. Insist if a invalid signature is detected, because by altering the file you have changed the checksum of the update archive.
Once the update process is finished, reboot your phone and let it activate the new update (the boot could take two to three minutes, don’t panic!).
Now check in the About Device menu of the settings that your S3 is now happily running android version 4.1…