Probably many guides are available on the Internet right now ! Motivation of writing the article is to share my experiences and some tips and tricks I have received from android development community.

I will be considering Linux build environment for the sake of this article. (as most of developers use local machine as well as servers which are Linux based.) Also you should be using a Linux based OS especially Debian based, if you are just starting as more support is available for it !

System Requirements

You can view requirements preferred by AOSP here

Establishing a Build Environment

Now most of ROM development takes place via cloud servers such as GCP (Google Cloud Platform), Azure cloud and other cloud providers, as compilation requires a lot of Disk space with processing power, but people who meet the requirements do compile on their local machine such as desktops and also laptops.

Installing dependencies

For a debian based environment such as Ubuntu( AOSP recommends Ubuntu LTS (14.04) and above ) the following are packages required =>

Use package manager apt to install these packages. More or Less could be necessary depending on which ROM you are building and their implementation

sudo apt-get install \
adb autoconf automake axel bc bison build-essential ccache clang cmake curl \
expat flex g++ g++-multilib gawk gcc gcc-multilib git git-core git-lfs \
gnupg gperf htop imagemagick kmod lib32ncurses5-dev lib32readline-dev \
lib32z1-dev libc6-dev libcap-dev libexpat1-dev libgmp-dev liblz4-* liblz4-tool \
liblzma* libmpc-dev libmpfr-dev libncurses5-dev libsdl1.2-dev libssl-dev \
libtinfo5 libtool libwxgtk3.0-dev libxml-simple-perl libxml2 libxml2-utils \
lzip lzma* lzop maven ncftp ncurses-dev patch patchelf pkg-config pngcrush \
pngquant python python3 python-all-dev re2c rsync schedtool squashfs-tools subversion \
texinfo unzip w3m xsltproc zip zlib1g-dev zram-config

Also a simple automated script is available at by Akhil Narang.

For people who want to have a separate build environment can use Virtual Machines or Docker container.

Docker setup

Here is a Docker Environment Script ready to be used as a build host ; )

Installing Source Control Tools

For managing the huge source of android requires using Git and a tool called Repo which is a Google-built repository-management tool that runs on top of Git.

We have already installed Git with all the dependencies.

Installing repo:

mkdir ~/bin
curl > ~/bin/repo
chmod a+x ~/bin/repo

Setup Git

git config --global "Your Name"
git config --global ""

Note: remember the email you use above will be used for git commits(if you do so), and will be available to anyone if you push to github.

Now that you have setup tools and dependencies needed, next step is getting the source code !