系统:fedora 18 KED 桌面 (Fedora-18-i686-Live-KDE.iso)html
处理器:酷睿i5双核 java
内存: 4GBlinux
硬盘:46GBandroid
java版本:java version "1.6.0_37" javac 1.6.0_37git
gcc 版本: 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)web
make版本:GNU Make 3.81vim
因为java版本不对,直接提示不能编译,到这下载相应的java版本windows
http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.htmlbash
make的版本也不对,下载一个老版本的安上:oracle
(最后为了防止系统每次自动把make更新,在/etc/yum.conf里再添加一行来过滤掉make的自动升级 exclude=make* gcc* java*)
gcc 的版本与推荐的版本不符合,原本想从新装一个gcc4.4,结果弄了半天没有成,因而放弃。
首先到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:443;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 [ $? == 1 ]; do echo "======sync failed, re-sync again======" sleep 3 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了
输入命令:make -j4
-j4 选项是使用多个CPU核心去make(cpu有几个核心就能够写几,个人是双核的虚拟4核)
不一会就提示错误,大多数错误均可以在此找到解答
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 23. make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2 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 23. make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error 2 target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in
进入external/webkit的目录,打下面的patch
diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl index 37639eb..2968beb 100644 --- a/Source/WebCore/make-hash-tools.pl +++ b/Source/WebCore/make-hash-tools.pl @@ -20,7 +20,8 @@ # Boston, MA 02110-1301, USA. use strict; -use Switch; +# use Switch; +use feature qw(switch); use File::Basename; my $outdir = $ARGV[0]; @@ -28,9 +29,9 @@ shift; my $option = basename($ARGV[0],".gperf"); -switch ($option) { +given ($option) { -case "DocTypeStrings" { +when ("DocTypeStrings") { my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp"; my $docTypeStringsGperf = $ARGV[0]; @@ -40,7 +41,7 @@ case "DocTypeStrings" { } # case "DocTypeStrings" -case "ColorData" { +when ("ColorData") { my $colorDataGenerated = "$outdir/ColorData.cpp"; my $colorDataGperf = $ARGV[0];
各类编译错误这是够折磨人的,最后终于 done!
到 out 目录里面看一下占用的空间大小:
[root@localhost out]# du -sh 13G . [root@localhost out]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.5G 0 1.5G 0% /dev tmpfs 1.5G 476K 1.5G 1% /dev/shm tmpfs 1.5G 11M 1.5G 1% /run tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup /dev/mapper/fedora-root 46G 43G 845M 99% / tmpfs 1.5G 76K 1.5G 1% /tmp /dev/sda10 485M 95M 365M 21% /boot
而后发现磁盘总剩余空间也不足了。
接下来运行一下编译的结果
设置一个新的环境变量:
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
编译出来的内核就能够启动了,如下是模拟器截图:
感受编译时间也没有网上说的那么长时间啊,一边改着编译错误,一边看着《教父》这部电影,电影尚未看明白是咋回事的就编译完了。
在linux下运行模拟器感受速度比在windows下快的不少啊。这就是最原版的android了(aosp),感受上也是不错的,
我以为(aokp http://aokp.co/)的系统也很好,很喜欢他里面的个性化设置,还有一些快捷插件也很实用。
有时间把aokp的代码弄下来,而后移植到本身的手机上,嘎嘎!
PS: 如今手机用的就是大神作好的aokp的ROM
话说系统又让我折腾的没有磁盘空间了,看来系统还要从新装啊,此次分区必定要大!