一年前刚学Android没多久的时候就开始尝试编译Android源码,前后换过好几个版本均以失败告终。失败的原因主要有以下几个:
环境配置
- 安装 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/binexport JAVA_HOMEexport 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 &
效果如下: