编译android源码编译环境是什么意思

  此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把Android6.0的源码,但是昨天编译完之后已经很晚了,没来得及记录编译的步骤,今天才慢悠悠地来记录一下我在Ubuntu Server14.04上编译Android6.0源码的步骤。好了,废话不多说,我们开始吧!
  步骤一:
  安装Ubuntu系统。我们既可以通过虚拟机的方式安装Ubuntu,也可以直接在电脑上安装,为了获得更好的Linux操作体验,我建议直接在电脑上面安装Ubuntu,我在自己电脑上安装了win10和Ubunut Server14.04双系统,使用的时候可以根据自己的需要随时切换系统,非常方便。关于如何搭建双系统,网上有很多教程,我就不在此叙述了,但是我想说明的一点是在安装Ununtu的时候,分配给Ubuntu的磁盘空间一定要尽可能大一点,至少60G,我分配了105G,编译完成之后还剩下50多G,也就是说差不多用了近50G的空间,所以安装Ubuntu的时候一定得分配大一点的磁盘空间,不然编译会因为空间不足而中断。
  步骤二:
  搭建好Ubuntu系统之后,我们需要下载一份Android6.0的源码,网上很多文章都介绍了如何通过repo的方式来下载源码,但是通过这种方式下载速度可能并不是很理想,我是直接下载的别人已经上传到百度云的Android6.0源码,下载地址:/s/1o6N86a2#path=%252F。
  因为Android6.0的源码所占空间非常大,所以上传者把Android源码分成了很多个文件,待全部下载完毕之后,我们可以通过命令把这些分开的文件合并为一个文件。
  步骤三:
  如果我们是在Windows上下载的源码,那么当我们打开Ubuntu之后,要做的第一件事请就是把Windows中的Android源码拷贝到Ubuntu系统下面,我直接利用复制粘贴的方式将源码拷贝到了Ubuntu的Home目录下面,拷贝之后的目录结构Home/android6_r1/各个分开的源码文件。
  步骤四:
  合并这些被分开的源码文件。我们按下键盘上的ctrl + alt + T打开控制台,通过cd命令进入到Home/android6_r1/目录下面,然后执行命令:cat Android6_r1_* & M.tgz,不用多久,在Home/android6_r1/目录下面就会生成一个新的文件&&M.tgz,M.tgz就是合并之后的压缩文件。
  步骤五:
  解压步骤四生成的压缩文件。同样是在Home/android6_r1/目录下面,我们在控制台执行命令:tar zxvf M.tgz,开始解压。解压的过程大概需要20分钟左右的时间,请耐心等待。解压好了之后,在Home/android6_r1/会生成一个mydroid的文件夹,这个文件夹就是Android源码的根文件夹了,里面有abi、devices、hardware、packages、sdk、art等文件夹和文件。  
  步骤六:
  安装编译源码所需要的软件。在控制台中我们通过cd..命令退回到Unbuntu用户的根目录下,然后依次执行以下命令:
  sudo apt-get update
  sudo apt-get install openjdk-7-jdk
  sudo update-alternatives --config java
  sudo update-alternatives --config javac
  以上命令每一条都必须分开单独执行,目的是为了获取1.7版本的jdk并设置环境变量。当我们安装完Ubuntu之后可能会自带一个jdk,但是如果用自带的jdk编译Android源码很可能会提示jdk版本不符合要求的错误,因此我们需要重新下载1.7版本的jdk,我用openjdk-7-jdk编译未出现任何问题。
  接下来继续执行以下命令,同样每一行都是分开单独执行的:
  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
  以上命令主要是安装编译源码时需要用到的各种软件,如果没有安装这些软件,编译的过程中会提示缺少必要的软件而无法继续编译,因此,在正式编译源码之前,一定要先安装这些软件。
  步骤七:
  开始编译。在控制台中通过cd命令进入到Home/android6_r1/mydroid/目录下,然后执行命令:source build/envsetup.sh,导入编译Android源码所需的环境变量和其它参数。
  步骤八:
  在控制台中执行命令:lunch,运行命令之后会提示我们选择编译目标。这里我选择的的默认目标,即aosp_arm_eng。
  步骤九:
  在控制台中执行命令:make -j8,开始编译。注意,make -j8命令中的数字8和我们电脑的CPU核心数以及线程数有关系,一般这个数字的数值最大不能超过CPU线程数的2倍,例如我电脑的处理器是i5 6200U,为双核四线程,因此编译Android源码的时候,我可以设置的最大工作线程数量为4 * 2 = 8。在执行make命令的时候我们应该根据自己的CPU参数设置合理的工作线程数值。
  以上步骤执行完之后,就是一段非常漫长的等待了,我从中午十二点多开始编译,一直到晚上九点多编译完成,整个编译过程耗时九个多小时,幸好我的运气还不错,编译过程中没有出现任何错误,只是中途意外中断了一次,但是Android源码是可以接着上次中断的位置继续编译的,已经编译的部分不会重复编译,因此并未对我造成大的影响。同志们,我想说的是,编译的过程中一定要有耐心哟!
  整个源码编译完成之后,如果提示如下信息,那么Congratulations, you are successful!!!
  此时,你可以直接执行命令:emulator,执行之后将会出现android模拟器的界面,如图:
  OK,至此Android6.0源码的编译就大功告成了,接下来我们就可以随心所欲地阅读和修改源码内容,定制自己心目中的Android系统了!
阅读(...) 评论()经验17008 米
在线时间1460 小时
版本V9.1.7.0.NDECNEI
女生内裤卸载博士
机型小米MIX2
签到次数71
MIUI版本V9.1.7.0.NDECNEI
一、获取Android源代码Git是linux Torvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(Repository),许多个工作目录(Working Copy),而在Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNU Arch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。
因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。
在Ubuntu上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
apt-get命令一般需要root权限执行,所以一般跟着sudo命令。sudo apt-get install git-core curl
这条命令会从互联网的软件仓库中安装git-core和curl。
其中curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。curl
&a target=&_blank& href=&http://android.git.kernel.org/repo&&
&~/bin/repo
这句命令会下载repo脚本文件到当前主目录的/bin目录下,并保存在文件repo中。
最后我们需要给repo文件可执行权限chmod a+x
~/bin/repo
接下来我们就可以利用repo脚本和Git、curl软件获取Android的源代码了:)
首先建一个目录,比如~/android。
然后使用下面命令获取源码:repo init –u
git://android.git.kernel.org/platform/manifest.git
这个过程会持续很长的时间(笔者下载了一天),下载完毕后会看到repo
initialized in /android这样的提示,说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。
如果我们想拿某个分支版本的代码,而不是主线代码,需要使用-b参数指定branch的名字,比如:repo init –u
git://android.git.kernel.org/platform/manifest.git –b
如果我们只是想获取某一个project的代码,比如kernel/common,就不需要repo脚本了,直接使用Git工具即可,如果仔细研究repo脚本会发现,repo脚本其实就是组织Git工具去获取各个Project并把它们组织到同一个项目Android内。git
git://android.git.kernel.org/kernel/common.git
我们上面使用repo脚本获取了各个项目,那么接下来就需要把整个Android代码树同步到本地,如下:
sync project1 project2 …
笔者使用repo sync命令直接同步全部项目到本地。
二、源码编译
全部同步完毕后,进入到Android目录下,使用make命令编译,你会发现出现如下错误提示:
host C: libneo_cgi &=
external/clearsilver/cgi/cgi.c
external/clearsilver/cgi/cgi.c:22:18: error:
zlib.h: No such file or
这个错误是因为我们缺少zlib1g-dev,需要使用apt-get命令从软件仓库中安装,如下:sudo apt-get install
zlib1g-dev
同理,我们还需要依次安装如下软件
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install libsdl-dev
sudo apt-get install libesd0-dev
sudo apt-get install libncurses5-dev
sudo apt-get install
libx11-dev
以上软件全部安装完毕后,运行make命令再次编译Android源码。
这个时候你会发现出现很多Java文件无法编译的错误,打开Android的源码我们可以看到在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有很多java源文件,这意味着编译Android之前需要先安装jdk。
首先从SUN官方网站下载jdk-6u16-linux-i586.bin文件并安装它。
8.04中,/etc/profile文件是全局的环境变量配置文件,它适用于所有的shell。在我们登陆Linux系统时,首先启动/etc/profile文件,然后再启动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中的其中一个,执行的顺序和上面的排序一样。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc文件。
所以我们只需要把JDK的目录放到/etc/profile里即可,如下:JAVA_HOME=/usr/local/src/jdk1.6.0_16
PATH=$PATHJAVA_HOME/bin:/usr/local/src/android-SDK-linux_x86-1.1_r1/tools:~/bin
然后重新启动一下机器,输入java
–version命令,提示如下信息代表配置成功:
java version &1.6.0_16&
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode,
在编译完整个项目后,终端会出现如下提示:
Target system fs image:
out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image:
out/target/product/generic/system.img
Target ram disk:
out/target/product/generic/ramdisk.img
Target userdata fs image:
out/target/product/generic/userdata.img
Installed file list:
out/target/product/generic/installed-files.txt
root@dfsun2009-desktop:/bin/android#
三、源码运行
在编译完整个项目后,如果我们需要观看编译后的运行效果,那么就需要在系统中安装模拟器android-sdk-linux_x86-1.1_r1,这个SDK的下载地址为:
解压后需要把/usr/local/src/android-sdk-linux_x86-1.1_r1/tools目录加入到系统环境变量/etc/profile中。
然后找到编译后android的目录文件out,我们发现在android/out/host/linux-x86/bin下多了很多应用程序,这些应用程序就是android得以运行的基础,所以我们需要把这个目录也添加到系统PATH下,在$HOME/.profile文件中加入如下内容:PATH=”$PATHHOME/android/out/host/linux-x86/bin”
接下来我们需要把android的镜像文件加载到emulator中,使得emulator可以看到android运行的实际效果,在$HOME/.profile文件中加入如下内容:ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
ANDROID_PRODUCT_OUT
然后重新启动机器。
下面就可以进入到模拟器目录中并启动模拟器cd
$HOME/android/out/target/product/generic
emulator -image system.img -data
userdata.img -ramdisk
ramdisk.img
总结一下安装过程中的关键点:
1:JDK版本必须安装
2:利用下面的命令确保所需软件都被正确安装sudo
apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev
build-essential python vaLGrind curl
3:内存及虚拟内存保证在2GB以上,可以采用命令行free -m查看内存是否足够,如果内存不够终端停滞
一、获取Android源代码Git是linux
Torvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(Repository),许多个工作目录(Working
Copy),而在Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNU
Arch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。
因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。
8.04上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。apt-get命令一般需要root权限执行,所以一般跟着sudo命令。sudo
apt-get install git-core curl
这条命令会从互联网的软件仓库中安装git-core和curl。
其中curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。
&~/bin/repo 这句命令会下载repo脚本文件到当前主目录的/bin目录下,并保存在文件repo中。 最后我们需要给repo文件可执行权限
chmod a+x ~/bin/repo 接下来我们就可以利用repo脚本和Git、curl软件获取Android的源代码了:)
首先建一个目录,比如~/android。然后使用下面命令获取源码:repo init –u
git://android.git.kernel.org/platform/manifest.git
这个过程会持续很长的时间(笔者下载了一天),下载完毕后会看到repo
initialized in /android这样的提示,说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。
如果我们想拿某个分支版本的代码,而不是主线代码,需要使用-b参数指定branch的名字,比如:repo init –u
git://android.git.kernel.org/platform/manifest.git –b
如果我们只是想获取某一个project的代码,比如kernel/common,就不需要repo脚本了,直接使用Git工具即可,如果仔细研究repo脚本会发现,repo脚本其实就是组织Git工具去获取各个Project并把它们组织到同一个项目Android内。git
git://android.git.kernel.org/kernel/common.git
我们上面使用repo脚本获取了各个项目,那么接下来就需要把整个Android代码树同步到本地,如下:repo
sync project1 project2 …
笔者使用repo sync命令直接同步全部项目到本地。 二、源码编译
全部同步完毕后,进入到Android目录下,使用make命令编译,你会发现出现如下错误提示:host C: libneo_cgi &=
external/clearsilver/cgi/cgi.c external/clearsilver/cgi/cgi.c:22:18: error:
zlib.h: No such file or
这个错误是因为我们缺少zlib1g-dev,需要使用apt-get命令从软件仓库中安装,如下:sudo apt-get
install zlib1g-dev
同理,我们还需要依次安装如下软件
sudo apt-get install flexsudo apt-get install bison
sudo apt-get install gperfsudo apt-get install
libsdl-dev
sudo apt-get install libesd0-dev
sudo apt-get install libncurses5-dev
sudo apt-get install libx11-dev
以上软件全部安装完毕后,运行make命令再次编译Android源码。
这个时候你会发现出现很多Java文件无法编译的错误,打开Android的源码我们可以看到在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有很多java源文件,这意味着编译Android之前需要先安装jdk。首先从SUN官方网站下载jdk-6u16-linux-i586.bin文件并安装它。
8.04中,/etc/profile文件是全局的环境变量配置文件,它适用于所有的shell。在我们登陆Linux系统时,首先启动/etc/profile文件,然后再启动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中的其中一个,执行的顺序和上面的排序一样。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc文件。&&
所以我们只需要把JDK的目录放到/etc/profile里即可,如下:JAVA_HOME=/usr/local/src/jdk1.6.0_16
PATH=$PATHJAVA_HOME/bin:/usr/local/src/android-SDK-linux_x86-1.1_r1/tools:~/bin
然后重新启动一下机器,输入java
–version命令,提示如下信息代表配置成功:
java version &1.6.0_16&Java(TM)
SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode,
在编译完整个项目后,终端会出现如下提示:Target system fs image:
out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.imgInstall
system fs image: out/target/product/generic/system.imgTarget ram disk:
out/target/product/generic/ramdisk.imgTarget userdata fs image:
out/target/product/generic/userdata.imgInstalled file list:
out/target/product/generic/installed-files.txtroot@dfsun2009-desktop:/bin/android#
三、源码运行
在编译完整个项目后,如果我们需要观看编译后的运行效果,那么就需要在系统中安装模拟器android-sdk-linux_x86-1.1_r1,这个SDK的下载地址为:
解压后需要把/usr/local/src/android-sdk-linux_x86-1.1_r1/tools目录加入到系统环境变量/etc/profile中。
然后找到编译后android的目录文件out,我们发现在android/out/host/linux-x86/bin下多了很多应用程序,这些应用程序就是android得以运行的基础,所以我们需要把这个目录也添加到系统PATH下,在$HOME/.profile文件中加入如下内容:PATH=”$PATHHOME/android/out/host/linux-x86/bin”
接下来我们需要把android的镜像文件加载到emulator中,使得emulator可以看到android运行的实际效果,在$HOME/.profile文件中加入如下内容:ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/genericexport
ANDROID_PRODUCT_OUT
然后重新启动机器。 下面就可以进入到模拟器目录中并启动模拟器cd
$HOME/android/out/target/product/genericemulator -image system.img -data
userdata.img -ramdisk ramdisk.img
总结一下安装过程中的关键点:1:JDK版本必须安装2:利用下面的命令确保所需软件都被正确安装sudo apt-get install flex
bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential python
valgrind curl git
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验4675 米
在线时间418 小时
版本7.11.13
机型小米手机5
签到次数210
MIUI版本7.11.13
通过手机发布
快看看快看看
经验1004 米
在线时间4 小时
版本6.12.15
积分 970, 距离下一级还需 1030 积分
积分 970, 距离下一级还需 1030 积分
机型未知设备
签到次数104
MIUI版本6.12.15
通过手机发布
经验3634 米
在线时间294 小时
版本6.11.23
积分 4303, 距离下一级还需 697 积分
积分 4303, 距离下一级还需 697 积分
机型小米手机5
签到次数158
MIUI版本6.11.23
通过手机发布
经验279 米
在线时间73 小时
版本7.2.16
积分 372, 距离下一级还需 128 积分
积分 372, 距离下一级还需 128 积分
机型小米手机2/2S
签到次数16
MIUI版本7.2.16
额额额额额 额额
经验665 米
在线时间225 小时
版本3.6.14
积分 1028, 距离下一级还需 972 积分
积分 1028, 距离下一级还需 972 积分
机型小米手机1/1S
签到次数14
MIUI版本3.6.14
通过手机发布
经验3050 米
在线时间170 小时
积分 3858, 距离下一级还需 1142 积分
积分 3858, 距离下一级还需 1142 积分
机型小米手机2/2S
签到次数86
MIUI版本5.9.2
通过手机发布
不懂,但还是觉得很厉害,帮顶!
经验2065 米
在线时间164 小时
版本7.11.9
积分 2416, 距离下一级还需 2584 积分
积分 2416, 距离下一级还需 2584 积分
机型小米手机4电信4G版
签到次数104
MIUI版本7.11.9
uhlkhlkhlkhlkhklhklhlkhlkhlkh
经验2573 米
在线时间343 小时
版本7.10.26
MIUI JB 内侧组
机型小米手机5
签到次数16
MIUI版本7.10.26
经验1916 米
在线时间46 小时
版本V8.5.3.0.NDECNEF
积分 2015, 距离下一级还需 2985 积分
积分 2015, 距离下一级还需 2985 积分
机型小米MIX2
签到次数155
MIUI版本V8.5.3.0.NDECNEF
是适配机型还是?
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
万圣节勋章
参加回帖活动
米兔月饼勋章
参加回帖活动
MIUI 9纪念勋章
小火箭勋章
神舟11号 话题活动
MIUI 300周
MIUI 300周更新纪念勋章
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
已关注微信
已关注极客秀微信
2017年小金鸡勋章
回复2016年度评选活动贴
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号打造自己的Android源码学习环境之五:编译Android源代码_iOS开发_动态网站制作指南
打造自己的Android源码学习环境之五:编译Android源代码
来源:人气:1297
打造自己的Android学习环境之五:编译Android源代码
下载android源代码之后,可以开始编译了。
0. 编译Android源码
0.1 设置环境
当前目录是执行repo init时所在的目录。
$ . build/envsetup.sh
$ source build/envsetup.sh
$ source build/envsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-ms64/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/google/dragon/vendorsetup.sh
including device/google/marlin/vendorsetup.sh
including device/htc/flounder/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/linaro/hikey/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including sdk/bash_completion/adb.bash
0.2 选择编译目标
执行lunch,选择默认的aosp_arm-eng。
也可以直接执行lunch aosp_arm-eng
You're building on
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. aosp_x86_64-eng
7. full_fugu-userdebug
8. aosp_fugu-userdebug
9. mini_emulator_arm64-userdebug
10. m_e_arm-userdebug
11. m_e_mips64-eng
12. m_e_mips-userdebug
13. mini_emulator_x86_64-userdebug
14. mini_emulator_x86-userdebug
15. aosp_dragon-userdebug
16. aosp_dragon-eng
17. aosp_marlin-userdebug
18. aosp_sailfish-userdebug
19. aosp_flounder-userdebug
20. aosp_angler-userdebug
21. aosp_bullhead-userdebug
22. hikey-userdebug
23. aosp_shamu-userdebug
Which would you like? [aosp_arm-eng]
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=7.1.1
TARGET_ODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.2.0-16-generic-x86_64-with--15.10-wily
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=N6F26Q
OUT_DIR=out
============================================
执行make。大概编译5~6个小时。
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=7.1.1
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.2.0-16-generic-x86_64-with-Ubuntu-15.10-wily
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=N6F26Q
OUT_DIR=out
============================================
Running kati to generate build-aosp_arm.ninja...
including ./tools/external/fat32lib/Android.mk ...
including ./tools/test/connectivity/Android.mk ...
Starting build with ninja
ninja: Entering directory `.'
0% 13/22958] Ensure Jack server is installed and started
Jack server already installed in "/home/galian/.jack-server"
Server is already running
0% 17/22958] build out/target/common/obj/_LIBRARIES/sdk_v13_intermediates/classes.jack
[ 97% ] host Java: android-icu4j-tests-host (out/host/common/obj/JAVA_LIBRARIES/android-icu4j-tests-host_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe tions.
Note: Recompile with -Xlint:unchecked for details.
[100% ] host Executable: primitives_tests_32 (out/host/linux-x86/obj32/EXECUTABLES/primitives_tests_intermediates/primitives_tests32)
#### make completed successfully (04:37:17 (hh:mm:ss)) ####
编译完成之后,Android源码目录占用空间,大概85GB:
其中代码20GB,.repo目录占用34GB,out目录占用31GB。
1. 可能出现的问题
1.1 You are attempting to build with the incorrect version of java.
如果安装了openjdk-8,但是编译的是Android 6.0.1的代码(或者之前的版本),会报如下错误:
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version of java.
Your version is: openjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode).
The required version is: "1.7.x"
Please follow the machine setup instructions at
/source/initializing.html
************************************************************
build/core/main.mk:171: *** stop。 停止。
#### make failed to build some targets (5 seconds) ####
解决方法:
sudo apt-get install openjdk-7-jdk
sudo apt-get install openjdk-7-jre
1.2 No space left on device
Created filesystem with
inodes and 216 blocks
Install system fs image: out/target/product/generic/system.img
acp: failed writing 'out/target/product/generic/system.img': No space left on device
build/core/Makefile:1042: recipe for target 'out/target/product/generic/system.img' failed
make: *** [out/target/product/generic/system.img] Error 1
make: *** Deleting file 'out/target/product/generic/system.img'
没有剩余空间了,这是由于之前分配给虚拟系统的硬盘空间太少了。
一个缓解此问题的方法是,删除.repo目录。.repo目录大概占用34GB左右的空间。
1.3 Communication error with Jack server
问题log如下:
[ 35% ] build out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack
FAILED: /bin/bash -c "(mkdir -p out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack.tmpjill.res ) && (unzip -qo prebuilts/sdk/15/android.jar -d out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack.tmpjill.res ) && (find out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack.tmpjill.res -iname \"*.class\" -delete ) && (JACK_VERSION=3.36.CANDIDATE out/host/linux-x86/bin/jack @build/core/jack-default.args --verbose error
-D jack.import.resource.policy=keep-first -D jack.import.type.policy=keep-first -D jack.android.min-api-level=1 --import prebuilts/sdk/15/android.jar --import-resource out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack.tmpjill.res --output-jack out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack ) && (rm -rf out/target/common/obj/JAVA_LIBRARIES/sdk_v15_intermediates/classes.jack.tmpjill.res )"
Communication error with Jack server (56). Try 'jack-diagnose'
[ 35% ] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Communication error with Jack server (56). Try 'jack-diagnose'
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
解决方法,可以试试执行如下命令:
$ jack-admin start-server
Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/galian/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
1.4 Out of memory error (version 1.2-rc4 ‘Carnac’ …)
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (d7bdecfceb327f9d201aa843843 by android-jack-)).
Java heap space.
Try increasing heap size with java option '-Xmx&size&'.
Warning: This may have produced partial or corrupted output.
[ 34% ] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/libprotobuf-java-nano_intermediates/classes.jack
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
解决方法:
上面已经给出提示:Try increasing heap size with java option '-Xmx&size&'。
【注意】:以下执行jack-admin的环境是刚才出现编译错误的Terminal。如果是在新的Terminal中执行jack-admin,需要先执行source build/envsetup.sh和lunch。
$ which jack-admin
/home/galian/android/out/host/linux-x86/bin/jack-admin
当前已经有jack-server在运行:
$ jack-admin list-server
31645 java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/galian/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
所以,具体的修改方法如下:
第一步,停止Server:jack-admin stop-server。
第二步,添加-Xmx2048m或者-Xmx2g,当然也可以设置更大的内存,例如-Xmx3g。
打开prebuilts/sdk/tools/jack-admin文件,有2种修改方式,选其一即可,我采用的是方式2,设置的是-Xmx3g:
修改29行 JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation}",改为JACK_SERVER_VM_ARGUMENTS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation"。注意:这里不再使用${parameter:=default}的语法,直接给JACK_SERVER_VM_ARGUMENTS赋值。
修改454行 JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME",改为JACK_SERVER_COMMAND="java -Xmx2g -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"。
第三步, 重新编译。可以看到log,里面有-Xmx3g:
Launching Jack server java -Xmx3g -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/galian/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
(1) /source/building.html
———————– 分 割 线 ———————–
本系列文章如下:
(1)《打造自己的Android源码学习环境之一:序》
(2)《打造自己的Android源码学习环境之二:在虚拟机中安装Ubuntu(上)》
(3)《打造自己的Android源码学习环境之三:在虚拟机中安装Ubuntu(下)》
(4)《打造自己的Android源码学习环境之四:下载Android源码》
(5)《打造自己的Android源码学习环境之五:编译Android源码》
(6)《打造自己的Android源码学习环境之六:运行Android模拟器》
优质网站模板}

我要回帖

更多关于 android7.0源码编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信