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

2023-11-10

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的)
在这里插入图片描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android13 Windows11-VMware-Ubuntu 源码下载和全编译 的相关文章

  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 如何在 Ubuntu VirtualBox 中运行 Meteor 应用程序并使用 Windows 主机上的编辑器进行编辑?

    我希望在运行 Ubuntu 的 virtualbox 来宾中运行一个用于开发目的的流星服务器 该项目将位于主机上的一个文件夹内 该文件夹将共享给来宾 该文件夹本身位于 Dropbox 文件夹内 这样我可以在多个虚拟机和工作站之间共享开发 但
  • pip:需要将包名称tensorflow-gpu更改为tensorflow

    我正在尝试将具有 GPU 支持的张量流安装到 conda 环境中 我使用命令 pip install ignore installed upgrade https storage googleapis com tensorflow linu
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 卷曲选项 -:未知

    我运行此命令在 ubuntu 18 04 上安装更新版本的 nodejs curl sL https deb nodesource com setup 12 x sudo E bash 我收到错误 curl 选项 未知 我在多个系统上尝试过
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索

随机推荐

  • 错误until the update interval of nexus-releases has elapsed or updates are forced

    错误 until the update interval of nexus releases has elapsed or updates are forced 之前是先往nexues本地库里上传了jar文件 从文件系统里传的 而不是从ne
  • 解决Port 8080 is already in use

    前言 在运行项目的时候报错显示端口号已被占用 如下图 解决方法 第一步 win R打开 输入cmd进入命令窗口 第二步 输入netstat ano回车 找到对应的进程PID为14472 第三步 输入命令tasklist回车 找到对应的进程名
  • 面向对象和面向过程思想概述

    面向过程的思想去实现一个功能的步骤 首先要做什么 怎么做 最后我们再代码体现 一步一步去实现 而具体的每一步都需要我 们去实现和操作 这些步骤相互调用和协作 实现我们的功能 每一个步骤我们都是参与者 并且 需要面对具体的每一个步骤和过程 这
  • 猿人学2023比赛题1~7题解之第一题

    前言 我从不回头看之我跟77的雨后小故事 这题有两个解法 分别是全局扣和找加密魔改点套库 方法一 全局扣 1 加密位置 2 确保在浏览器出值跟浏览器一样 1 先把全部代码拉下来 整体运行 发现会缺东西 这是发包的 直接删了就好 2 然后加密
  • mysql联合for update查询_sql的for update

    欢迎大家吐槽 oracle行级共享锁 通常是通过select from for update语句添加的 同时该方法也是我们用来手工锁定某些记录的主要方法 比如 当我们在查询某些记录的过程中 不希望其他用户对查询的记录进行更新操作 则可以发出
  • 【导航】RT-Thread 学习专栏目录 【快速跳转】

    本文是 矜辰所致 的 RT Thread 记录专栏的内容导航 结合自己的学习应用过程的总结记录 有基础理论 有与FreeRTOS的比较 有实际项目 有应用总结 目录 前言 一 环境篇 二 内核篇 三 设备和驱动篇 四 组件软件包篇 五 应用
  • [异步][jms][activeMq]如何做到重试机制不会导致一条消息被多次执行.

    淘宝海量存储之单机事务面临的问题及解决办法 http blog csdn net jiao fuyou article details 15499261 这篇文章讲的比较好 核心关键词 幂等 Message Queue ActiveMQ r
  • 前端HTML鼠标经过链接变换背景颜色

  • Win10关闭自带键盘的三种方法--亲测第三中命令方式有效(需要重启)

    Win10笔记本关闭自带键盘的方法 方法一 1 在Windows10系统桌面 右键点击桌面上的 此电脑 图标 在弹出菜单中选择 属性 菜单项 2 在打开的Windows系统属性窗口中 点击左侧边栏的 设备管理器 菜单项 3 这时会打开设备管
  • 二叉树及其遍历

    二叉树的定义 二叉二叉顾名思义 二叉树是每个节点最多有两个子树的树结构 二叉树的存储 二叉树的存储分为顺序存储和链式存储 顺序存储 深度为k的二叉树需要预留2 k 1 个存储单元 按编号顺序存储 遇空节点留空位 可以看到上面特别多的空节点
  • spring cloud alibaba使用

    文章目录 架构图 环境搭建 Nacos 下载以及配置 测试使用 界面一些功能 可配置项 nacos自带的ribbon负载均衡 OpenFegin 日志配置 设置超时时间 自定义拦截器 Nacos config 根据nacos上的配置文件获取
  • Spring6 框架学习

    Spring6 框架学习 1 Spring介绍 1 1 简介 2002年 Rod Jahnson 首次推出了 Spring 框架雏形interface21 框架 2004年3月24日 Spring 框架以 interface21 框架为基础
  • QObject: Cannot create children for a parent that is in a different thread

    一篇又臭又长的流水账 要看结论可以直接拉到最后 在一个项目中 需要使用串口接收外部的对射管状态 然后调用传感器 由于在之前的项目中 自制了一个带有UI的串口管理类 继承QDialog 最早在主线程中生成这个串口管理类 但是发现程序变得越来越
  • error Command failed with exit code 1.

    从传统JQuery转变到Node js最烦的就是一接手新项目就得npm install 浪费大量时间不说还总会报莫明其妙的错误 这次又遇到了一个error Command failed with exit code 1 因为它的相关处报的问
  • 100+国产大模型排行榜!部分超越ChatGPT-4

    国产大模型的发展速度惊人 至少说明在国内的显卡数量是足够多的 如果能集中资源 或许能快速跟进ChatGPT 不过 其中不少厂家号称已经超越ChatGPT 4 让人感到欣慰 觉得哪个好 评论区见
  • 【金融】新成立基金建仓时点、行业分布与市场行情关系探究

    需要进一步交流 获取数据和代码的同学欢迎私信奥 基于新成立基金建仓带入市场的巨量资金会推动市场行情这一逻辑 开展了一系列研究 首先提出了通过基金净值识别建仓行为 累计绝对值涨跌幅法 和通过基金 值识别建仓行为 法 的两种方法 在通过回顾历史
  • 一键修改分辨率bat_设置分辨率的批处理

    if computername name1 SETRES h800 v600 b32 f85 if computername name2 SETRES h1024 v768 b32 f85 if computername name3 SET
  • libevent服务端,单线程应用

    libevent版本 libevent 2 1 12 stable include
  • 数据库MySQL与SQLite

    常用数据库及Qt中的用法 一 常用数据库 数据库管理系统 DBMS 是旨在使用 检索和定义规则以验证和操作数据库中的数据的软件 有四种DBMS类型 关系型 面向对象型 分层型和网络型 有很多开源数据库 包括MySQL SQLite等 SQL
  • Android13 Windows11-VMware-Ubuntu 源码下载和全编译

    Windows11 VMware Ubuntu Android13 源码下载和全编译 官方教程文档 想用 Mac 编译源码的朋友基本可以放弃想法了 我试过了各种兼容错误 不得已用了 Windows 装 VMware Ubuntu 一 硬件配