Android 5.1.1 源码编译

一年前刚学Android没多久的时候就开始尝试编译Android源码,前后换过好几个版本均以失败告终。失败的原因主要有以下几个:

  • 网络不稳定:导致源码下载不全
  • 编译环境不对:依赖软件没装全,软件版本不对
    源码动辄一二十G,下载编译时间成本都非常高,差一点没处理好可能就得从头再来,所以编译源码最好能有较长的完整时间.

环境配置

  1. 安装 Ubuntu 14.04 LTS
  2. 配置source list,我用的是清华的源

    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
    $ sudo gedit /etc/apt/sources.list
    替换成
    deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb http://archive.canonical.com/ubuntu/ trusty partner
    deb http://extras.ubuntu.com/ubuntu/ trusty main
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiverse
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiverse
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
    deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiverse
    deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiverse
    deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
    deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
    deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
  3. 安装 & 配置 OpenJDK 7

    1
    2
    3
    4
    5
    6
    7
    8
    $ sudo apt-get update
    $ sudo apt-get install openjdk-7-jdk
    $ sudo gedit /etc/profile
    文件末尾加上:
    JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
    PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
    export JAVA_HOME
    export PATH
  4. 安装 & 配置 git

    1
    2
    3
    $ sudo apt install git
    $ git config --global user.name "你的git用户名"
    $ git config --global user.email "你的git邮箱"
  5. 安装必要的packages

    1
    2
    3
    $ sudo apt-get install g++-multilib
    $ sudo apt-get install bison git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
    $ sudo apt-get install gcc
  6. 安装repo

    1
    2
    3
    4
    5
    6
    7
    如果你是自由网络:
    $ mkdir ~/bin
    $ sudo apt-get install curl
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
    否则安装phablet-tools,它包含 repo:
    $ sudo apt-get install phablet-tools
  7. 修改REPO_URL

    1
    2
    3
    4
    5
    6
    7
    8
    源码我不是直接连官网下的,而是使用了中科大的源,速度很快
    这里我们需要对repo的REPO_URL进行修改
    如果你是使用上面第一种方法安装的repo,那repo的路径是~/bin/repo
    $ sudo gedit ~/bin/repo
    否则路径为/usr/bin/repo
    $ sudo gedit /usr/bin/repo
    修改repo文件,设置REPO_URL如下:
    REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'

下载源码

  1. 初始化
    选一个足够大的分区(最好不小于50G)建一个目录专门存放下载的源码,在该目录下输入一下命令初始化:

    1
    $ repo init -u https://gerrit-googlesource.lug.ustc.edu.cn/git-repo' -b android-5.1.1_r8
  2. 开始下载

    1
    $ sync repo

漫长的等待, 我下载的时候速度在 500KB/s ~ 1.6MB/s 不等,用了大概五个小时

编译源码

  1. 初始化编译环境
    如果你的系统是存放源码的分区是ntfs格式的就需要特别注意了,Linux是不允许ntfs文件系统下文件拥有执行权限的。之前就被这个坑过,以为无解,就把源码转移到非ntfs的分区. 还好这次我找到了解决方法,安装一个软件即可:

    1
    2
    3
    4
    5
    $ sudo apt-get install ntfs-3g
    $ sudo apt-get install ntfs-config
    打开 ntfs-config:
    $ sudo ntfs-config
    赋予相应分区权限

    确保有执行权限后,执行envsetup.sh初始化

    1
    $ . build/envsetup.sh

    选择编译目标

    1
    2
    $ lunch
    执行此命令后会列出所有可供编译的目标,我是打算仍模拟器上跑的,选1就好
  2. 开始编译

    1
    2
    $ make j4
    这里的4表示并发数,可以自己改

编译时间就取决于你的硬件了 少则一两个小时,长则八九个小时都有可能,我的跑了五个多小时,成功提示:
img

  1. 运行
    如果上面一切顺利就可以在模拟器上跑编译出来的镜像了,在源码目录执行以下命令:
    1
    $ emulator &

效果如下:

img

Contents
  1. 1. 环境配置 安装 Ubuntu 14.04 LTS 配置source list,我用的是清华的源 12345678910111213141516171819202122232425$ sudo gedit /etc/apt/sources.list替换成deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiversedeb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiversedeb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiversedeb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiversedeb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiversedeb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiversedeb http://archive.canonical.com/ubuntu/ trusty partnerdeb http://extras.ubuntu.com/ubuntu/ trusty maindeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiversedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiversedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiversedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiversedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiversedeb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse 安装 & 配置 OpenJDK 7 12345678$ sudo apt-get update $ sudo apt-get install openjdk-7-jdk $ sudo gedit /etc/profile 文件末尾加上: JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export PATH 安装 & 配置 git 123$ sudo apt install git$ git config --global user.name "你的git用户名"$ git config --global user.email "你的git邮箱" 安装必要的packages 123$ sudo apt-get install g++-multilib$ sudo apt-get install bison git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip$ sudo apt-get install gcc 安装repo 1234567 如果你是自由网络: $ mkdir ~/bin $ sudo apt-get install curl $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo$ chmod a+x ~/bin/repo 否则安装phablet-tools,它包含 repo: $ sudo apt-get install phablet-tools 修改REPO_URL 12345678源码我不是直接连官网下的,而是使用了中科大的源,速度很快这里我们需要对repo的REPO_URL进行修改如果你是使用上面第一种方法安装的repo,那repo的路径是~/bin/repo$ sudo gedit ~/bin/repo否则路径为/usr/bin/repo$ sudo gedit /usr/bin/repo修改repo文件,设置REPO_URL如下:REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo' 下载源码 初始化选一个足够大的分区(最好不小于50G)建一个目录专门存放下载的源码,在该目录下输入一下命令初始化: 1$ repo init -u https://gerrit-googlesource.lug.ustc.edu.cn/git-repo' -b android-5.1.1_r8 开始下载 1$ sync repo 漫长的等待, 我下载的时候速度在 500KB/s ~ 1.6MB/s 不等,用了大概五个小时 编译源码 初始化编译环境如果你的系统是存放源码的分区是ntfs格式的就需要特别注意了,Linux是不允许ntfs文件系统下文件拥有执行权限的。之前就被这个坑过,以为无解,就把源码转移到非ntfs的分区. 还好这次我找到了解决方法,安装一个软件即可: 12345$ sudo apt-get install ntfs-3g$ sudo apt-get install ntfs-config打开 ntfs-config:$ sudo ntfs-config赋予相应分区权限 确保有执行权限后,执行envsetup.sh初始化 1$ . build/envsetup.sh 选择编译目标 12$ lunch执行此命令后会列出所有可供编译的目标,我是打算仍模拟器上跑的,选1就好 开始编译 12$ make j4这里的4表示并发数,可以自己改 编译时间就取决于你的硬件了 少则一两个小时,长则八九个小时都有可能,我的跑了五个多小时,成功提示: 运行如果上面一切顺利就可以在模拟器上跑编译出来的镜像了,在源码目录执行以下命令:1$ emulator & 效果如下:
  2. 2. 下载源码 初始化选一个足够大的分区(最好不小于50G)建一个目录专门存放下载的源码,在该目录下输入一下命令初始化: 1$ repo init -u https://gerrit-googlesource.lug.ustc.edu.cn/git-repo' -b android-5.1.1_r8 开始下载 1$ sync repo 漫长的等待, 我下载的时候速度在 500KB/s ~ 1.6MB/s 不等,用了大概五个小时 编译源码 初始化编译环境如果你的系统是存放源码的分区是ntfs格式的就需要特别注意了,Linux是不允许ntfs文件系统下文件拥有执行权限的。之前就被这个坑过,以为无解,就把源码转移到非ntfs的分区. 还好这次我找到了解决方法,安装一个软件即可: 12345$ sudo apt-get install ntfs-3g$ sudo apt-get install ntfs-config打开 ntfs-config:$ sudo ntfs-config赋予相应分区权限 确保有执行权限后,执行envsetup.sh初始化 1$ . build/envsetup.sh 选择编译目标 12$ lunch执行此命令后会列出所有可供编译的目标,我是打算仍模拟器上跑的,选1就好 开始编译 12$ make j4这里的4表示并发数,可以自己改 编译时间就取决于你的硬件了 少则一两个小时,长则八九个小时都有可能,我的跑了五个多小时,成功提示: 运行如果上面一切顺利就可以在模拟器上跑编译出来的镜像了,在源码目录执行以下命令:1$ emulator & 效果如下:
  3. 3. 编译源码 初始化编译环境如果你的系统是存放源码的分区是ntfs格式的就需要特别注意了,Linux是不允许ntfs文件系统下文件拥有执行权限的。之前就被这个坑过,以为无解,就把源码转移到非ntfs的分区. 还好这次我找到了解决方法,安装一个软件即可: 12345$ sudo apt-get install ntfs-3g$ sudo apt-get install ntfs-config打开 ntfs-config:$ sudo ntfs-config赋予相应分区权限 确保有执行权限后,执行envsetup.sh初始化 1$ . build/envsetup.sh 选择编译目标 12$ lunch执行此命令后会列出所有可供编译的目标,我是打算仍模拟器上跑的,选1就好 开始编译 12$ make j4这里的4表示并发数,可以自己改 编译时间就取决于你的硬件了 少则一两个小时,长则八九个小时都有可能,我的跑了五个多小时,成功提示: 运行如果上面一切顺利就可以在模拟器上跑编译出来的镜像了,在源码目录执行以下命令:1$ emulator & 效果如下:
|