Turning RUU into de-odexed ROM
I am going to write this post to show how easy, yet time-consuming, converting an RUU into a custom, de-odexed ROM can be as long as you can follow directions. I am doing this to hopefully help with development of ROMs for people who may be a bit intimidated on doing this. Before you start, you’ll need:
- A Windows installation
- VirtualBox installed in Windows
- Ubuntu 10.04 (at least) installed in VirtualBox
- dsixda’s Android Kitchen set up properly in Ubuntu
- Java JDK installed in Ubuntu (Search openjdk in Synaptic Package Manager)
- No fear of taking your time with this
I am suggesting the above because that’s what I’ll be using for this guide. Some devs frown at the use of kitchens but de-odexing manually can be a real pain in the ass and very time consuming.
First things first, you need to have Ubuntu up and running inside VirtualBox and you’ll need to get the Android Kitchen set up properly. To do this, extract the Android Kitchen zip file you downloaded. Rename the extracted folder to just “kitchen”. Copy that folder into your Ubuntu “home” directory. The final path will be “/home/username/kitchen”. You can test this by opening Terminal and typing:
If the Android Kitchen starts, then you’re good to go. It’s that easy.
Now, going back to your Windows installation, download the RUU you want to build from. Once downloaded, you’ll need to double-click the RUU to run it. You’ll get a window that opens to allow you to continue installing the RUU. You need to not click anything there. Leaving that window open, open a Windows Explorer window. In the address bar type:
and hit enter. This will take you into your Temp directory where the rom.zip is extracted. You can now do a search for rom.zip. Once found, copy the rom.zip to another directory (ie. Desktop). You can now close out of the RUU installer.
You’ll need to now copy your rom.zip to your Ubuntu virtual machine. How you do that is up to you. The easiest way is to set up Shared Folders in VirtualBox and copy it from within Ubuntu.
Once you have this file in Ubuntu, for simplicity, copy it to your desktop. Next, you’ll need to extract it. Simply right-click the rom.zip and select “Extract Here”.
If you now open you extracted folder, you should see a bunch of .img files. The 2 we are looking for are system.img and boot-signed.img. For now, create a new folder on your desktop, we’ll call it “custom”, and copy the boot-signed.img into that folder (I usually rename boot-signed.img to boot.img). Also create a folder called “system” in the same directory. Next we need to mount the system.img so we can extract the contents into the “system” folder you just created. Back in Terminal, type:
sudo mkdir -p /mnt/temp
sudo mount -o loop ~/Desktop/rom/system.img /mnt/temp
sudo cp -r /mnt/temp/* ~/Desktop/custom/system
After several minutes, you should have a folder called “custom” on your desktop and inside of that should be “boot.img” and a “system” folder with a bunch of files and folders in it. You now need to change permissions on the folder so you can zip it up and copy it all. Back in Terminal type:
sudo chown -R username ~/Desktop/custom
Next step is to zip it all up so we can get it into the kitchen. Highlight both the “boot.img” and “system” folders, right-click them, and select “Compress”. Change the extension to .zip and click OK. Once zipped, drag (or copy) that folder into /home/username/kitchen/original_update.
Open Terminal and type:
Once the kitchen starts, you’ll need to set up a Working Folder, so select option “1″. If you only have 1 ROM zip in there you can just hit Enter. Follow through the prompts to rename your working folder if you want. I’m not going to guarantee that it will always work but it has worked for me in the past to select option “2″ from the main menu to “Add root permissions”. Moving on to de-odexing, select option “0 – ADVANCED OPTIONS”. Next, select option “11 – Deodex files in your ROM”. I usually do this by deodexing framework first and then system. If you’re de-odexing the ATT ROM, “PirateGhost” from xda clued me in that you need to temporarily remove the “com.att.vmm.sharedlib.jar” from /system/framework otherwise de-odexing will fail. When you get into the de-odexing option it will have you set your API level. The default is 10 which is Android 2.3.4 however, ICS can be 14 or 15. If on the latest 4.0.3, it’s API Level 15. Google can also help you here. If you’ve done everything right it will de-odex for 20 minutes or so depening on your hardware and should say “0 .odex files remain”. If you have any that remain, you can do them manually or not at all. Up to you on how you do it.
Since that’s basically all we’re discussing for right now on creating this ROM, we’ll continue on to building a flashable zip. Back at the main menu, select option “99 – Build ROM from working folder”. I recommend using the default “Interactive Mode”. Select yes to optimizing/zip-aligning all apks. When asked to add Updater-script to ROM, select yes. Here’s the thing with the updater-script that it builds. It’s only partially right. You need to fix the partition format section for the Vivid (or for whatever phone you’re building for). It’s best to look at some other’s scripts to see how it’s done. When asked by the wizard to sign your ROM, don’t do it. It’s not necessary. Feel free to rename it to whatever you want. After you’ve fixed the updater-script and I do mean AFTER, you can try flashing the ROM. And don’t forget to flash the boot.img as well.
There you have it. You now have a base ROM for you to work from. Obviously, this is just scratching the surface of what can be done but it’s a start.