Skip to main content

Delving Deeper into Android: Building Ice Cream Sandwich for the Nook Color

It was only a matter of time before the siren's call lured me to install the source for Ice Cream Sandwich (ICS, Android 4) and attempt to create my own version for my Nook Color. There are two links I've been following to install ICS from its git repository and then building from the repository. I need to list several caveats before we go much futher;
  1. I am a complete novice (otherwise known as "a noob") when it comes to the use of git[1] and building Android. So I'm depending on a lot of hand-holding at this point in time, meaning reading lots of xda forum threads and wiki pages to piece together a process that works with my Fedora setup.
  2. My Dell Latitude D630 isn't some awesome build machine. It's now considered a modest little notebook powered by an Intel Core 2 Duo T7700 processor running at 2.4GHz. It took a long time to pull the git repository, and it's going to take a long time to build the project. Right now as I type this the system load is about 2.5 and both cores are running at 100%. Half of the 4GB of system memory is in use (the rest taken up by cache), with about 5MB on swap.
Building Android 4.0.3

The Adventure Begins

The three links I've been referring to so far:
  1. CM9/ICS Nightly Builds
  2. CM9 for NookColor Build Instructions
  3. [Wiki] Barnes & Noble Nook Color: Compile CyanogenMod (Linux)
The instructions, both implicitly and explicitly, assume you're using Ubuntu. Since I'm using Fedora, I have to adjust accordingly. This is what I've done so far under Fedora 14.
  1. Read all three of the links listed above at least once and in the order given. Pay particular attention to the directions of link 2 as it makes heavy reference and some changes to the Wiki directions in link 3.
  2. Go back and re-read (or read again if you skipped step 0) what I just wrote in step 0.
Now that you're thoroughly familiar with the content of the three links, I will go through all the steps I performed.
  1. Start with the Wiki link above, step 3. Install the Android SDK if you haven't already. I've had it installed for so long now on my Dell that I'd have to go back to my Android posts (see android in the category cloud to the right) for general directions and any special tips.
  2. Wiki link step "Install the Build Packages" tells you to install a series of build packages. Fedora 14 installs with nearly everything the Wiki calls for out-of-the-ISO. The exception is schedtool, which you can install with a simple 'yum install schedtool' as root. I need to note that gcc on Fedora 14 is version 4.5.1. I download and install the Java RPM from the Oracle website. For the build I have Java 1.6.0 update 31 installed, the absolute latest and greatest at this time.
  3. Wiki link step "Create Directories" assumes you're going to create the 'bin' and 'android/system' directories in your home directory. I didn't and you don't have to either. I already have an ~/Android directory with the sdk and other Android content organized underneath. So I create a build subdirectory (~Android/build) and created my bin and android/system subdirectories inside build (~/Android/build/bin and ~/Android/build/android/system).
  4. Wiki link step "Install the Repository" is the step where you fetch the repo command. The assumption is it's done in your home directory. I did this in the build subdirectory. When you change the execute permissions on the file that is placed in the bin subdirectory, make sure you add a path to the bin subdirectory to execute repo. The simplest way to do this is to step into bin and type in your shell "export PATH=`pwd`:$PATH" or "export PATH=$PWD:$PATH", it's your call. If you haven't recognized the syntax, I'm in the bash shell. For permanence you need to add this to your .bashrc (something without pwd or $PWD, where you explicitly call out the path into bin).
  5. Step back into the build subdirectory and execute the command:

    repo init -u git:// -b ics

    This basically initializes the repository environment and executes pretty fast.
  6. The next step is to create an XML file that references the nook (encore) device folder and add it to the ICS build environment. The file is android/system/.repo/local_manifest.xml, and the contents of local_manifest.xml are
    <?xml version="1.0" encoding="UTF-8"?>
      <!-- note:  no longer need to replace CM9 Trebuchet launcher with AOSP's Launcher 2 -->
        <remote name = "gh"
               fetch="git://" />
        <project path="device/bn/encore"

    Cut and paste this XML snippet into the file.
  7. In the build directory perform a full synchronize of the repository with the command

    repo sync -j16

    This took a few hours to fully execute and download. When it was finished the downloaded repository files took up some 5.6GB of disk space.
  8. When the repository sync is finished, turn on your Nook Color with CM7 and plug it into the development system. I'm using the Nook Color with CM7 on the µSDHC card I created in the prior blog post. Move to android/system/device/bn/encore and execute ./ This will download the Nook Color's proprietary binary blobs and place them in the ICS build environment for later use.
  9. Change directory to android/system/vendor/cm and execute get-prebuilts.
  10. Change directory back to android/system, and execute the following commands

    . build/
    brunch encore

    And then prepare to wait a good three to four hours for everything to build. I didn't sit with a stopwatch or start a timer. All I know is that I started this around 3pm and it finished right before 7pm. By the time it was finished the Android footprint had grown to 21GB of disk space.
After all this I am now the proud owner of my very own Android ICS file:

I'm not quite certain what to do with it at the moment. The next step for me is to learn how to create a new µSDHC with this running on my Nook Color. After all, just because it built is no guarantee it will execute properly.

I'd like to thank everyone who's worked on this so far, especially the XDA developers. Without all their heavy lifting to start with I'd have had one hell of a time just getting to this point.

[1] I am quite familiar with rcs, cvs, subversion, and ClearCase and know how to work with CM systems in a small to large development efforts. I just have no experience with git.


  1. That is one advantage of the Nook Color versus the Nook Tablet. The latter can't boot from the micro SD card. I had to root mine the hard way.


Post a Comment

All comments are checked. Comment SPAM will be blocked and deleted.

Popular posts from this blog

cat-in-a-box channels greta garbo

So I'm sitting at my computer, when I start to notice a racket in back. I ignore it for a while until I hear a load "thump!", as if something had been dropped on the floor, followed by a lot of loud rattling. I turn around and see Lucy in the box just having a grand old time, rolling around and rattling that box a good one. I grab the GX1 and snap a few shots before she notices me and the camera, then leaps out and back into her chair (which used to be my chair before she decided it was her chair).

Just like caring for Katie my black Lab taught me about dogs, caring for Lucy is teaching me about cats. She finds me fascinating, as I do her. And she expresses great affection and love toward me without coaxing. I try to return the affection and love, but she is a cat, and she takes a bat at me on occasion, although I think that's just her being playful. She always has her claws in when she does that.

She sits next to me during the evening in her chair while I sit in mi…

vm networking problem fixed

Over the weekend I upgraded to Windows 8.1, then discovered that networking for the virtual machines wouldn't work. Then I tried something incredibly simple and fixed the problem.

Checking the system I noticed that three VMware Windows services weren't running; VMnetDHCP, VMUSBArbService, and VMwareNatService. VMware Player allows you to install, remove, or fix an existing installation. I chose to try fixing the installation, and that fixed the problem. The services were re-installed/restarted, and the virtual machines had networking again.

Once network connectivity was established there was exactly one updated file for Ubuntu 13.10, a data file. This underscores how solid and finished the release was this time. Every other version of every other Linux installation I've ever dealt with has always been succeeded by boatloads of updates after the initial installation. But not this time.

Everything is working properly on my notebook. All's right with the world.

sony's pivotal mirrorless move

I'm a died-in-the-wool technologist, even when it comes to photography. I have always been fascinated with the technology that goes into manufacturing any camera, from the lenses (optics) through the mechanical construction, the electronics involved, and especially the chemistry of the film and the sophistication of the digital sensor. It's amazing that the camera can do all it's asked of it, regardless of manufacturer.

Of all the types of cameras that I've really taken an interest in, contemporary mirrorless (again, regardless of manufacturer) are the most interesting because of the challenging problems the scientists and engineers have had to solve in order to build a compact but highly functional camera. In particular I've followed the sensor advances over the years and watched image quality climb (especially with μ4:3rds) to exceed film and rival one another such that there's very little difference any more as you move from the smaller sensors such as 4:3r…