This is an update from our last post of Building Android from Source for Nexus 7 on Ubuntu 13.04 : Step-by-Step. This time we upgrade our Ubuntu Installation to 13.10 Saucy Salamander along with the update Android Version 4.4 KitKat for the Latest Nexus 5 device code named 'hammerhead'.
UPDATE: New build instructions for Ubuntu 14.04 LTS version
As discussed in the previous post the procedure remains nearly the same. There are minor changes that would help to make this updated build work. But First:
DISCLAIMER: If you proceed on the steps provided it will surely cause damage to your Nexus 5 device and the Author of this article will not be held responsible for any losses or damages of any type caused by following the steps below.
Now for the steps.
# PC configuration to have a decent build performance:
[1._ ] Most of the commands need to run in a terminal window so we need to open it before starting any of the below steps. The easy way on Ubuntu is to press the keyboard combination Ctrl + Alt + 't' else one can also go to the app launcher icon and type "terminal"
This time the problem is that we can not use the offical Java update from Oracle.
Instead we need to use the Last java version available in the JDK1.6 SE pacakge.
To do so one needs to signup at Oracle Java website: https://login.oracle.com/mysso/signon.jsp
After sign-up and login into the Oracle website use the JDK1.6SE u46 version link to get to the download area.
Now one needs to select the correct package:
Note: If you have multiple Java installation then better ignore the last line and add it as per your requirement. We use both Java7 SE for application development and Java6 for Android. Hence we modify the path when needed.
This would update the base packages needed to compile the Android source.
This would take some time to get the complete download done and then the dependency fixes need to be applied:
After this we need to do the following linking:
This completes the installation of dependencies and necessary packages to begin our build
First lets create a local directory which would hold our executable code:
Now let us download the repo tool into this directory and apply the executable permission:
Finally adding this to the path to help us get the tool working
We are now ready to obtain the source code from Google for Android OS
Build: KRT16M
Repository Tag: android-4.4_r1
To start the download we need to first create a folder eg. android-4.4_r1
Now lets Initialize the Repository for GIT configuration
This would set up your identity that would be part of this source code checkout
Finally we can Initialize the Repository using the following command:
This command will take some time to finish as it creates the basis for the list of location from which the different components are downloaded.
Now we are ready to receive the real code:
The Vendor Specific Binaries located at :
https://developers.google.com/android/nexus/drivers
For 'hammerhead' and Android Kitkat Release download the binaries at this link:
https://developers.google.com/android/nexus/drivers#hammerheadkrt16m
Go to the android-4.4_r1 directory and Download the drivers:
Finally extract the Vendor Specific binaries by the following commands:
You need to enter the "I ACCEPT" at the end of license notices to execute the program.
Perform this for all the three files extracted above.
Now we are ready for the next big step - Compiling!
Now to select the type of device we give the following command:
This would display a menue:
Select the option '13. aosp_hammerhead-userdebug' choice by entering '13'.
Now we are ready to start the build.
Here the "-j4" switch would help to run the build on Quad core.
This process would take some time ranging from 30minutes to 3hours depending of your PC performance and configuration.
After this is done you are ready with your source to flash the image into your device.
DISCLAIMER: If you proceed on the steps provided it will surely cause damage to your Nexus 5 device and the Author of this article will not be held responsible for any losses or damages of any type caused by following the steps below.
Connect your device into the Linux PC. And give the command in the existing terminal prompt from the earlier step.
This would help you enter the bootloader mode. And change the directory to the place where the actual build image files are located
Final command that would kill the device and load your compiled image:
This would load the complete image into your device and then reboots it.
Now in order to restore the device back to its original os follow the steps outline in another post. Although this is for the Nexus 7 device the similar steps work for Nexus 5 device also.
UPDATE: New build instructions for Ubuntu 14.04 LTS version
As discussed in the previous post the procedure remains nearly the same. There are minor changes that would help to make this updated build work. But First:
DISCLAIMER: If you proceed on the steps provided it will surely cause damage to your Nexus 5 device and the Author of this article will not be held responsible for any losses or damages of any type caused by following the steps below.
Now for the steps.
[0] PC and Other Requirements:
The basic system requirement are same as stated in the earlier post.# PC configuration to have a decent build performance:
- Processor: Quad Core 2.6GHz Intel Core i5 and above
- RAM: 4GB DDR3 1066MHz and above
- HDD Space: 120GB Free (build tools + Android source + build cache)
- Internet Connection: 2mbps and above
[1] Prepare Ubuntu 13.10 for building Android
The update package requirements from Ubuntu have changed so the particular step would need some correction to help install the required packages needed to build the Android Kitkat.[1._ ] Most of the commands need to run in a terminal window so we need to open it before starting any of the below steps. The easy way on Ubuntu is to press the keyboard combination Ctrl + Alt + 't' else one can also go to the app launcher icon and type "terminal"
[1.a] Correcting and Installing Java
First thing that we need to perform is removing the Icedtea Java or OpenJDKsudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
This time the problem is that we can not use the offical Java update from Oracle.
Instead we need to use the Last java version available in the JDK1.6 SE pacakge.
To do so one needs to signup at Oracle Java website: https://login.oracle.com/mysso/signon.jsp
After sign-up and login into the Oracle website use the JDK1.6SE u46 version link to get to the download area.
Now one needs to select the correct package:
- For 64-bit Ubuntu Systems (we have the 64-bit version so we use this file):
- For 32-bit Ubuntu Systems:
chmod +x jdk-6u45-linux-x64.bin ./jdk-6u45-linux-x64.bin
echo "export PATH=$PATH :"`pwd`" >> $HOME/.bashrcThis would help to place the directory to path. Next there would be restart needed for the Terminal to enable the new path to take effect.
Note: If you have multiple Java installation then better ignore the last line and add it as per your requirement. We use both Java7 SE for application development and Java6 for Android. Hence we modify the path when needed.
[1.b] Installing the package dependencies into Ubuntu
This is a long an time taking process, where nearly 1050MByte+ data is downloaded. So be careful if you have limited bandwidth connection like ours. This might take up a lot of your Internet connection bandwidth.
sudo apt-get install git-core gnupg flex bison \
gperf build-essential zip curl \
zlib1g-dev zlib1g-dev:i386 libc6-dev \
lib32ncurses5-dev lib32ncurses5 \
lib32bz2-1.0 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 \
lib32z1-dev libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 \
tofrodos python-markdown libxml2-utils \
xsltproc readline-common \
libreadline6-dev libreadline6 \
lib32readline-gplv2-dev libncurses5-dev \
lib32readline5 lib32readline6 \
libreadline-dev libreadline6-dev:i386 \
libreadline6:i386 bzip2 libbz2-dev \
libbz2-1.0 vim libghc-bzlib-dev \
lib32bz2-dev libsdl1.2-dev libesd0-dev \
squashfs-tools pngcrush schedtool \
libwxgtk2.8-dev python
This would update the base packages needed to compile the Android source.
This would take some time to get the complete download done and then the dependency fixes need to be applied:
sudo apt-get install -f
After this we need to do the following linking:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 \
/usr/lib/i386-linux-gnu/libGL.so
This completes the installation of dependencies and necessary packages to begin our build
[2] Downloading the Google Repository tool - repo
In order to obtain the Android source code from Google there is a special tool called "repo". This tool enables us to download all the component repositories sources that come together to make Android OS source for a specific version.First lets create a local directory which would hold our executable code:
mkdir ~/bin
Now let us download the repo tool into this directory and apply the executable permission:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo >\
~/bin/repo && chmod a+x ~/bin/repo
Finally adding this to the path to help us get the tool working
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc && \
source ~/.bashrc
We are now ready to obtain the source code from Google for Android OS
[3] Downloading the Android Sources & Vendor Binaries
For the Nexus 5 Device we have the 'hammerhead' Google code release:Build: KRT16M
Repository Tag: android-4.4_r1
To start the download we need to first create a folder eg. android-4.4_r1
mkdir android-4.4_r1
cd android-4.4_r1
Now lets Initialize the Repository for GIT configuration
git config --global user.name {Your Name}
git config --global user.email {Your@Email}
This would set up your identity that would be part of this source code checkout
Finally we can Initialize the Repository using the following command:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1
This command will take some time to finish as it creates the basis for the list of location from which the different components are downloaded.
Now we are ready to receive the real code:
repo sync -j4
The Vendor Specific Binaries located at :
https://developers.google.com/android/nexus/drivers
For 'hammerhead' and Android Kitkat Release download the binaries at this link:
https://developers.google.com/android/nexus/drivers#hammerheadkrt16m
Go to the android-4.4_r1 directory and Download the drivers:
cd android-4.4_r1
wget -c https://dl.google.com/dl/android/aosp/broadcom-hammerhead-krt16m-bf9b8548.tgz
wget -c https://dl.google.com/dl/android/aosp/lge-hammerhead-krt16m-0efa9c33.tgz
wget -c https://dl.google.com/dl/android/aosp/qcom-hammerhead-krt16m-53cf1896.tgz
tar -xvf broadcom-hammerhead-krt16m-bf9b8548.tgz
tar -xvf lge-hammerhead-krt16m-0efa9c33.tgz
tar -xvf qcom-hammerhead-krt16m-53cf1896.tgz
rm *.tgz
Finally extract the Vendor Specific binaries by the following commands:
./extract-<filename>.sh
You need to enter the "I ACCEPT" at the end of license notices to execute the program.
Perform this for all the three files extracted above.
Now we are ready for the next big step - Compiling!
[4] Building the Sources
First open another Termial window and go the Android directory:cd android-4.4_r1
. ./build/envsetup.sh
Now to select the type of device we give the following command:
lunch
This would display a menue:
You're building on Linux Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_x86-eng 3. aosp_mips-eng 4. vbox_x86-eng 5. mini_x86-userdebug 6. mini_armv7a_neon-userdebug 7. mini_mips-userdebug 8. aosp_tilapia-userdebug 9. aosp_flo-userdebug 10. aosp_deb-userdebug 11. aosp_grouper-userdebug 12. aosp_manta-userdebug 13. aosp_hammerhead-userdebug 14. aosp_mako-userdebug Which would you like? [aosp_arm-eng] 13
Select the option '13. aosp_hammerhead-userdebug' choice by entering '13'.
Now we are ready to start the build.
make -j4
Here the "-j4" switch would help to run the build on Quad core.
This process would take some time ranging from 30minutes to 3hours depending of your PC performance and configuration.
After this is done you are ready with your source to flash the image into your device.
DISCLAIMER: If you proceed on the steps provided it will surely cause damage to your Nexus 5 device and the Author of this article will not be held responsible for any losses or damages of any type caused by following the steps below.
[5] Flashing the Device
This would definitely damage your device and load the image of Android OS built in the previous steps. In order to perform this step one needs to unlock the bootloader as explained in the XDA forum post.Connect your device into the Linux PC. And give the command in the existing terminal prompt from the earlier step.
adb root
adb reboot bootloader
cd out/target/product/grouper
This would help you enter the bootloader mode. And change the directory to the place where the actual build image files are located
Final command that would kill the device and load your compiled image:
fastboot oem unlock && fastboot -w flashall
This would load the complete image into your device and then reboots it.
Now in order to restore the device back to its original os follow the steps outline in another post. Although this is for the Nexus 7 device the similar steps work for Nexus 5 device also.