Posted on 240 Comments

Installing Android Jelly Beans on HTC Desire Bravo

Android Robot Logo

Update: Please read Installing Android KitKat on HTC Desire on how to setup the new Android KitKat version on your HTC Desire.

Due to the memory limitations and the dusty stock Android version (2.2.something) I’ve decided to upgrade my HTC Desire (Bravo) to Android Jelly Beans (JB) (4.1.2). After numerous attempts to install various custom ROMS (e.g. ICS ROM by Sandvold) I’ve finally found a working JB ROM for the HTC Bravo: Jelly Bean 4.1.2 – v3.0 by vijendrahs, which exists in various versions.

Versions Tested

The following ROMs have been tested to work with this guide:

This steps descibed in this post apply to almost any ROM available, although certain configuration options might differ.

The Guide to Installing Android Jelly Beans

This post describes the steps I’ve taken in order to get a working configuration based on this JB ROM that currently (version 3.0) offers the following features:

  1. Data
  2. WiFi
  3. Bluetooth
  4. Rotation
  5. Mic
  6. Sound
  7. USB Mass Storage
  8. GPS
  9. A2SD Script
  10. Trackball wake
  11. HWA
  12. Camera
  13. Sensors
  14. Themes

Improved in 3.1: 3G connection seems to be working much more stable now. Fixed in 3.0: In version 2.8 the camera does not work as expected (flickering). A workaround is to start the camera close it and restart it again. Also, (very rarely) the 3G connection drops but switching to airplane mode and back restores it again.

UPGRADE: In case you are upgrading from a previous version please have a look at the Upgrade Android section.

Otherwise, let’s install JellyBeans on your HTC Desire!

Backup Everything!

If you happen to have any data on your phone that you might want to keep (contacts, SMS, SD card content) now is the last chance to backup your data! There exist numerous tools helping you with that, such as SMS Backup & Restore, Titanium Backup ★ root, etc. Please have a look at the Upgrade Device section below for backup and restore. Once again – In the next steps you will erase any data on your phone. I’ve warned you 🙂

Rooting the device

First and foremost you need to root your device to gain full control in order to install custom ROMs. Be aware of the fact that you most certainly void the warranty. Furthermore you might ruin your device doing so. All that said go to and follow their guide on how to root your HTC Desire. The process is pretty straight forward so you should not run into problems. If you do please check their FAQ.

Preparing SD card

Next, you will need to do some preliminary device configurations. First, in order to overcome the Desire’s internal memory limitations (512 MB internal memory) we will setup JB to use a SD card as its primary app and cache storage. This way you will be able to install far more apps then you could when only using the internal memory. Hereby, the heavy lifting is done by a2sd, which we will he using later on when actualy installing JB. So, start your (rooted) phone and boot into recovery. You can do this by pressing and holding the power and volume down button when starting the phone (as you did when rooting the phone). You will see the recovery console window as shown below: htc_desire_cwm_rec_1 There navigate to Advanced and select Partition SD card: htc_desire_cwm_rec_2 If you happen to have a 4GB SD card (like me) choose a 2096MB Ext partition (ext3, which will be the default used by a2sd) and a 64MB Swap partition. htc_desire_cwm_rec_3

NOTE: Do the partitioning a couple of times to ensure everything has been written correctly. Then restart your phone into recovery mode again and wipe data and cache (do this a couple of times too).

Copying ROM to SD card

Take out the SD card (i.e. put it in a device such as your tablet to be able to access the partitioned and wiped SD card) and copy the JB ROM onto it, e.g., together with Google Apps (latter can be done afterwards too, additionally version 3.1 and later already include Google Apps in the ROM). Please check the developer’s page for the latest ROM version.

NOTE: The title on the developer’s homepage accidently links to a different ROM than the one described here. Thus, do not download the ROM linked by the title “The fastest/stable CM10 VJ Jelly Bean 4.1.2 vX.X”, but rather scroll down on the page and download the correct version there.

Finally, put the SD card back in and restart the phone another time into recovery mode.

Installing JellyBeans

Now it’s time to actually install the custom ROM you’ve copied to your SD card. In recovery mode select “Install zip from sd card” and select the ROM (e.g. and confirm it to start the installation process. Although you can customize the setup it’s best to just go with the default settings available, i.e. be sure to leave a2sd which we will be using later again. CM will first check the installation ROM zip file for validity, format your system (SD card) and finally start the installation process. Once the installation has finished be sure to restart the phone again by simply selecting “reboot system now” from CM’s homescreen in the recovery mode. Do not boot into recovery this time – let the phone boot normally.

NOTE: Do not panic if you only see the HTC or the spinning CyanogenMod logo for a couple of minutes – this is normal behavior since various installation steps are being processed in the background. If you happen to get stuck on the logo screen first try to reboot your device. If you still can’t continue with the final setup try re-partitioning your SD card again an start over. I’ve experienced this behavior on some devices but after doing these steps a couple of times everything worked out perfectly. Also, make sure to check the data integrity of the ROM ZIP you’ve downloaded as this might cause odd behavior too. Also please have a look at the Google Apps section below for solutions when experiencing the spinning logo problem.

Setting up a2sd

You now should see your fresh JB install for the first time. If not, e.g. the phone does not boot or you get stuck at the Cyanogen Mod loading screen forever make sure to restart the installation process by wiping the data/cache and partitioning the SD card again. I’ve experienced this behavior on a SD card that was not partitioned correctly (not fully aligned). Repartioning the SD card solved this problem. Either way, hopefully you now see in the JB homescreen. There open the Terminal Emulatur and activate a2sd by entering the following commands:

a2sd install

First you will be asked if Terminal Emulator is granted root access – allow it and check remember. Second, a2sd will ask you three questions. Answer them with YES, NO and YES.

NOTE: Selecting three times YES has caused several of my installations to not function correctly, e.g. not being able to update existing apps with the error “Insufficient space”.

If you selected YES for the last question your phone should be restarting now. Let it sit for a while as a2sd will now copy existing apps and cache to your SD card, thus freeing your phone’s internal memory. Once this is done have have a working JB installation with the power of a2sd. Congratulations! 🙂 Also note that you can issue the commands listed above at any time afterwards too, e.g. after you have restored applications using Titanium Backup ★ root. Thus, sometimes you might need to force a2sd to move applications to your SD card. Simply use this command and you are good to go. Everything after this point is optional. Nevertheless, please have a look at the Final Notes section at the end of this post.

Installing Google Apps

Installing Google Apps is only required for versions prior to 3.0. So, if you happen to use a version prior to 3.0 now would be the time to do so. Download the corresponding ZIP file and copy it to your SD card. Boot into recovery again and select “Install zip from sd card” and select the ZIP file. The installer will guide you through the setup process. After a restart you will have all Google Apps installed on your phone.

NOTE: In case you are experiencing the spinning logo problem when rebooting your device after the installation make sure to not enter your Google account details in the installation wizard. If you are unable to overcome the spinning logo problem repeat the installation procedure and make to not setup your Google account when running the setup wizard for the first time.

Customizing JellyBeans

I’ve experienced that the default CPU governor (OnDemand) drains the battery rather quickly. Thus, be sure to set smartAssV2 as your default CPU governor and select to restore this setting on boot. But be aware of the fact that smartassV2 is not available for version 3.1 and above. In this case just stick with the default CPU governor. That’s everything needed to setup JB on a HTC Desire (Bravo)!

Upgrading Android

At some point you might want to upgrade your Android installation (ROM) to a newer version that probably includes bugfixed and/or improvements. Please note that upgrading your existing installation means that you will loose your current settings since it’s best to wipe your SD card and install the new ROM according to the steps previously described. Thus, you will definitely want to backup your exisiting settings, data and applications in order to restore them after the upgrade process completed. Here are the steps required to backup and restore your settings for an upgrade.

Titanium Backup ★ root

One of the most prominent backup tools for Android is Titanium Backup ★ root. So, first of all install Titanium Backup ★ root. When started for the first time make sure to allow Superuser rights and to check to Remember this setting. Moreover, a System configuration Warning will pop-up telling you that you won’t be able to restore applications due to access restrictions. To fix this go to your devices Settings -> Security -> check Unknown Sources (Allow installation of apps from unknown sources). OK the warning. Please note that in order for this setting to work you have to restart you device. Also, once the entire upgrade and restore process has been completed be sure to uncheck this option again as it poses a security hazard. After a restart open Titanium Backup again and select Backup/Restore from the menu. There you will see a list of your currently installed applications and additional Android related options. Select those apps that you want to backup. Each application selected will be backed up to your SD card in a folder named TitaniumBackup (i.e. /sdcard/TitaniumBackup). Note that applications must be closed in order to be backed up. Fortunately, Titanium Backup will force-close them for you if needed. Also, make sure to select the following options:

  • Accounts (Google accounts, etc.)
  • User Dictionary (Your custom dictionary)
  • Wi-Fi Access Points
  • Settings
  • Settings Storage 4.1.2-eng
  • Phone/Messaging Storage
  • Phone Storage
  • Messaging
  • Media Storage
  • Browser (Bookmarks)
  • Contacts Storage (if not synced with Google or some other service)
  • Calendar Storage (if not synced with Google or some other service)
  • Country, Language, Time zone

Optional settings include:

  • Downloads
  • Application Widgets
  • Bluetooth Pairings
  • Data usage
  • Downloads
  • Key Chain

Depending on the option selected from the list you can either select to backup data, the application itself and both. I recommend to select app+data to make sure you have backed up everything required after a restore. Also note that you might have to restart your device for some Android related settings. Please do so otherwise the restore process will not complete.

Final Notes

It seems like that for some applications a2sd fails to move the application data to the SD card correctly causing it to reside in the internal memory. If this is the case simply move it to the SD card by issuing as2d install in your terminal, as described in the section Setting up a2sd. In case after some time you experience a slower system wipe the cache from withing the recovery console. This should also speed up the boot process, e.g. the spinning CM logo. For a smoother experience you can optimize the wallpaper rendering process by doing the following:

  1. Go to Settings
  2. Launcher
  3. Homescreen
  4. Un-check “Scroll wallpaper”
  5. Check “Wallpaper quick render”

For wired tethering (USB tethering) to work you need to install android-wired-tether. For WiFi tethering to work please have a look at this comment in the comments section below. That’s it, enjoy your new Android version 🙂