在Ubuntu-14.04.3配置并成功编译Android6_r1源码
折腾了一周,终于把Android6_r1的源码编译成功。先上图,这是在ubuntu中运行的Android模拟器:
由于我是在win8中安装虚拟机VMware,然后在虚拟机中安装Ubuntu进行编译,所以遇到诸多麻烦。如果直接在linux中编译,可能会更顺利。
--------------------------------------------------------------------------------------------------------------------------
准备工作:
VMware虚拟机,安装请参考:VMware8安装配置Win7、CentOS-7向导
官网下载ubuntu镜像:ubuntu-14.04.3-desktop-amd64.iso
安装ubuntu,一并参考“VMware8安装配置Win7、CentOS-7向导”
-----------------------------------------------------------------------------
建议:ubuntu内存分配4G,预留90G虚拟硬盘(之前选择了默认的20G,在解压tgz的时候直接报空间不足),网络选择“Bridged”方式。
为了编译Android源码,下面对安装好的ubuntu作一些配置工作。
首先调出终端,用以下快捷键
Ctrl + Alt + T
1、安装Git等依赖组件
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 libx-dev:i386 libreadline6-dev:i386 libgl-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlibg-dev:i386 dpkg-dev libsdl-dev libesd0-dev
上面红色部分是数字“1”。当然,你也可以分开执行这些安装命令。
如果没有这些依赖组件,可能会遇到类似这样的错误:
2、安装JDK
首先用以下命令搜索JDK版本
apt-cache search openjdk
执行安装
sudo apt-get install openjdk--jdk
查看是否安装成功
java -version
3、配置java_home
直接运行
echo $JAVA_HOME
并不能看到输出。
设置:
echo export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/" >> ~/.bashrc
然后重启terminal或通过使用以下命令
source ~/.bashrc
此时重新输入$JAVA_HOME,就可以看到配置好的路径了
4、安装SSH Server
这个有什么用呢?利用Xshell方便我们在windows和虚拟机中操作文件。Ubuntu缺省下是没有安装SSH Server,Client倒是为我们装好了。
不知道怎么用Xshell的,请猛戳:Xshell连接linux(图文教程)
sudo apt-get install openssh-server
重启它
sudo /etc/init.d/ssh restart
5、下载Android源码
有人在百度云盘上共享了Android6_r1的源码,省去了我们-翻-墙-(博客园居然把这两个字屏蔽了,以FQ代替,呵呵~有这么敏感么)的麻烦,请看:Android6_r1分卷源码
原作者CSDN博客地址:Android 2.3.5源代码 更新至android 6.0,可以下载,度娘网盘
6、拷贝Android源码到Ubuntu
此办法笨了点。利用Xshell其实挺快的。直接拖进来。
7、合并文件
监测文件Hash,看是否有损坏。具体对应什么字符串请对照hash.txt
md5sum Android6_r1_aa
然后把这几个文件合并成一个
cat Android6_r1_* > M.tgz
计算合并后的文件哈希
md5sum M.tgz
8、解压文件
tar zxvf M.tgz
这是个漫长的过程。
这个解压命令会创建mydroid文件夹,解压的东东都在里面
9、编译前配置
在 .bashrc文件中添加:export USE_CCACHE = 1,操作如下:
echo export USE_CCACE= >> ~/.bashrc
为了提高编译效率,设置编译器高速缓存。执行以下命令:
prebuilts/misc/linux-x86/ccache/ccache -M 30G
-M 30G 两个参数表示设置30G大小的空间作为缓存,这个数值可以根据自己的硬盘空间大小继续调整
接着导入编译Android源码所需的环境变量和其它参数,运行以下命令
source build/envsetup.sh
运行lunch命令选择编译目标
lunch
比如选择1,会出现以下提示信息,告诉我们编译的源码的一些相关信息
10、编译
make -j8
因为笔记本是i5 4210u,所以使用8(CPU核心的两倍),此处可能设置过大了。
11、不断地编译(error不断,无奈)
看来并不是一帆风顺啊,出问题了。开始我还以为JDK版本不对,进入build/core/main.mk
发现默认就是1.7。
错误停止在下面的地方:
上面提过了,一开始我也没安装这些依赖组件,导致了一些不必要的麻烦。
还有其它常见编译错误,已经有人整理出来了,适合的就参考以下吧:
2、Build on Ubuntu 14.04 does not work
继续编译
make -k
用了make -k之后,就悲剧了,编译了一个晚上还没好。
早上起来的时候果断用“Ctrl + C”中断编译,重新安装以上的依赖包,接着做清理工作
make clean
然后继续开始,多加个sudo,因为之前的编译输出了“没有权限操作”类似的提示。
sudo make -j8
大约两个小时后,硬盘利用率100%,一直没动。编译也似乎停住了。一个小时后,貌似挂了T~T
难道高速缓存占用太多硬盘空间?虚拟机给的空间不够?
好吧,我重新装一个ubuntu。然后分配60G的虚拟空间,2G内存,20G编译高速缓存。又跑一个晚上。
第二天一看,又是error,真是泪流满面!
arm-linux-androideabi-g++: Internal compiler error: Killed (program cc1plus)
这是什么鬼?
通过命令build-essential,g++我也装了呀。
google了一下,有一个bug report:Build #478 Failed,可是没看到解答。
看到stackoverflow上一个类似问答:arm-linux-androideabi-gcc: Internal error: Killed (program cc1) from Android NDK r8
整理几个答案:
This error went away for me when I used "make" instead of the recommended "make -j4".
But rebooting the virtual machine seems to fix the problem for me. // are you sure??
For those having this issue with VMs, the solution that worked for me was bumping up the base memory. It was originally set to 512MB to 1536MB.
可是这是gcc呀。
然后又找到这个:firefox build for Android fails,里面提到:
well the problem was caused by too little RAM allocated to my VM. Upped the RAM from 1Gb to 4Gb and the compile is now proceeding nicely.
真是RAM小了?
再试试吧。由于机器配置原因,最多好像只能给虚拟机分配3G的内存。然后直接sudo make执行命令。
抓狂啊!!难道ARM还小了?
重装ubuntu再来。这次分配90G硬盘空间,4G内存(开始我还以为只能给3G)。
12、编译成功
最终使用以下编译命令
sudo make -j2
从上午11点半左右开始执行,晚上10点回来,看到居然编译成功了!看到system.img没有?哈哈~
进入目录/out/target/product/generic,可以看到ramdisk.img, system.img, userdata.img, cache.img这四个镜像文件
13、运行Android模拟器
由于刚刚编译成功,如果此时尚未退出终端的话,可以直接启用命令运行Android模拟器。
emulator
如果退出了先前编译的终端命令行窗口,那么运行模拟器就完全不一样了。具体请参考:android4.4 源码编译之运行模拟器
如果对你有用,请支持一下~
参考:在Ubuntu上下载、编译和安装Android最新源代码
Android 2.3.5源代码 更新至android 6.0,可以下载,度娘网盘
在Ubuntu-14.04.3配置并成功编译Android6_r1源码的更多相关文章
- Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程 在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...
- Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...
- Ubuntu 14.04 虚拟机配置固定ip地址
Ubuntu 14.04 虚拟机配置固定ip地址: 虚拟机用的NAT方式配置: 1.虚拟机: 虚拟机→设置→网络适配器→NAT模式: 2.虚拟机:编辑→虚拟网络编辑器→更改设置→选择NAT→填入子网I ...
- 如何在 Ubuntu 14.04 里面配置 chroot 环境
你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 Linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 Linux 中,一个典型的方式就是 chroot 环境. 在这份教程中,我 ...
- 在 Ubuntu 14.04 中配置 PXE 服务器
PXE(预启动执行环境Preboot Execution Environment)服务器允许用户从网络中启动 Linux 发行版并且可以不需要 Linux ISO 镜像就能同时在数百台 PC 中安装. ...
- Ubuntu 14.04—Eclipse配置Pydev
Eclipse: 1. 下载 Eclipse 最新版 访问官方网站下载 Eclipse 最新版,这个就不多说了,大家自己去下. http://www.eclipse.org/downloads/?o ...
- Ubuntu 14.04 安装配置备忘录
完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年 ...
- Ubuntu 14.04.1 配置 Android 源码开发环境(jdk版本切换)(转载)
转自:http://www.cnblogs.com/ren-gh/p/4248407.html # Ubuntu 14.04.1 1.更新源: sudo apt-get update 安装vim工具: ...
- Ubuntu 14.04 dnw配置
之前写的Ubuntu嵌入式环境搭建没有讲怎么配置dnw下载工具,使用dnw还得用红帽,今天配置好了ubuntu下的dnw,记录一下 首先先下载dnw的源码,这是我上传的提供给大家下载:http://p ...
随机推荐
- Apache Kafka - Quick Start on Windows
在这篇文章中,我将要介绍如何搭建和使用Apache Kafka在windows环境.在开始之前,简要介绍一下Kafka,然后再进行实践. Apache Kafka Kafka是分布式的发布-订阅消息的 ...
- 面试之jsp、Servlet相关知识——生命周期, 区别等
1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...
- Watchdog
一.简介 Watchdog主要用于监视系统的运行,Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动. 驱动源码位于内核源码树dr ...
- puppet学习笔记(二)
在puppet安装完成之后我们就可以动手开始第一个puppet实验了,此实验就以批量推送文件为例吧. 1.获取module路径 这里的module就是指一个模块,可以把puppet想象成一个个项目的部 ...
- docker基础命令详解
Commands: attach Attach to a running container build Build an image from a Dockerfile commit ...
- sigemptyset,sigfillset,sigaddset,sigdelset,sigismember,sigprocmask,sigpendmask作用
SYNOPSIS #include <signal.h> int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); in ...
- bitbucket和Mercurial安装和相关
应为工作需要,需要使用bitbucket和Mercurial进行软件开发管理.下面简单介绍以下这些东西和他的安装. bitbucket是一个类似github的软件开发管理工具,和github不同,bi ...
- ZOJ 1109 Language of FatMouse
较简单字典树,每输入一对字符串,前一个放在字典(数组)中,后一个插入字典树中,并将其最终的flag赋为前一个在数组中的下标,再就好找了.输入的处理方法要注意一下. 代码: #include <i ...
- Java语法基础(二)----运算符
一.运算符: 运算符包括下面几种: 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三目运算符 最不常用的是位运算符,但也是最接近计算机底层的. 1.算术运算符 (1)+的几种用法:加法.正 ...
- javascript:让表单 文本框 只读,不可编辑的方法
有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使<input type="text" name="input1" value=&qu ...