\subsection{Compilation}
\begin{frame}
  \frametitle{Android Compilation Process}
  \begin{itemize}
  \item Android's build system relies on the well-tried GNU/Make
    software
  \item Android is using a ``product'' notion which corresponds to the
    specifications of a shipping product, i.e. \textit{crespo} for the
    Google Nexus S vs \textit{crespo4g} for the Sprint's Nexus S with
    LTE support
  \item To start using the build system, you need to include the file
    \path{build/envsetup.sh} that defines some useful macros for
    Android development or sets the \code{PATH} variable to include the
    Android-specific commands
  \item \code{source build/envsetup.sh}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Prepare the process}
  \begin{itemize}
  \item Now, we can get a list of all the products available and
    select them with the \code{lunch} command
  \item \code{lunch} will also ask for a build variant, to choose
    between \code{eng}, \code{user} and \code{userdebug}, which
    corresponds to which kind of build we want, and which packages it
    will add
  \item You can also select variants by passing directly the combo
    \code{product-variant} as argument to \code{lunch}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Compilation}
  \begin{itemize}
  \item You can now start the compilation just by running \code{make}
  \item This will run a full build for the currently selected product
  \item There are many other build commands:
    \begin{description}
    \item[make $<$package$>$] Builds only the package, instead of
      going through the entire build
    \item[make clean] Cleans all the files generated by previous
      compilations
    \item[make clean-$<$package$>$] Removes all the files generated by
      the compilation of the given package
    \item[mm] Builds all the modules in the current directory
    \item[mmm $<$directory$>$] builds all the modules in the given
      directory
    \end{description}
  \end{itemize}
\end{frame}
