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
为方便操作,安装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的脚本第一行是这样定义的
因此两种办法解决:
- 修改第一行定义脚本中的 python 为 python3
vim ~/bin/repo
- 使用动态链接的方式把 /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 可以进行计时
四、下载完成
中间被我 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 查阅
七、编译
- 初始化编译环境
- 使用命令进行编译(过程中才生的 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的)
终于!!! 全编译完了