1、编译环境:

系统:fedora 18 KED 桌面  (Fedora-18-i686-Live-KDE.iso)

处理器:酷睿i5双核 

内存: 4GB

硬盘:46GB

java版本:java version "1.6.0_37"    javac 1.6.0_37

gcc 版本: 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)

make版本:GNU Make 3.81

由于java版本不对,直接提示不能编译,到这下载相应的java版本

http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.html

make的版本也不对,下载一个老版本的安上:

http://ftp.gnu.org/gnu/make/

(最后为了防止系统每次自动把make更新,在/etc/yum.conf里再添加一行来过滤掉make的自动升级  exclude=make* gcc* java*)

gcc 的版本与推荐的版本不符合,本来想重新装一个gcc4.4,结果弄了半天没有成,于是放弃。

2、下载源代码:

首先到android官网找到下载教程:

android 官网推荐的系统是使用 Ubuntu 10.04,但是我的linux版本是fedora 18 ked ,不想用虚拟机(太慢),也不想再安装一个系统,就在fedora 18里面凑合弄吧!

http://source.android.com/source/building.html

各个android版本:https://android.googlesource.com/platform/manifest/+refs

按照官网上的教程,到repo sync这一步的时候总是出现链接错误,下载失败的情况:

error: Failed connect to android.googlesource.com:;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs
fatal: HTTP request failed
error: Cannot fetch platform/tools/motodev
error: Cannot fetch platform/frameworks/base
error: Cannot fetch platform/prebuilts/sdk
error: Exited sync due to fetch errors

解决方法:编辑/etc/hosts文件

$ vim /etc/hosts

增加下面内容,保存:

74.125.31.82 www.googlesource.com

74.125.31.82 android.googlesource.com

203.208.46.172 cache.pack.google.com

59.24.3.173cache.pack.google.com

然后又在网上找到了一个下载小脚本:

在工作目录新建脚本 download.sh

#!/bin/bash
echo "======start repo sync======"
repo sync
while [ $? == ]; do
echo "======sync failed, re-sync again======"
sleep
repo sync
done

chomd a+x download.sh让其可以运行,然后终端输入./download.sh就可以开始下载了,用这一步代替官方文档里的repo sync。
当连接不上终端时休息3毫秒然后再自动repo sync,这样就很完美了。

下载时间视网速而定,我选择的是android 4.0.1版本,下载完后用

du -h

查看了一下,代码量有19GB之多!

上一次重装fedora 18 就是因为adnroid源代码没有下载完成系统的磁盘没有容量了,(上次的/分区是20GB,这次给分了50GB)结果这次用命令查看了一下,目测还要悲剧:

df -h

剩余磁盘容量不足15GB了。要是正编译着没有空间了该让我咋办啊!

下一步就是make了

3、编译源码:

输入命令:make -j4

-j4 选项是使用多个CPU核心去make(cpu有几个核心就可以写几,我的是双核的虚拟4核)

不一会就提示错误,大多数错误都可以在此找到解答

https://groups.google.com/forum/#!searchin/android-building/KeyedVector/android-building/2EwtWQTqjdI/fbZlzXErscwJ

http://blog.csdn.net/justwandering/article/details/8843760

此错误的解决方法:

Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line .
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error
make: *** Waiting for unfinished jobs....
target Generated: libwebcore <= external/webkit/Source/WebCore/platform/ColorData.gperf
Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line .
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error
target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in

进入external/webkit的目录,打下面的patch

(补丁的使用参考:http://linux-wiki.cn/wiki/zh-hans/%E8%A1%A5%E4%B8%81(patch)%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8

diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl
index 37639eb..2968beb
--- a/Source/WebCore/make-hash-tools.pl
+++ b/Source/WebCore/make-hash-tools.pl
@@ -, +, @@
# Boston, MA -, USA. use strict;
-use Switch;
+# use Switch;
+use feature qw(switch);
use File::Basename; my $outdir = $ARGV[];
@@ -, +, @@ shift;
my $option = basename($ARGV[],".gperf"); -switch ($option) {
+given ($option) { -case "DocTypeStrings" {
+when ("DocTypeStrings") { my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp";
my $docTypeStringsGperf = $ARGV[];
@@ -, +, @@ case "DocTypeStrings" { } # case "DocTypeStrings" -case "ColorData" {
+when ("ColorData") { my $colorDataGenerated = "$outdir/ColorData.cpp";
my $colorDataGperf = $ARGV[];

各种编译错误这是够折磨人的,最后终于 done!

到 out 目录里面看一下占用的空间大小:

[root@localhost out]# du -sh
13G .
[root@localhost out]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs .5G .5G % /dev
tmpfs .5G 476K .5G % /dev/shm
tmpfs .5G 11M .5G % /run
tmpfs .5G .5G % /sys/fs/cgroup
/dev/mapper/fedora-root 46G 43G 845M % /
tmpfs .5G 76K .5G % /tmp
/dev/sda10 485M 95M 365M % /boot

然后发现磁盘总剩余空间也不足了。

4、运行模拟器:

接下来运行一下编译的结果

设置一个新的环境变量:

ANDROID_PRODUCT_OUT=home/android/out/target/product/generic (这个目录应该是你的源码的绝对路径)

export ANDROID_PRODUCT_OUT

到/home/android/out/host/linux-x86/bin 目录下,运行

./emulator -system system.img -data userdata.img -ramdisk ramdisk.img

编译出来的内核就可以启动了,以下是模拟器截图:

5、后记

感觉编译时间也没有网上说的那么长时间啊,一边改着编译错误,一边看着《教父》这部电影,电影还没有看明白是咋回事的就编译完了。

在linux下运行模拟器感觉速度比在windows下快的很多啊。这就是最原版的android了(aosp),感觉上也是不错的,

我觉得(aokp http://aokp.co/)的系统也很好,很喜欢他里面的个性化设置,还有一些快捷插件也很实用。

有时间把aokp的代码弄下来,然后移植到自己的手机上,嘎嘎!

PS: 现在手机用的就是大神做好的aokp的ROM

话说系统又让我折腾的没有磁盘空间了,看来系统还要重新装啊,这次分区一定要大!

fedora 18 源码编译 android 4.0.1的更多相关文章

  1. 源码编译安装MySQL8.0

    源码编译安装MySQL8.0 0.前期准备条件 查看linux的版本 [root@mysql etc]# cat /etc/redhat-release CentOS Linux release 7. ...

  2. Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)

    #spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...

  3. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

  4. 从ApacheTomcat架构谈面试到源码编译环境v10.0.12

    概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...

  5. hadoop源码编译——2.5.0版本

    强迫症必治: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using b ...

  6. Centos 7.5源码编译安装zabbix4.0报fatal error: mysql.h: No such file or directory

    系统环境:CentOS 7.5是最小化安装的 编译信息 编译选项: root@Server01 zabbix-]# ./configure --prefix=/usr/share/applicatio ...

  7. hadoop-1.2.0源码编译

    以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...

  8. Android系统定制和源码开发以及源码编译(附视频)

    Android系统定制配套视频: 为了把Android系统源码定制和编译的课程讲完,从准备到录制完所有的视频,一共花去了近半年的时间,前前后后各种下载源码,编译源码,系统不兼容,版本适配,虚拟机配置困 ...

  9. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

随机推荐

  1. 语法糖(Syntactic sugar)

    语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添 ...

  2. linux下抓取网页快照

    1.下载 https://code.google.com/p/wkhtmltopdf/downloads/detail?name=wkhtmltoimage-0.11.0_rc1-static-i38 ...

  3. 基于visual Studio2013解决C语言竞赛题之1038数字验证

          题目 解决代码及点评 /********************************************************************** ...

  4. 【视频】零基础学Android开发:蓝牙聊天室APP(四)

    零基础学Android开发:蓝牙聊天室APP第四讲 4.1 ListView控件的使用 4.2 BaseAdapter具体解释 4.3 ListView分布与滚动事件 4.4 ListView事件监听 ...

  5. linux脚本: makefile以及链接库

    Linux makefile 教程 非常详细,且易懂 http://blog.csdn.net/liang13664759/article/details/1771246 //sort.c #incl ...

  6. Spring Uploading Files

    1,在servlet-dispatcher.xml中添加代码 <bean id="multipartResolver" class="org.springframe ...

  7. js 动态切换视频

    如图所示,想要一个这样的效果,就是点击下面视频标题时,上面的视频跟着切换,但是要求页面不重新加载. 参考文章在这里 这里贴上部分代码供大家参考. <li id="about_li6&q ...

  8. zabbix 获取jvm session信息

    zabbix:/root# java -jar /root/cmdline-jmxclient-0.10.3.jar - 121x:5566 "Catalina:type=Manager,c ...

  9. Problem D: Flip Five

    大致题意:3 * 3的黑白格,在翻转的时候会本身和四周的都翻转,问最小翻转几次变成全部是白色解题思路:把3 * 3 = 9 个格子进行全排列,然后穷举然后找翻转的最小次数 #include <i ...

  10. Codeforces Round #256 (Div. 2) 题解

    Problem A: A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standar ...