Android 13 源码下载与编译

Android 13 源码下载与编译

最近在研究Android源码定制相关的内容,刚好在B站上看高乐高大佬的课程,就跟着学习,也顺便整理一下资料写点博客,毕竟目前互联网上关于这方面的内容确实比较少,同时也感谢高乐高大佬的免费课程,干货满满。

接下来我们进入正题:

本文在Ubuntu 22.04 下进行,由于Google推荐使用Ubuntu进行Android系统编译与开发,因此默认阅读本文的同学电脑中已经安装了了Ubuntu系统,并拥有一定的Linux基础。

同时,本文所使用的的Ubuntu已经配置了清华的Ubuntu软件源,若一些软件下载比较慢的同学可以参考如下地址进行配置:

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

一些可有可无的话

由于众所周知的原因,我们很难从Google的官方代码库中下载aosp,因此本文使用中科大的镜像,北方的同学可以使用清华的

建议编译以及开发aosp时在一个专用的文件夹里面进行,我是在用户根目录下创建了一个Android目录,但是这个目录在安装Android Studio的时候SDK也是下载在该目录的,路径如下:~/Android/Sdk,而aosp的目录是~/Android/aosp其实并不冲突,但是介意的同学可以另建一个目录进行

cd ~            # 进入到用户根目录
mkdir Android   # 创建Android 文件夹
cd Android      # 进入刚创建的文件夹

一、下载aosp

下载之前我们需要保证Ubuntu中安装了wget,没有下载的同学可以使用如下命令安装:

# sudo apt update # 没有进行软件源更新的可以调用
sudo apt install wget -y

接下来我们使用中科大的镜像下载aosp

# 这里我们添加 -c 参数表示断点续传
wget -c https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar

执行完该命令之后根据你的网速可能需要等待40分钟或更久(主要看你的网络情况,这个文件有70G,如果你的网速比较快的话可能下得比较快,反之越慢)

当下载完了之后我们对文件做一下md5码校验,以防没有下载完全或文件损坏等

md5sum aosp-latest.tar

我们拿运行的结果来跟https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar.md5的内容做比对,若md5一致则表示文件没有问题,就可以进行下一步操作了

当文件下载无误之后我们就可以把aosp-latest.tar文件解压了

tar xvf aosp-latest.tar

由于这个文件比较大,因此可能需要等待20~30分钟,当然这跟你的硬盘性能有关。当文件解压完成之后我们就可以在该目录下看到有一个aosp文件夹了,如果我们这个时候进去会发现这个文件夹只有一个.repo文件夹,并没有任何代码,这是因为我们下载的仅仅是一个相当于一些配置文件的东西,我们还要进行代码同步,.repo文件夹的作用就与Git项目的.get文件夹类似

在等待的时候可以再开一个终端来参照下面的教程安装与配置一些需要的环境

二、同步Android 源码

在拉取Android源代码之前我们需要确认机器中安装了需要的环境

2.1 安装Git

首先我们安装与配置git,已经安装并配置好的同学可以跳过这步

sudo apt install git -y

当安装好了之后我们再调用如下命令配置Git

git config --global user.email xxx@qq.com
git config --global user.name "xxxxx"

2.2 安装 repo

接下来我们安装repo

mkdir ~/.repo        # 在用户根目录创建一个.repo的文件夹,用于下载repo
# 下载repo 到用户根目录下的.repo文件夹
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.repo/repo

# 给repo文件授予权限
chmod a+x ~/.repo/repo

# 将.repo 目录添加到环境变量中
echo "PATH=~/.repo:\$PATH" >> ~/.bashrc
# 使.bashrc 生效
source ~/.bashrc 

安装了repo之后我们还要给repo配置国内源,否则进行代码同步的时候可能会出现异常

export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'

2.3 安装Python

由于repo是由一系列python脚本组成,因此我们还需要安装python环境,repo其实用的是python2 但是为了避免出现一些状况我们就把python3 也安装了

#Ubuntu中默认安装了python3,可以调用一下python3命令,如果有了的话可以跳过这步
sudo apt install python3 -y

sudo apt install python2 -y

如果安装好了之后我们调用一下 python2命令可以发现已经开启了python2终端,但是我们调用python命令的话还是提示没有找到该命令,因此我们需要添加一个软链接

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

注意如果执行python命令的时候提示的python版本是python3 也要执行一下这个命令才可以,但是在执行之前需要先执行如下命令删除掉之前设置的软链接

sudo rm -rf /usr/bin/python

如果这里成功了我们就可以运行python命令了

2.4 安装JDK

网上的一些教程是要我们安装openjdk 8 但是我在编译的时候提示了jvm版本过低的错,因此我们直接安装openjdk11 即可

sudo apt update                        # 更新Ubuntu软件源
sudo apt install openjdk-11-jdk -y     # 安装openjdk 11

2.5 安装编译依赖项

安装好了上面的软件那之后我们要再安装一些软件包来支持源码编译

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

2.6 同步Android 源码

当我们配置好了所需的环境之后我们就可以同步Android源代码了,这里我同步的是android-13.0.0_r24

cd aosp        # 进入源码目录

指定源码版本,建议指定前先查看aosp镜像有没有该版本

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-13.0.0_r24

如果我们看到repo has been initialized in /home/zhen/Android/aosp这个提示表示已经初始化完成,此时就可以进行下一步了

同步Android 源码

repo sync

由于Android源码比较庞大,所以这个步骤需要等待20分钟左右

三、源码编译

3.1 初始化编译环境

当Android源码同步完了之后,我们就可以开始编译Android源码了

首先我们要初始化编译环境

source build/envsetup.sh

执行这个命令没有任何报错即可进行下一步,值得注意的是,这个命令在每次我们重新打开一个终端进行编译等操作的时候都要执行一遍

3.2 清除编译内容

第一次编译的时候我们需要将之前编译的内容清除掉(按理说这步不用也可以,但是为了防止后面出现什么乱七八糟的问题所以就执行一下)

make clean

3.3 选择编译版本

接下来我们要先选择一个要编译的版本之后就可以进行编译了

这个部分我们可以执行lunch命令之后再选择你想要编译的版本

You're building on Linux

Lunch menu .. Here are the common combinations:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_barbet-userdebug
     4. aosp_bluejay-userdebug
     5. aosp_bluejay_car-userdebug
     6. aosp_bramble-userdebug
     7. aosp_bramble_car-userdebug
     8. aosp_car_arm-userdebug
     9. aosp_car_arm64-userdebug
     10. aosp_car_x86-userdebug
     ...
     65. rb5-userdebug
     66. sdk_car_arm-userdebug
     67. sdk_car_arm64-userdebug
     68. sdk_car_portrait_x86_64-userdebug
     69. sdk_car_x86-userdebug
     70. sdk_car_x86_64-userdebug
     71. sdk_pc_x86_64-userdebug
     72. silvermont-eng
     73. uml-userdebug
     74. yukawa-userdebug
     75. yukawa_sei510-userdebug

Which would you like? [aosp_arm-eng]
Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-eng): 

也可以在lunch命令后添加参数,添加参数有两种方式,我使用的是第二种方式

  1. 使用序号编译
lunch 1     # 与 lunch aosp_arm-eng 等价
  1. 使用版本名称编译使用序号编译
lunch sdk_phone_x86_64-userdebug

phone -> 编译的是手机的固件

x86_64 -> 编译的是x86架构 64位的系统

userdebug -> 这个是指编译的固件类型,可选参数有user、userdebug、eng,他们的区别如下
系统类型区分

需要注意的是,从Android12 开始,如果需要编译虚拟机固件需要编译带sdk前缀的版本

3.4 开始编译

选择完了编译版本之后我们就可以开始进行编译了

make -j8

这个j6代表使用6的线程进行编译,这个参数看你的CPU参数与内存,即最大线程数不能超过CPU支持的最大线程数,但是如果你的内存比较小就得选择较小的线程数,我们可以在编译报了137错误的时候适当选择小一点的线程数或者增加交换空间大小,但是建议交换空间大小不超过内存的一半,比如你的内存是16G的就可以设置为8G,如果你的内存是32G的就可以设置为16G

交换空间的设置方法可以参考这篇博客:ubuntu调整交换空间 - 简书

编译这个部分的时间是最久的,可能得等上4个小时以上,当然如果你的CPU性能比较好时间就会少一点

3.5 验证是否编译成功

当我们编译完了之后就可以执行如下命令来启动虚拟机,以验证是否编译成功

emulator

四、错误解决

4.1 A new version of repo (XXX) is available.

这个错误表示repo有更新的版本,因此我们要将~/.repo目录下的repo文件替换为.repo/repo 下的repo文件

# 在aosp目录下执行
cp .repo/repo/repo ~/.repo/repo

然后再执行刚刚报这个错误的命令就看可以了

4.2 编译到一半终端闪退了

我有一台旧主机,i5-6500 - 16G内存的,我在上面编译就会出现这个问题,然后换到新主机上就没事,暂时不知道是内存小还是什么原因

参考资料

这里只是部分参考的文献,有一些文章因为我当时急于解决问题所有忘了记录了,后面就找不到了,因此就不贴出来了

高乐高521的个人空间-Android13 逆向 ROM定制ART定制入门系列-哔哩哔哩视频

jdk版本对应的java版本数字-青岛软件培训-Java培训-Python培训学校-万码学堂

Android系统源码查看 - 简书

AOSP 镜像使用帮助 — USTC Mirror Help 文档

AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

ubuntu调整交换空间 - 简书

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下载编译Android源码,首先需要安装好git和repo等工具。你可以参考《Android源码下载 & 编译(高通)》第1节中的指南来完成这些工具的安装过程。 下载Android源码的方法可以根据不同的情况而有所不同。如果你是按照《Android源码下载 & 编译(高通)》的方法下载源码,那么源码中应该包含有kernel目录,也就是包含了Linux内核。然而,通过其他方法下载源码可能不包含kernel目录,也就是没有包含Linux内核。在参考资料中明确指出,Android 4.0源码默认下载是不包括内核源码的。因此,如果你遇到这种情况,你需要另外下载AndroidLinux源码,并进行编译。 需要注意的是,与《Android源码下载 & 编译(高通)》不同,上述编译过程并没有编译Linux内核。你需要按照下文的指引进行Linux内核的编译。具体的步骤和方法可以参考后续的文档。 总结起来,要下载编译Android源码,你需要先安装好相关工具,然后根据具体的情况选择合适的下载方法。如果你已经按照《Android源码下载 & 编译(高通)》的方法下载源码,那么你已经包含了Linux内核。否则,你需要额外下载AndroidLinux源码,并按照相关指引进行编译。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Android源码下载&编译(TI)](https://blog.csdn.net/Q1302182594/article/details/52208366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值