Windows11 VMware-Ubuntu-Android13 源码下载和全编译

官方教程文档

想用 Mac 编译源码的朋友基本可以放弃想法了,我试过了各种兼容错误,不得已用了 Windows 装 VMware + Ubuntu

一、硬件配置

我的配置 Windows 11笔记本:32G + 1.5T,最好使用 32G + 1T SSD的机器(无压力)
建议机器硬件条件至少 16G内存 + 300G空闲磁盘,使用过一台 VMware使用盘空闲274G的下载有点吃紧
在这里插入图片描述

官方推荐配置,我挑几个重点列了出来

硬件方面

  • 内存至少 16GB,实测建议至少 32G
  • 磁盘至少 250GB,实测建议至少 512G

软件方面

  • 推荐使用 Ubuntu 18.04 (Bionic Beaver)、 Docker、Linux
  • 2021年6月22日起,不再支持 Windows 或 MacOS 上构建
  • 2020年1月1日起,不再支持 python2,请使用 python3

二、软件环境

  • VMware-workstation-full-16.2.4-20089737.exe(文件615MB)
  • UbuntuOS-v18.04-desktop-amd64.iso(文件1.78G)

三、VMware上安装适用于下载编译 Android12 源码的Ubuntu

另一篇教程地址:VMware上安装适用于下载编译 Android12 源码的Ubuntu

VMWare-Workstation下载地址

为方便操作,安装Ubuntu后,登录切换为root用户

设置root用户密码(可设置简易密码),并切换用户(不设置密码直接切换会报:su: Authentication failure)

sudo passwd root
su root
xxx

四、工具下载

安装依赖:

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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

安装常用工具:

repo: apt-get install repo

curl: apt-get install curl

vim: apt-get install vim

git: apt-get install git

配置git用户
git config --global user.name 'xxx'
git config --global user.email 'xxx@xxx.com'

jdk-11: apt-get install openjdk-11-jdk

python: apt-get install python (默认应该会安装 python3,或者直接使用 python3)


五、源码环境

使用 清华镜像源

mkdir ~/bin
PATH=~/bin:$PATH #直接配置全局环境变量也行
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod +x ~/bin/repo
mkdir ~/AOSP_13

六、下载

首先明确下载分支,我这里下载的是 android-13.0.0_r7,因为这个分支支持pixel主流的所有机型。

在这里插入图片描述

一、下载镜像替换为清华源
cd ~/AOSP_13
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

二、初始化仓库并指定分支,更多分支查看 官方代号和分支版本号
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-13.0.0_r7

遇到一个SSL的错误:
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

关闭 git 的 SSL 验证即可,再重新执行 repo 初始化命令

git config --global http.sslverify false

又遇到一个命令的错误:
env: python: No such file or directory
原因是 /usr/bin/python 不存在,也可能链接了 python2,如果已经链接到 python3可以跳过这步

repo的脚本第一行是这样定义的
![在这里插入图片描述](https://img-blog.csdnimg.cn/866b46a5593240f58d379be33b2c3379.png

因此两种办法解决:

  1. 修改第一行定义脚本中的 pythonpython3
vim ~/bin/repo
  1. 使用动态链接的方式把 /usr/bin/python3 链接到 /usr/bin/python 脚本
rm -f /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python

再重新执行 repo 初始化命令

这一步执行成功后,repo 就初始化好了,当前目录下就已经有一个 .repo 的文件夹了,这个目录存放了清单等配置


三、开始同步下载代码: 最后全部下载完耗时大概花了10个小时左右

-j 指定线程数,如果用科大镜像源注意不要设置过大,有限制会失败

time repo sync -j8 #指定线程数为8

time 可以进行计时

![在这里插入图片描述](https://img-blog.csdnimg.cn/75e6dd918f494154a5e75ac619d99556.jpeg#pic_center


四、下载完成

中间被我 Ctrl + C 中断过几次,所以时间不够准确,仅供参考,反正我是直接放着下载一晚上

正在更新文件: 100% (16294/16294), 完成.
正在更新文件: 100% (1904/1904), 完成.m/prebuilts/maven_repo/android正在更新文件:  61% (1162/1904)
正在更新文件: 100% (18247/18247), 完成.
Checking out: 100% (1052/1052), done in 6m48.098s

root@ubuntu:~/AOSP_13#
root@ubuntu:~/AOSP_13# repo sync -j8
Fetching: 100% (1052/1052), done in 3m12.343s
Garbage collecting: 100% (1052/1052), done in 7.501s
Checking out: 100% (1052/1052), done in 47.189s
repo sync has finished successfully.
root@ubuntu:~/AOSP_13# 
root@ubuntu:~/AOSP_13# 

这是最后下载完附近的截图
在这里插入图片描述

下载完成后的源码目录如下:
比 Android12 版本少了一个 compatibility 目录,更详细的可以到 http://aospxref.com 查阅

在这里插入图片描述


七、编译

  1. 初始化编译环境
  2. 使用命令进行编译(过程中才生的 warning 不影响,不要手动中断执行)
# 1. 初始化编译环境
source build/envsetup.sh

# 2.方式一: 到需要编译的目录下执行命令 mm 
mm
# 2.方式二: 指定需要编译目录下 Android.bp 里定义的 name 进行编译
# 例如编译 framework.jar: frameworks/base/Android.bp
make framework-minus-apex

Android10 版本后 frameworks/base/Android.bp 内对 framework 的定义

java_library {
    name: "framework-minus-apex",
    defaults: ["framework-minus-apex-defaults"],
    installable: true,
    
    // For backwards compatibility.
    stem: "framework",
    apex_available: ["//apex_available:platform"],
    visibility: [
       "frameworks/base",
       // TODO(b/147128803) remove the below lines
       "//frameworks/base/apex/appsearch/framework",
       "//frameworks/base/apex/blobstore/framework",
       "//frameworks/base/apex/jobscheduler/framework",
       "//frameworks/base/packages/Tethering/tests/unit",
       "//packages/modules/Connectivity/Tethering/tests/unit",
    ]
}

我需要编译的目录:

framework.jar ---------------- frameworks/base/(实际目录 base/core/java/)
telephony-common.jar --------- frameworks/opt/telephony(实际目录 base/telephony)

编译后对应的输出路径:

out/target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes.jar

编译这两个目录都耗时二十分钟左右,这是一台 Windows11(AMD R5700 + 16G + 512G)编译 Android12 版本的
在这里插入图片描述
在这里插入图片描述

另外,我在这台机器(配置在文首展示)上进行了 mm 的全编,耗时感人:3时25分48秒,不过我没开高频模式,否则应该时间会更短一点吧

开始全编译
开始编译

在这里插入图片描述

强烈建议不要在内存小于 32G 的机器上跑,我的内存都跑满了,否则过于影响其他软件操作体验,我离开浏览器太久,内存紧张都把我标签资源回收了,害得我又补了下午修改的内容(这一篇文是Android12版本更新到13的)
在这里插入图片描述

终于!!! 全编译完了
在这里插入图片描述

Logo

更多推荐