Android源码编译--编译过程

6.0源码下载

下载方式有很多,出的去可以直接去Google Source下载,或者别人共享资源(有些会出现解压报错),或者镜像站AOSP下载

前提条件:Ubuntu14.04环境
AOSP镜像下载:

1.下载repo文件,自行下载
2.修改repo文件中REPO_URL

google的地址   
REPO_URL = 'https://gerrit.googlesource.com/git-repo'   
改为清华大学的地址   
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

3.将改好repo文件拷贝到"/usr/bin/"文件夹下,并赋予“可读可写可执行”权限,

chmod a+x repo

可省去以下配置变量步骤

mkdir ~/bin
PATH=~/bin:$PATH

4.创建代码目录(Linux文件目录区分大小写)

mkdir /Documents/android_source 
cd /Documents/android_source

5.初始化仓库

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r72
#-b 后面的参数为分支的名称,每个版本的分支名称可以在android官网列表中查看https://android.googlesource.com/platform/build/

下载完成后,当前目录下会出现.repo目录的隐藏文件夹,进入子目录中可看到manifest文件包含各个分支的版本号说明,代码都是根据它从checkout出来的,这个文件夹特别大,我下载完成后查询内存大小为70G,

6.同步源码树(以后只需执行这条命令来同步)

repo sync
# 支持(-j4) 表示并发数为4,清华镜像只支持最大并发数4

剩下的就是等待下载完成了,android-6.0.1_r72的源码内存大小在30G。如果没有删除.repo文件夹,以后只需每次运行“repo sync”即可保持同步。

另一种源码下载方式:
分卷下载,md5sum校验文件是否损坏,cat合并成.tgz文件,解压

OpenJdk7安装

sudo apt-get update  
sudo apt-get install openjdk-7-jdk  
sudo update-alternatives --config java  
sudo update-alternatives --config javac

编译所需的包,预安装

sudo apt-get install git gnupg flex bison gperf build-essential  
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev  
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386  
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos  
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386  
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

开始编译,进入到源码所在的目录,命令如下

source build/envsetup.sh

lunch        ##运行命令之后会提示选择编译目标,我选择默认目标,即aosp_arm_eng
make        ##(也可以使用 make -j4 四线程编译)

注:我使用的是make,没有加-jx ,主要是用的虚拟机,没有分配太多CPU资源,中间出现过虚拟机无响应,强制关机之后,出现无法打开Ubuntu图形界面,而是进入了tty命令模式,痛苦的不行。

以下是编译过程出现的异常汇总:

解决:Android M引入了Jack (Java Android Compiler Kit),在编译时会启动jack server,优化编译速度等。
如果遇到jack编译错误,可以把$HOME/.jack中的配置文件中的SERVER=true设成false,不用jack,jack现在还不稳定。此外,M对应的是OpenJDK7。

还有一个关于Java VM内存不够的问题,没有保存到截图,没做任何处理,重新make就好了。

OpenJDK Client VM - Cannot allocate memory

另一种解决方案:

中间等待的时间有点长,花费时间跟虚拟机的配置有关,我画了4个小时左右。

生成system.img所在目录:/out/target/product/generic/system.img

编译完成后,可以运行模拟器了,如果我们上图的命令界面还在,可以直接输入命令

emulator

或者当前界面关了,可以运行如下这些命令

$ source build/envsetup.sh
$ lunch 
$ emulator

我的因为是tty命令模式界面,emulator启动失败了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章