0%

国内Android源码下载编译配置

好久之前就想着下载安卓源码了,但是一直没有时间,也没有比较稳定的资源。梯子很是不稳定,速度也不行,所以一直拖着。直到最近换工作了,主要是做framework层的东西,所以又燃起了研究源码的兴趣,于是网上查了一通,失败过,但是很庆幸的是最终我成功了,特来次记录下来,以备不时之需。下面,我以Mac系统为例,介绍源码下载和编译过程。

配置repo

  • 下载repo

    首先,新建目录,用来存放repo脚本:

    1
    2
    3
    4
    mkdir ~/bin
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    # 如果以上地址无法访问,请使用下面地址下载
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
  • 配置环境变量

    这里主要是吧下载下来的repo脚本添加到环境变量里面,为了后面使用方面,编辑~/.bash_profile,在其中添加如下脚本。

    1
    2
    3
    export REPO=~/bin
    export PATH=$PATH:$REPO
    source ~/.bash_profile
  • 添加执行权限
    主要是给repo脚本添加执行权限,否则无法执行脚本。配置好后终端输入repo发现可以显示帮助信息,说明配置成功了。

    1
    chmod a+x ~/bin/repo

初始化仓库

这里主要是使用repo脚本来初始化仓库信息,后面可以通过初始化后的仓库信息来下载源码。获取Google最新代码仓库:

1
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

如果需要下载指定版本的安卓源码,可以到这里查看版本信息,比如下载4.0.1的代码:

1
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

获取源码

仓库初始化成功后,就可以进行代码拉取了,需要说明的是,安卓源码的仓库比较大,现在最新的应该有200多个G了,所以要预留好空间,以免下载到最后因为空间不足而失败。全仓拉取大码,更新代码也用这个命令:

1
2
3
4
repo sync
# 或者仅仅需要拉取某一个模块的代码,例如,只拉取framework的源码
repo sync frameworks/base
# 具体的小的仓库名称,可以到工作目录下的.repo/manifest.xml中查看

源码拉取一般时间比较长,建议选择晚上进行,设置好电脑别休眠了,早上起来应该就下载好了。

编译

  • 加载命令
    使用如下命令加载编译指令(envsetup.sh文件存放在Android源代码根目录下的build目录下)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    cd build
    source envsetup.sh
    # 这里主要加载的命令有:
    function help() # 显示帮助信息
    function get_abs_build_var()           # 获取绝对变量
    function get_build_var()             # 获取绝对变量
    function check_product()             # 检查product
    function check_variant()             # 检查变量
    function setpaths()             # 设置文件路径
    function printconfig()              # 打印配置
    function set_stuff_for_environment()       # 设置环境变量
    function set_sequence_number()         # 设置序号
    function settitle()                # 设置标题
    function choosetype()               # 设置type
    function chooseproduct()             # 设置product
    function choosevariant()             # 设置variant
    function tapas()                 # 功能同choosecombo
    function choosecombo()              # 设置编译参数
    function add_lunch_combo()            # 添加lunch项目
    function print_lunch_menu()            # 打印lunch列表
    function lunch()                 # 配置lunch
    function m()                   # make from top
    function findmakefile()              # 查找makefile
    function mm()                   # make from current directory
    function mmm()                  # make the supplied directories
    function croot()                 # 回到根目录
    function cproj()
    function pid()
    function systemstack()
    function gdbclient()
    function jgrep()                 # 查找java文件
    function cgrep()                 # 查找c/cpp文件
    function resgrep()
    function tracedmdump()
    function runhat()
    function getbugreports()
    function startviewserver()
    function stopviewserver()
    function isviewserverstarted()
    function smoketest()
    function runtest()
    function godir ()                 # 跳到指定目录 405
  • 选择平台
    选择平台编译选项,主要是控制台列出所有可供选择的平台,使用哪个平台根据具体情况而定,例如选择6735_debug

    1
    lauch
  • 编译
    这里主要是使用make进行源码编译,例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 编译framework
    make framework
    # 编译资源apk
    make framework-res
    # 构建可以指定分配的的系统资源,如CPU,内存等
    # 比如两核两线差可以指定j4,数字越高编译越快,前提你的电脑硬件要支持:
    make framework framework-res -j4
    # 编译system.img镜像
    make -j4
  • 启动模拟器

    1
    emulator

切换分支(获取不同版本源码)

  • 查看所有版本分支信息
    仓库初始化成功后,然后执行以下命令查看所有可切换的分支:
1
2
cd .repo/manifests
git branch -a cut -d / -f 3
  • 切换分支(版本)

    如果我们下载了最新的源码,邮箱查看其它版本(例如:4.1.1_r4),可以使用以下方式进行,这样会比单独执行命令下载快的多(因为会进行增量下载):

1
2
3
4
5
6
7
repo init -b android-4.1.1_r4
repo sync
# 如果原来是版本android-4.3_r2.3,又想切回去,可以执行:
repo init -b android-4.3_r2.3
repo sync
# 或者使用如下方式
repo forall -c "git checkout android-4.3_r2.3"

我这里简单介绍了安卓源码的下载和编译过程,也是为了以后自己能够在忘了的时候有一个可以查看的地方,当然希望能够帮得想要编译源码而不知道如何下手的同学,最后附上清华大学的AOSP教程地址

坚持原创技术分享,您的支持将鼓励我继续创作!
Wihatow 微信

微信

Wihatow 支付宝

支付宝