Building Android

So, the ways of building Android are…

Setting up Android BuildSystem Environment

There are 3 ways (commands) of Setting up the Build Environment

lunch - Sets the Device Target which is specified by the user
breakfast - Syncs the Device Dependencies + lunch
brunch - breakfast + Starts the Build

Device Dependencies are synced by looking for a file named [rom_name].dependencies which specifies the same. It’s written in JSON.
brunch starts the build immediately after Setting the Environment

Usage of each of them

lunch rom_device-buildtype

breakfast device buildtype

brunch device

rom - ROM’s codename in source
device - Device’s Codename
buildtype - Either of these values -> user, eng, userdebug

Explanation of Values of buildtype is done HERE

Build Type Use
user limited access; suited for production
userdebug like “user” but with root access and debuggability; preferred for debugging
eng development configuration with additional debugging tools

Where userdebug is the preferably used for a Public Custom ROM Release. Debugging Tools in this Build are enough for normal debugging. eng is only used for debugging non-working things, and not to be publicly released.