Android 源码编译

使用 apt 安裝以下工具 先使用 apt 安装以下工具

Copy
sudo apt upgrade
sudo apt update

sudo apt install -y \
vim \
git-core \
gnupg \
flex \
bison \
gperf \
build-essential \
zip \
unzip \
curl \
zlib1g-dev \
gcc-multilib \
g++-multilib \
libc6-dev-i386 \
lib32ncurses5-dev \
x11proto-core-dev \
libx11-dev \
lib32z-dev \
ccache \
libgl1-mesa-dev \
libxml2-utils xsltproc \
libncurses5 \
libelf-dev \
libswitch-perl

安装 google 的 repo 工具来下载 Android 源码、Android 内核代码
下载安装 repo 工具

Copy
mkdir ~/bin
PATH=~/bin:$PATH

Copy
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

下载源码

Copy
mkdir android_source && cd android_source

确认有设定 git 的基本资讯， name 、 email

Copy
git config --global user.name <Your Name>
git config --global user.email <you@example.com>

repo init ：指定你要下载的 url & branch (branch name 可以参考官方文档)

Copy
repo init -u https://android.googlesource.com/platform/manifest \
-b android-13.0.0_r1

Copy
repo sync

编译 Android

初始化环境：在 Android 下载好的根资料夹下达以下命令

Copy
cd ~/android_source

source ./build/envsetup.sh

lunch 选择编译目标：选择要编译的目标，格式组成是 BUILD 、 BUILDTYPE
Build 是指编译完后要运行的平台

BUILD | 目标设备 | 补充
Full | 模拟器 | 全编译，包含所有语言、应用、输入法… 等等
full_manguro | manguro | 全编译，运行于 Galaxy Nexus GSM/HSPA+("manguro")
full_panda | panda | 全编译，运行于 PandaBoard ("panda")

BUILDTYPE 则分为三种类型

BUILDTYPE | 功能特点
user | 发布到市场上的版本，预设没有 root 权限、adb 关闭
userdebug | 开放 root、adb 权限，一般用于真机调试
eng | 拥有最大权限 (root)，并具有额外调适工具，一般用于模拟器

make 编译：可以按照自己电脑的 CPU 核心数量来编译

Copy
# make -j$(nproc)

make -j10

Android Source 单编译 - 模组

除了全部编译以外，我们可以使用单单编译某一个应用模块 (eg. Settings 应用模块)
在 Android Source 根目录中，执行以下命令

Copy
source ./build/envsetup.sh

lunch xxx

进入 Setting 目录下，使用 mm 编译

Copy
mmm packages/apps/Settings

除了 mm 指令以外，还可以使用其他命令单编译

指令 | 功能
mm | 编译当前目录下 Module（必须进入指定工程的目录中才能编译）
mmm | 编译指定目录下 Module，但不编译其依赖的 Module (可以在 Android 源代码的目录结构中的任意级目录，编译任意指定的工程)
mma | 编译当前目录下 Module，包含其依赖的 Module
mmma | 编译 指定路径下的 所有 Module，并包含其依赖

模拟器运行

Copy
source ./build/envsetup.sh

lunch xxx

emulator