Posted on 4 Comments

Installing Android Lollipop 5.1.1 on Samsung Galaxy S2 GT-i9100

Android Robot Logo

The Samsung Galaxy S2 GT-i9100 is still one of the most popular smartphones today. Although, official Android upgrades have been discontinued for this model it is quite easy to install Android Lollipop 5.1 on Samsung Galaxy S2 GT-i9100 using Cyanogenmod 12.1. This post describes the steps needed to install Android Lollipop 5.1 based on an existing Cyanogenmod setup, e.g. CM 11. Additionally, it shows which Google Apps package (“gapps”, Google Play Services) is supported for this setup and guides you through the processing of setting it up correctly.

Backup data

Before flashing the Cyanogenmod 12.1 ROM on your Samsung Galaxy S2 make sure to backup for data. We are going to format /system and all caches, thus erasing your user data and previous settings. Also, in order to install Android Lollipop 5.1 using Cyanogenmod 12.1 on your Galaxy S2 your device needs to be rooted. Have a look at a previous post Installing Android Jelly Beans on HTC Desire Bravo which is still valid to root your Samsung Android device. In case you don’t have Cyanogenmod installed on your Samsung Galaxy S2 GT-i9100 have a look the official CM installation guide for the Samsung Galaxy S2 first before continuing.

Install Android Lollipop on Samsung Galaxy S2 GT-i9100

Once you’ve backed up your data download the latest Cyanogenmod 12.1 nightly for the Samsung Galaxy S2:

and save it to your SD-card. Then, download the latest TK GApps Pico Modular Package:

Make sure to choose the Pico Modular Package as the Samsung Galaxy S2 has some memory constraints that probably will lead to errors for other package types. Don’t worry, the Pico Modular Package has everything you need to use your favorit Google services, such as Google Play Services and Google Play Store but in addition does not install all of Google’s applications you might not need. Below you find a comparison chart of the different TK Modular Packages available to get an overview of the applications available in the various packages:


Next, boot into Recovery mode (hold Home button, Volume up and Power simultaneously) of your existing CM 11 setup and execute the following steps:

Note: Make sure to backup your data first! Your settings and user data will be lost by executing the following steps!

  1. Wipe data/factory reset
  2. Wipe cache
  3. Mounts and storage => format /system
  4. Advanced => Wipe dalvik cache
  5. Install zip => Choose the CM 12.1 Nightly zip file you downloaded previously from your SD card
    1. do not reboot once finished
  6. Install zip => Choose the TK GApps zip file previously downloaded from your SD card
  7. Reboot

The first reboot will take some time, so don’t worry. After the reboot you now should have a working Android Lollipop 5.1 with compatible Google Apps on your Samsung Galaxy S2 GT-i9100! Simple, isn’t it?

Possible issues / hints

Do not use the Google Apps package officially provided by Cyanogenmod:


These will not work and you will end up with a message saying

Google Play Services, which some of your applications rely on, is not supported by your device. Please contact the manufacturer for assistence.

Also, you will possibly end up with a lot of crashes of Google Play Services and applications depending on this framework, like

“” and Google Apps has stopped working

Instead, use the TK Pico Modular Package as explained above. In case you get an error message while trying to flash TK GApps Pico Modular Package saying

* Incompatible GApps currently installed

make sure to wipe data and format /system first as explained above. TK Gapps can only be installed on top of an existing installation of TK GApps. Thus, you must wipe your system partition before installing any TK GApps package.

In case you have additional notes feel free to leave a comment. Have fun with the latest Android Lollipop 5.1 based on Cyanogenmod 12.1 on your Samsung Galaxy S2 GT-i9100!

Posted on Leave a comment

Cyanogenmod Updater crashes when using Nightly builts

In case you are trying to update Cyanogenmod the a current Nightly built (e.g. Nightly Cm-11-20150201) chances are that the CM updater crashes before even rebooting to the actual updating process. This problem has been confirmed by PsychoI3oy on the CM forum:

Yeah, we’ve been getting a lot of crashes in the backend from cmupdater. It has been fixed and we’re doing a special re-run of cm11 nightlies starting today that will have this fix. You’ll still have to manually install this update but after that it should be fine. For anyone else having this issue: please stop hitting report on the crash button. We have plenty of reports. Thanks


The solution is pretty simple: Just do a manual update by powering up your device while pressing Home + Volume Up + Power simulateously. Of course make sure to download a recent nightly version using CM updater. As stated in various bug reports this issue will be fixed once a manual update was executed. Personally, I did not experience problems with updates using the regular CM updater approach after executing the process manually as described above.

Posted on 1 Comment

Installing Android KitKat on HTC Desire

Android Robot Logo

As shown in Installing Android Jelly Beans on HTC Desire Bravo you are able to install Android Jelly Beans on your HTC Desire by following a few simple steps. Thanks to Chromium, you are also able to install Android KitKat on your HTC Desire using a ROM called Beanstalk. The currently latest version 6 is based on Android 4.4.4 and offers great improvements (speed, memory handling, battery lifetime, etc.) over JellyBeans. In order to install this ROM you can follow all steps explained in the post Installing Android Jelly Beans on HTC Desire Bravo.

The steps needed are:

  1. root your device
  2. prepare your SD card
  3. deploy the ROM and Google Apps to your SD card
  4. install KitKat ROM
  5. optionally set up Mount2sd for better memory handling

Be sure to check Chromium’s XDA developers Beanstalk release page. Enjoy!

Posted on 50 Comments

Unfortunately, Android keyboard (AOSP) has stopped on Android

Android Robot Logo

In case you run into the problem of Android displaying the error “Unfortunately, Android keyboard (AOSP) has stopped“, thus robbing you the possibility to enter text in any form (short messages, emails, URLs in browser, etc.).

Simply follow these steps to get rid of it:

  1. Open up the menu
  2. navigate to Settings
  3. open Apps
  4. open option All
  5. find app Android keyboard (AOSP)
  6. choose option Clear data
  7. find app Dictionary Provider
  8. again choose option Clear data

That’s it! The error should be gone, enjoy!

Posted on Leave a comment

Bugfix for urbanairship-java SDK Connection Still Allocated

Apart from another bug reported in there also exists a bug related to the internal use of BasicClientConnManager for sending HTTP requests.

The Cause

When trying to send multiple HTTP requests using sullis urbanairship-java SDK (occasionally) an IllegalStateException is thrown. This is caused due to the fact that the version does not release open connections properly. You will get an exception similar to the one shown below:

java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
        at org.apache.http.impl.conn.BasicClientConnectionManager.getConnection(
        at org.apache.http.impl.conn.BasicClientConnectionManager$1.getConnection(
        at org.apache.http.impl.client.DefaultRequestDirector.execute(
        at org.apache.http.impl.client.AbstractHttpClient.execute(
        at org.apache.http.impl.client.AbstractHttpClient.execute(
        at org.apache.http.impl.client.AbstractHttpClient.execute(
        at com.urbanairship.UrbanAirshipClient.execute(
        at com.urbanairship.UrbanAirshipClient.get(
        at com.urbanairship.UrbanAirshipClient.getDevice(
        ... (and many more)

The Fix

The fix is pretty easy. First and foremost make sure to use an apache-commons-httpclient version newer or equals than 4.2, since from this version onwards it offers a releaseConnection() that makes our life much easier (link: ). Then, in add method.releaseConnection(), as shown below:

protected HttpResponse execute(HttpRequestBase method) {
  try {
    method.setHeader(new BasicHeader("Accept", "application/json"));
    HttpResponse rsp = getHttpClient().execute(method);
    checkResponse(method, rsp);
    return rsp;
  } catch (RuntimeException rtex) {
    throw rtex;
  } catch (Exception ex) {
    throw new RuntimeException(ex);

That’s it! Enjoy 🙂

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 🙂

Posted on 38 Comments

Transfer SMS messages from Nokia to Android devices

Android Robot Logo

Although there exist numerous articles explaining how to transfer SMS messages from Nokia to Android based devices, all of them required many additional programs to work. For this solution you only need to install

  1. Nokia PC Suite on your computer and
  2. SMS Importer (Lite) on your Android device

Once completed, follow these steps to transfer your SMS messages from your Nokia to your Android device.

Update: The company behind SMS Importer (Secomba GmbH) obviously removed the Lite version from the Play Store. So you can either buy the “pro” version or try to download a previous version from e.g. Please have a look at the comments below where to find the APK.

The Process

  1. In Nokia PC Suite open Nokia Communication Center and mark all messages you want to export (e.g. in Inbox)
  2. Export messages as CSV file using File -> Export and use CSV as file type

The following shows an examplary line of the CSV export file:

"sms","READ,RECEIVED","+SENDER_PHONE_NR","","","2012.08.02 05:54","","MESSAGE"

Ensure that the resulting CSV file is UTF-8 encoded. Do so by opening it with your favorite editor (e.g. Notepad++) and save it as UTF-8 content.

  1. Save CSV export file to your Android device on SD-card, without subfolders, e.g. /sdcard/sms.csv
  2. Install SMS Importer (Lite) on target Android device
  3. Configure SMS Importer (Lite) using the following settings:
    • in Main window
      • Folder: Inbox (or Sent depending on the messages you exported from Nokia PC Suite)
      • Source type: Custom
      • File: /sdcard/sms.csv
    • in Advanced preferences:
      • File format: CSV
      • in CSV Settings (double check structure with your CSV file!):
        • Encoding: utf8
        • Seperator: ;
        • Quote character:
        • Skip lines: 0
        • Sender position: 3
        • Date position: 6
        • Date format: yyyy.MM.dd HH:mm
        • Body position: 8
  4. Back in Main screen hit Menu button and start import


If you receive an “an unexpected error occurred” message on import check the advanced CSV settings again and ensure correct UTF-8 encoding as well. The SMS Importer Lite version is limited to 100 messages during import. If you have more than 100 messages (like me) simply split initial CSV file and start the same process for each file.

Posted on Leave a comment

Google Maps update fails on HTC smartphone

Android Robot Logo

Recently I wanted to upgrade Google Maps on my HTC Desire running Android 2.3.3. Unfortunately the update kept failing with the following error

failed to download update…

After several attempts to restart the download process I gave up and restarted the phone and tried again – without success. Then I realized that the automatic update was enabled for this app. So, I disabled it, restarted the phone and the update process – with success!

I have reproduced this problem on a HTC Wildfire and a HTC Legend using different Android versions. It seems like the latest version of Google Maps requires the automatic update to be disabled to run the update? At least it worked this way and I have enabled the automatic update again – let’s see if it works out of the box for the next update. UPDATE: Today another update became available, so I tried my luck. Unfortunately, I had to disable the automatic update, restart the phone and run the update manually again.