源码编译软件安装-从0开始编译Android系统源码

前言

在开始学习Android Framework的知识之前,准备好相关的源码环境是非常有必要的。 你可以选择直接在网站上在线观看,但是跳转没有IDE里那么方便。 或者可以下载指定版本的源码,通过IDE查看,但是编译源码比较困难,所以修改源码编译查看疗效也比较困难。

所以这篇文章主要是为了以后编译Android源码的目的。 由于编译源码最好在Linux环境下进行(因为Android官方是在Linux环境下编译的,为了省事),但是我的设备是Windows,所以为了不影响原来的系统源码编译软件安装源码编译软件安装,可以安装一个虚拟机并在虚拟机中安装Linux系统。 或者还有更方便的方式安装Docker,在Docker下安装别人已经规划好的Linux环境,但前者本文不做介绍。

本文使用的环境和版本信息:

使用设备:Windows 10 64位x86系统

VirtualBox:版本 7.0.2

Ubuntu:22.04.1 LTS 版本

开始之前 下载并安装 VirtualBox 虚拟机软件: 下载适用于 Linux 的 Ubuntu 发行版:

VirtualBox的安装非常简单,直接下一步下一步即可。 所以前面主要介绍Ubuntu的安装和配置。

安装Ubuntu 打开VirtualBox,点击“新建”按钮,填写虚拟机的名称:

注意:此时不需要选择ISO Image,所以会自动安装,您可以选择系统语言进行手动安装。

分配显存和线程数(建议至少分配4G内存):

分配c盘大小(建议至少200G):

单击“完成”。

接下来,您将进入系统的安装过程。 语言可以选择英文,输入用户名和密码,根据提示一步步安装即可。

注意:进入系统引导安装页面后,屏幕码率很低,可能会导致显示不完整,例如没有显示下一步的按钮。 这时,你可以使用快捷键Win+鼠标左键拖动安装页面,以显示不完整的页面。

配置Ubuntu修改帧率:由于默认帧率太低,看起来不太舒服,所以可以进入设置页面将帧率调整到合适的大小。 安装增强工具:这可以使用共享目录、共享剪贴板和拖放功能。 点击“设备”->“安装增强工具”,此时文件系统中会出现VBox_GAs_xxx目录。 进入该目录,右键打开当前目录下的终端。 在终端中输入: sudo ./VBoxLinuxAdditions.run 并回车,即可以安装增强工具打开共享目录:可以在“设备”->“共享文件夹”中添加要共享的文件夹。 注:只需勾选“自动挂载”和“固定分配”即可。 重新启动系统后,可以在文件系统中看到sf_xxx目录,即共享目录。 如果点击查看目录出现权限问题,可以使用sudo adduser [用户名] vboxsf命令将当前用户添加到vboxsf用户组中(注意替换为你设置的用户名)。 将“共享粘贴板”和“拖放”设置为单向。 配置网络代理:即使我们在Windows系统上安装了FQ软件,但在Ubuntu系统中仍然无法访问内网。 所以我们需要配置代理,这样以后下载Android源码就更方便了。 例如(IP地址为Windows系统上的IP,端口为FQ软件上设置的端口):

注意:配置完成后最好重新启动系统以使配置生效。

准备安装Repo的源码环境

Android项目很大,是一个超级项目。 所以为了更好的管理代码,Android官方做了一个叫做Repo的工具,以便更好的在Android环境下使用Git来管理代码。 因此,如果我们想要获取Android源码,首先需要准备好工具。

在终端中运行以下命令来安装 Repo Tools:

sudo apt-get update
sudo apt-get install repo

检查是否安装成功:

repo version

如果出现类似下面的输出,则说明安装成功:

airsaid@airsaid-VirtualBox:~$ repo version

repo launcher version 2.17
(from /usr/bin/repo)

初始化仓库

由于许多众所周知的原因,如果不使用镜像,就会出现网络问题,下载速度也不会理想。 因此,您可以选择使用清华大学或其他机构提供的镜像地址来解决问题。 下面以清华大学的镜像为例:

安装curl工具:

sudo apt-get install curl

将repo下载到bin目录并设置权限:

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo

repo运行过程中,会尝试访问官方Git源来更新自身。 如果你想使用镜像源进行更新,可以将以下内容复制到你的~/.bashrc中(使用 sudo nano ~/.bashrc 命令进入nano编辑器进行更改):

# https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/
export PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

使用source ~/.bashrc使其立即生效。 下载源码创建一个存放源码的目录:

mkdir <dir_name>
cd <dir_name>

使用真实用户名和短信地址配置 Git:

git config --global user.name YourName
git config --global user.email you@example.com

初始化仓库:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

如果需要指定版本,可以使用-b选项指定分支(此链接包含所有分支信息:):

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r47

同步源码:

repo sync

如果需要提高同步率,可以传递 -c (当前分支)和 -jthreadcount 标志:

repo sync -c -j4

以Android 10源码为例,下载大小约为100G。

编译源码并安装所需工具

编译过程中需要用到一些工具,提前安装,防止编译失败:

sudo apt install m4 libncurses5 python-is-python3

执行环境设置脚本

envsetup.sh脚本用于初始化环境,里面记录了编译过程中需要的各种功能的实现,如lunch、m、mm、mmm等,在下载的源码目录下使用以下命令执行该脚本:

source ./build/envsetup.sh

或者,您可以使用以下命令:

. ./build/envsetup.sh

注意:每次重新打开终端时都需要再次执行该命令。 另外,使用 hmm 查看可用命令的完整列表。

选择编译目标

通过午餐

-命令可以选择要构建的目标。 其中,product_name 指定要构建的产品,build_variant 指定要构建的变体。

所有重构目标都使用 BUILD-BUILDTYPE 方法,其中 BUILD 是指代特定功能组合的代号。 BUILDTYPE 是以下之一:

构建类型 备注

用户

编译的系统有权限限制,适合生产环境

用户调试

编译后的系统具有root权限,调试首选

英语

优先考虑开发效率并关闭额外的调试工具和优化

如果您不知道如何选择目标产品,您可以使用lunch命令枚举可用产品列表。 例如:

airsaid@airsaid-VirtualBox:~/aosp$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_blueline-userdebug
4. aosp_bonito-userdebug
5. aosp_car_arm-userdebug
6. aosp_car_arm64-userdebug
7. aosp_car_x86-userdebug
8. aosp_car_x86_64-userdebug
9. aosp_cf_arm64_phone-userdebug
10. aosp_cf_x86_64_phone-userdebug
......

此时可以直接输入对应的序列号进行选择,后面也可以直接通过产品名称进行选择,例如:lunch aosp_arm-eng。

执行编译命令

根据不同的使用场景,有多种编译指令。 编译指令如下表所示:

编译器指令备注

在源代码树的根目录下编译

毫米

编译当前路径下的所有模块,但不包含依赖项

嗯[模块路径]

编译指定路径下的所有模块,但不包含依赖

MMA

编译当前路径下的所有模块并包含依赖项

mmma [模块路径]

编译指定路径下的所有模块并包含依赖

制作[模块名称]

不指定参数时,表示编译整个Android源码(包括依赖)

注:m、mm、mmm、mma、mmma这些命令都是由make完成的。

一般第一次编译都会使用make命令,相当于完全编译。 为了提高编译速度,可以使用-j参数指定线程数,例如:

make -j8

编译成功后,终端会显示构建成功。 同时源码根目录下的/home/air表示/aosp/out/target/product/

编译后的产品将出现在目录中。 比较重要的是以下三个图像文件:

编译过程中可能会遇到以下问题,可以按照相应的解决方案进行解决:

找不到 /usr/bin/python 文件或目录:

源码编译软件安装-从0开始编译Android系统源码

/bin/bash: device/generic/goldfish/tools/mk_combined_img.py:/usr/bin/python:解释器错误: 没有那个文件或目录

python脚本的句型错误(源代码中部分python脚本使用的python2的句型导致):

File "/home/airsaid/aosp/device/generic/goldfish/tools/mk_combined_img.py", line 48
    print "'%s' cannot be converted to int" % (line[2])
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

解决方案:如果没有安装python2,请先安装,并完善软链接,将python指向python2:

sudo apt install python2
sudo ln -s /usr/bin/python2 /usr/bin/python

内存不足:

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

解决方案:通过更改_JAVA_OPTIONS环境变量配置指定更大的显存。 将以下代码添加到 .bashrc 文件中:

export _JAVA_OPTIONS=-Xmx4096m

要对VirtualBox中的Ubuntu进行扩容,在关闭虚拟机的前提下,通过cmd进入VirtualBox的安装目录,例如:

cd /d D:virtualbox

查看VirtualBox的虚拟硬盘并记下UUID信息:

D:virtualbox>VBoxManage list hdds
UUID:           279063de-8822-48c2-97d9-67964fb90b18
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       G:VirtualBoxVMsUbuntuUbuntu.vdi
Storage format: VDI
Capacity:       225280 MBytes
Encryption:     disabled

根据指定的UUID修改对应虚拟机的容量。 例如,在下面的示例中,重新分配了 51200 MB (50G):

VBoxManage modifyhd 279063de-8822-48c2-97d9-67964fb90b18 --resize 51200

打开虚拟机并安装gparted分区工具:

sudo apt-get install gparted

打开分区工具,将多余的c盘划分到对应的c盘。

注意:如果出现Unable to resize read-only file system,可以参考这篇文章解决:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 源码编译软件安装-从0开始编译Android系统源码 https://www.wkzy.net/game/162750.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务