This procedure works on macOS 10.12.2

Establishing build environment:
1. Creating a case-sensitive disk image

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg

2. Mount the image

hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android

3. Install JDK (for master branch of Android in AOSP, just install the latest version)
4. Install Xcode command line tools:

xcode-select --install

5. Install MacPorts
Make sure /opt/local/bin is before /usr/bin in path, otherwise

export PATH=/opt/local/bin:$PATH

6. Get make, git, and GPG packages

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

7. Increase the cap of simultaneous file descriptors open

vim ~/.bash_profile
ulimit -S -n 1024

Download source code
1. Install Repo

mkdir ~/bin
export PATH=~/bin:$PATH
curl > ~/bin/repo
chmod a+x ~/bin/repo

2. Initialize Repo client

cd /Volumes/android
mkdir android_source
cd android_source
git config --global "Your Name"
git config --global ""
repo init -u

3. Download Android source tree

repo sync

Prepare the build
1. Get proprietary binaries
2. Uncompress and copy the scripts to the root of Android source tree, then run them (e.g. for Pixel) to extract binaries into vendor foler (Note: when reading the Term, use Ctrl+F to page down, or press G to go to end)


3. Clean up

make clobber

Note: if there is “Error: could not find jdk tools.jar”,

export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

4. Set up environmnet

. build/

5. Choose the target, e.g.

 lunch aosp_arm-eng

6. Build the code, for -jN, choose N between 1 and 2 times the number of hardware threads (e.g. for 4 core 8 threads, N is between 8 to 16), e.g.

 make -j12

7. Run on emulator (first create an AVD named “pixel”

 emulator -avd pixel