AOSP代码下载及编译

本文详细介绍了如何在无法访问Google的情况下,通过清华源下载和编译AOSP代码。首先,准备环境,安装curl和git。接着,下载并配置repo工具,使用清华源替换Google地址。然后,下载AOSP代码,选择工作目录并执行初始化。代码同步时推荐使用清华源,并限制同步线程数。在切换分支时,可通过查看和切换git分支来完成。最后,文章列举了编译AOSP所需的软硬件要求,并提供了详细的编译步骤,包括全编、模块化编译以及如何将源码导入IDE。此外,还提到了使用emulator启动虚拟机和在真机上运行的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 参考清华源中aosp说明:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

  • 0. 环境准备

    • 安装curl以下载repo

    • 安装git以便同步代码

  • 1. 下载repo工具

    • 在用户目录下创建一个bin目录,以便保存用户自己的可执行文件,然后创建使用curl将repo下载到该目录

      • mkdir ~/bin
        
        PATH=~/bin:$PATH
        
        curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        
        chmod a+x ~/bin/repo

         

      • 因为google被墙,所以上述方式很大概率无法成功执行,因此使用清华源的repo-git镜像,将上面的google地址换为https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

      • mkdir ~/bin
        
        PATH=~/bin:$PATH
        
        curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
        
        chmod a+x ~/bin/repo

         

    • 除此之外还需要将镜像源地址写入到~/.bashrc里,以便repo更新自己,同时将repo写入到PATH里,以便在任何目录下都可以使用该命令。

      • export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
        
        export PATH=~/bin:$PATH

         

  • 下载aosp代码

    • 因为google无法访问的原因,aosp代码的下载还是使用清华源

    • 传统代码下载方式:

      • 创建工作目录

      • 切换到工作目录

      • 使用传统方式初始化代码仓库

        • repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest #下载主分支
          
          # 或
          
          repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b <分支>

           

      • 也可以通过打包下载:打包下载只能下载主分支,可以后续执行分支切换
        • 打包下载下载的是清华源对aosp的打包,每月更新

        • wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
          
          tar xf aosp-latest.tar
          
          cd AOSP   # 解压得到的 AOSP 工程目录# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
          
          repo sync # 正常同步一遍即可得到完整目录# 或 repo sync -l 仅checkout代码

           

  • 代码同步及分支切换

    • 代码同步即执行repo sync,清华源对同步线程数做了限制,过多会返回503错误,推荐为4;

    • 分支切换

      • 一种是拉代码的时候就指定分支:repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b <分支>,因为谷歌被墙的原因,可能一开始不知道准确的分支,或者使用清华源的打包方式下载,没法在一开始就指定分支。

      • 在.repo/manifests文件夹下切分支,在该文件下使用git branch -a即可看到所有的分支信息,使用git checkout <分支> 切换到对应的分支即可,切换完后返回工作目录重新repo sync 一遍。

  • aosp代码编译

    • source.android.com虽然被墙了,没法直接下载aosp源码,但是source.android.google.cn还是可以访问的。https://source.android.google.cn/source/requirements 指明了aosp编译所需要的软硬件要求

      • 硬件要求:

        • Android2.3及以上需要64位环境

        • 硬盘空间至少250G,其中100G用于存放代码,150G用于编译结果及中间文件,如果需要使用ccache,则需要更多空间。

        • 内存应不小于16G

      • 软件要求

        • Ubuntu的长期支持版本(LTS),官方建议Ubuntu 14.04,我的是Ubuntu 18.08

        • 主分支带有预编译的OpenJDK,不需要额外编译,如果是其它较低版本,则可能需要单独安装,具体要求见https://source.android.google.cn/source/requirements#older-versions

          • 操作系统要求

            • Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)

            • Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)

            • Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)

            • Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具

            • Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具

            • Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)

            • Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK

          • JDK要求

            • * Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本

            • * Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg

            • * Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6

            • * Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5

          • Make

            • Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误

        • 其它的python2.6-2.7, GNU Make3.81-3.82,Git1.7及以上,Ubuntu18.08基本都满足要求,没有额外的再配置过。

    • 编译

      • source ./build/envsetup.sh #配置编译环境
        
        lunch #选择编译目标
        
        make -j6 #编译,j6为六线程

         

      • 首次编译必须使用全编,后续可以使用m, mm, mmm 执行全编或模块化编译

        • m:全编,只能在aosp根目录下执行

        • mm:编译当前目录下的所有模块,mma为对应的增量版本,该命令可以cd到模块目录里执行,会在当前目录下查找mk文件,如果没有则向父目录查找

        • mmm:编译指定的模块,如 mmm package/apps/Settings,mmma为对应的增量版本,该命令编译指定路径下的所有模块

  • 将源码导入Android Studio(其实个人更推荐导入Idea,当然两者本质上是一样的,可以屏蔽掉很多Android插件,纯粹的以代码的形式阅读,避免很多奇奇怪怪的错误)

    • 参考https://www.jianshu.com/p/8f9b4e4970c9

    • 代码全编后,执行以下命令

      • mmm ./development/tools/idegen #编译idegen模块
        
        . ./development/tools/idegen/idegen.sh #生成项目文件

         

      • 执行完成后会在源码根目录生成一个Android.ipr文件,使用Android Studio或者Idea打开这个文件,即可导入AOSP源码。
        • IDE只能阅读和修改源码,修改后的源码依然只能通过上述方式编译

  • 虚拟机启动

    • 使用emulator启动虚拟机,该命令只有在执行完source ./build/envsetup.sh以及lunch后才可见,因此每次重新打开shell都需要重新执行一遍上述两个命令。

    • 以这种方式编译的镜像只能供虚拟机启动,即编译目标是arm-eng,如果想要在真机上运行,则应该参考https://source.android.google.cn/source/requirements在aosp代码里预制设备相关的Blob,谷歌亲儿子相对简单很多。如果没有谷歌亲儿子,建议使用Lineage OS的支持设备。

    • LineageOS的下载编译及真机运行见https://blog.youkuaiyun.com/ironlzz/article/details/88922224

 

 

编译AOSP代码时,需要遵循一系列标准化的步骤,并使用特定的命令来初始化环境、选择目标设备以及执行实际的编译过程。以下是详细的说明: ### 初始化构建环境 首先,确保已经安装了所有必要的依赖项。对于Ubuntu 22.04系统,可以运行如下命令安装所需的库和工具: ```bash sudo apt-get install git gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ``` 如果遇到缺少`libncurses5`的问题,可以创建符号链接以使用更高版本的库替代[^4]。 接下来,下载并安装`repo`工具,它用于管理多个Git仓库。可以通过以下方式获取`repo`: ```bash mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo ``` 然后,设置你的Git用户名和邮箱: ```bash git config --global user.name "Your Name" git config --global user.email "you@example.com" ``` 创建一个目录来存放AOSP源码,并进入该目录进行初始化: ```bash mkdir aosp cd aosp repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r50 ``` 这里的分支名`android-14.0.0_r50`可以根据需求更改为其他版本。 同步源代码树: ```bash repo sync ``` ### 配置编译选项 配置编译环境之前,需要加载环境变量脚本: ```bash source build/envsetup.sh ``` 之后,使用`lunch`命令选择要编译的目标产品和构建类型。例如,如果你有一台Nexus 6p真机,可以选择如下配置: ```bash lunch aosp_angler-userdebug ``` 对于模拟器或通用设备,可以选择如下的通用配置: ```bash lunch aosp_x86_64-eng ``` 其中,`-eng`表示工程版本,适合开发用途;`-userdebug`则适用于调试用户版本;而`-user`则是最终发布的用户版本。 ### 执行编译 一旦选择了合适的产品和构建类型,就可以开始编译过程。通常情况下,使用`make`命令加上-j参数指定并行任务数(建议为CPU核心数目的两倍)来进行编译: ```bash make -j$(nproc) ``` 或者,在某些较新的Android版本中可能需要使用`m`命令代替传统的`make`: ```bash m -j$(nproc) ``` 这将启动整个AOSP系统的编译流程,包括Framework、应用和其他组件。 ### 编译后的操作 成功完成编译后,可以在`out/target/product/<product_name>`目录下找到生成的镜像文件。这些镜像可以通过Fastboot工具刷入到支持的设备上,以便测试新编译的ROM。 此外,如果你想将新编译的系统部署到模拟器中,可以直接运行: ```bash emulator ``` 这个命令会启动带有最新编译结果的Android Emulator。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值