• Windows11 VMware-Ubuntu-Android12 源码下载和编译


    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
    
    • 1
    • 2
    • 3

    四、工具下载

    安装依赖:

    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
    
    • 1

    安装常用工具:

    repo: apt-get install repo

    curl: apt-get install curl

    vim: apt-get install vim

    git: apt-get install git

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    六、下载

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

    在这里插入图片描述

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

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

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

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

    git config --global http.sslverify false
    
    • 1

    又遇到一个命令的错误:
    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
    1. 使用动态链接的方式把 /usr/bin/python3 链接到 /usr/bin/python 脚本
    rm -f /usr/bin/python
    ln -s /usr/bin/python3 /usr/bin/python
    
    • 1
    • 2

    再重新执行 repo 初始化命令

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


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

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

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

    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# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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",
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    我需要编译的目录:

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

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

  • 相关阅读:
    COLLABORATIVE DESIGNER FOR SOLIDWORKS® 新功能
    uniapp报错:Cannot find module ‘@babel/parser‘
    python3.8,torch1.10.2+cu113、torch-geometric 安装
    【C++】二叉搜索树
    爬虫一般采用什么代理IP,Python爬虫代理IP使用方法详解
    OblivSketch: Oblivious Network Measurement as a Cloud Service
    全栈开发实战|Vue进阶——使用静态模块打包工具webpack
    Vanilla JS速度超越了vue/react/svelte---kalrry
    DDOS和CC攻击区别,哪种对服务器伤害大
    can通信注意事项
  • 原文地址:https://blog.csdn.net/qq_39420519/article/details/126938212