Android10.0 系统解析(02)——搭建Android源代码编译调试环境

1、前言

Android的编译环境作为深入学习Android的基础,不可或缺,能够完整下载Android源代码并编译成功,对深入学习Android是非常关键和重要的一步。Android环境搭建比较繁琐和枯燥,大家需要有足够的耐心,去一步一步的解决问题,否则就很容易会编译失败或者没有办法在Google手机上调试通过。

2、构建编译环境

根据AOSP官网中关于“构建编译环境”中描述,我们可以了解到目前只能使用Linux或者macOS进行源码级的开发。

路径:https://source.android.google.cn/setup/build/initializing

构建编译环境

本部分介绍了如何设置本地工作环境来编译 Android 源代码文件。您必须使用 Linux 或 macOS;目前不支持在 Windows 环境下编译。

2.1、虚拟机选择

如果您有Linux或者Mac操作系统的开发设备,那么部分就可以直接跳过。
如果您常用的开发设备是Windows操作系统的话,那么可以考虑用虚拟机去学习或者研究Android源代码。

目前市面上有两款虚拟机软件,大家自行选择其中一款即可。

2.1.1、下载VirtualBox及其扩展包

在VirtualBox的下载页中下载最新的安装包和扩展包,下载完成后将得到以下两个文件:

  • VirtualBox-6.1.8-137981-Win.exe
  • Oracle_VM_VirtualBox_Extension_Pack-6.1.8.vbox-extpack

2.1.2、安装VirtualBox

双击可执行文件 “VirtualBox-6.1.8-137981-Win.exe”,
这个部分只需要您做出肯定的回答就可以完成虚拟机的安装。

2.1.3、添加扩展包

按照以下的步骤,完成扩展工具包的添加。

  • 启动VirtualBox,然后点击扳手图标按钮“全局设定(P)”
  • 在左边的Tab页找到“扩展”选项卡,然后在右侧中部点击“+”图片按钮。
  • 在弹出的文件选择对话框里,选择前面获取到的扩展包“Oracle_VM_VirtualBox_Extension_Pack-6.1.8.vbox-extpack”。
  • 在"虚拟电脑控制台 - 问题"画面中,点击“安装”按钮。
  • 在"Virtual Box 许可" 画面中,将许可证书滑动到最后,点击“我同意(A)”按钮。
  • 完成扩展包的安装。

2.2、安装Ubuntu

那我们应该下载什么版本的Ubuntu操作系统呢,根据AOSP官网的提示,64位的Ubuntu LTS (14.04) 风险小一些。

路径:https://source.android.google.cn/setup/build/initializing

设置 Linux 编译环境 以下说明适用于所有分支(包括 master)。
 
我们会定期在 Ubuntu LTS (14.04) 和 Debian 测试版本中对 Android
编译系统进行内部测试。其他大多数分发版本都应该具有所需的编译工具。
 
如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中编译

笔者安装了64位的Ubuntu LTS (14.04)版本,遗憾的是出现了崩溃,尝试几次都没有没有安装成功。
所以下面以安装最新的Ubuntu桌面版Ubuntu LTS (20.04)进行说明。

2.2.1、下载最新的Ubuntu桌面版(Ubuntu 20.04 LTS)

接下来我们需要下载最新版本的Ubuntu桌面版,建议使用加载工具,直接网页下载速度非常的慢。
路径:https://ubuntu.com/download/desktop

下载完成以后,您将获得以下可执行文件:

  • ubuntu-20.04-desktop-amd64.iso

2.2.2、Ubuntu安装过程

(1)创建虚拟机:
  • 启动VirtualBox,在管理器的右侧的面板上,点击“新建(N)”图片按钮。
  • 在“新建虚拟电脑”画面上,填写一下信息:
    • 名称:Ubuntu 20.04 LTS(填入名称以后,类型和版本会自动填写,默认即可)
    • 文件夹:选择空间足够的磁盘存放
    • 类型:Linux
    • 版本:Ubuntu(64-bit)
  • 内存大小:笔者的笔记本电脑内存为16G,分配一半(8192M)给虚拟机.点击“下一步(N)”按钮。
  • 虚拟硬盘:填写极限使用时的虚拟硬盘大小(比如256G),选择“现在创建虚拟硬盘(C)”单选按钮,然后点击“创建”按钮。
  • 虚拟硬盘文件类型:选择"VDI(VirtualBox磁盘映像)"单选按钮,点击“下一步(N)”按钮。
  • 磁盘分配类型:选择“动态分配(D)”单选钮,点击“下一步(N)”按钮。
  • 文件位置和大小:选择虚拟硬盘的保存位置并设置虚拟硬盘大小,然后单击“创建”按钮。

完成虚拟机的创建,选中虚拟机后,单击“设置”按钮,在弹出的虚拟机设置对话框中可以查看并修改虚拟机的各个参数。

(2)安装Ubuntu 系统软件
  • 管理器的右侧的面板上,点击“启动(T)”按钮。
  • 在弹出的“选择启动盘”对话框中,单击右侧文件夹小图标。
  • 选择虚拟光盘文件“ubuntu-20.04-desktop-amd64.iso”,单击“启动”。
  • 进入安装界面。 选择“中文简体”,选择“安装Ubuntu”。
    • 键盘布局:一般来说来说,我们的键盘布局为英文键盘,选择“English(US) -English(US) ”,选择“继续”。
    • 更新和其他软件:选择“最小安装”和“安装Ubuntu时下载更新”(网络状况不好可以不选),选择“继续”。
    • 安装类型:选择“清除整个磁盘并安装Ubuntu”,单击“现在安装(I)”按钮,弹出警告框,选择“继续”。
    • 您在什么地方:时区选择,用鼠标单击地图中的“中国”,就会选择“上海”,单击“继续”。
    • 您是谁?:新建账户信息,比如用户名,密码等信息,单击“继续”。
  • 等待安装完成。
(3)安装增强功能

屏幕分辨率较低,需要安装增强功能。

  • 点击菜单“设备”
  • 点击“安装增强功能”,在弹出的对话框里,点击“运行” 。
  • 输入登录系统的密码,点击授权,就开始自动安装。
  • 在系统的左侧右击光盘,选择“弹出”光盘 。
  • 双击虚拟机窗口,验证屏幕分辨率,完成安装增强功能。

2.3、安装OpenJDK

从Android 5.0 开始,使用OpenJDK编译源码。

Android 版本 JDK 备注
Android 5.x ~ Android 6.x OPenJDK 7
Android 7.x ~ Android 10.0 OPenJDK 8

根据提示,无需另行安装OpenJDK,那么跳过此步骤。

路径:https://source.android.google.cn/setup/build/requirements

AOSP 中的 Android master 分支带有预编译版本的 OpenJDK;因此无需另行安装。

旧版 Android 需要单独安装 JDK。在 Ubuntu 上,请使用 OpenJDK。

2.4、更改镜像源

(1)先执行以下命令:

lsb_release -c
sudo cp -v /etc/apt/sources.list /etc/apt/sources.list.backup
sudo chmod 777 /etc/apt/sources.list
sudo gedit /etc/apt/sources.list
#vim /etc/apt/sources.list

(2)更改镜像源
国内有很多镜像源,比如有清华源和阿里云源等,选择其中一个就可以了。
笔者选择了阿里云源。

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

(3)修改完软件源后,更新软件列表和软件

sudo apt update
sudo apt upgrade

# 更新有失败项的话,执行下面语句以后重复上面两句命令
# sudo apt-get update
# sudo apt update
# sudo apt upgrade

2.5、Ubuntu系统工具包更新升级

路径:https://source.android.google.cn/setup/build/initializing
标题:安装所需的软件包 (Ubuntu 14.04)

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip

因为网络异常或者其他异常,这次工具包一次不能下载或者更新。
可以重复执行几次,直到控制台提示均已经安装或者更新完毕。

3、Android 源代码下载及编译过程

3.1 、源代码下载

3.1.1 、安装python

由于repo脚本是Android项目编写的Python脚本,用来统一管理Android项目的代码仓库,
所以首先要确保安装了Python 2.7。

$ python
---
Command 'python' not found, did you mean:

  command 'python3' from deb python3
  command 'python' from deb python-is-python3
---
$ sudo apt-get install python
$ python
---
Python 2.7.18rc1 (default, Apr  7 2020, 12:05:55) 
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
---

3.1.2 、安装 Repo

Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。

  • 确保您的主目录中有一个 bin/ 目录,并且它包含在您的路径中:
	mkdir ~/bin
	vim ~/.bashrc
	# 在文件的最后添加下面一行代码,保存退出
	PATH=~/bin:$PATH 
	# 生效修改
	source ~/.bashrc
  • 下载 Repo 启动器,并确保它可执行:
	curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
	# curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
	# export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
	chmod a+x ~/bin/repo

3.1.3、工作目录设置

创建一个空目录来存放您的工作文件。
为其提供一个您喜欢的任意名称:

    mkdir WORKING_DIRECTORY # mkdir -p aosp/Android10
    cd WORKING_DIRECTORY # cd aosp/Android10

3.1.4、配置git个人信息

配置git账户信息,用于提交代码到Gerrit上,进行代码审查。

    git config --global user.name "Your Name"
    git config --global user.email "[email protected]"
    
    // 查看配置的git信息
    cat ~/.gitconfig
    ---
	[user]
		name = Your Name
		email = [email protected]
    ---

3.1.5、获取源码分支

运行 repo init 以获取最新版本的 Repo 及其最新的问题修复。您必须为清单指定一个网址,该清单用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。

    repo init -u https://android.googlesource.com/platform/manifest
    # repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

路径:https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds

Build 标记 版本 支持的设备 安全补丁程序级别
QQ2A.200501.001.B3 android-10.0.0_r36 Android10 Pixel 2、Pixel 2 XL 2020-05-05
6440158 android-9.0.0_r56 Pie 2018-08-05

要检出 master 之外的其他分支,请使用 -b 指定此分支。

    repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r36 
    # repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r36

同步源代码:

repo sync -jx(x一般是CPU核心的2倍为佳)
# 支持续传
repo sync

3.1.6、常见问题

(1)虚拟机存储不足
关闭当前虚拟机,回到VirtualBox管理页面。这种调整方案将会导致一直黑屏启动不了。
这种设置只有在虚拟机创建完成后,操作系统还没有安装的情况下调整的。
只有在设置动态存储空间的时候设置一个足够的虚拟空间是必要的,要千万注意。

介质(M)–> 属性(P)
     --> 虚拟机文件选择 --> 属性(P)
     --> 拖动滑块,调整大小

3.2 、编译源代码

源代码下载完成以后,就可以开始编译源代码。

  • 整体编译:初次编译的时候,需要整体编译。初次编译时间较长,笔者是编译了一下午。
  • 模块编译:局部修改的时候,只需要编译当前模块就可以了。

3.2.1、整体编译

make:不带任何参数,用于编译整个系统,编译时间比较长,除非是进行初次编译否则不建议此种做法。

$ cd ~/aosp/Android10
$ source build/envsetup.sh(或者 . build/envsetup.sh)
$ lunch
...
Which would you like? (输入编译的产品名字或者输入前面的数字)
$ make -jx(x为CPU核心的2倍为佳)

3.2.2、模块编译

模块编译分三种:make、mmm、mm
导入编译环境:

	cd ~/aosp/Android10
	source build/envsetup.sh
  • make module name:只知道目标模块的名称,则可以在代码根目录下执行 “make 模块名 ”的方式编译目标模块。
	make SystemUI
  • mmm module path:该命令编译指定目录下的目标模块,而不编译它所依赖其他模块。
	mmm frameworks\base\packages\SystemUI
  • mm: 进入对应的应用模块代码所在目录执行mm命令,mm和mmm编译的速度都很快。
	cd frameworks\base\packages\SystemUI
	mm

以上三个命令都可以用-B选项来重新编译所有目标文件。

虽然从编译速度上mmm,mm都差不多,因为mmm不涉及目录的切换,
所以建议使用 “make 模块名” 的方式分模块编译。

4、参考文献

猜你喜欢

转载自blog.csdn.net/SkyDream999/article/details/106323521