• fedora 18 源码编译 android 4.0.1


    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: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了

    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 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

    (补丁的使用参考: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 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

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

    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

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

  • 相关阅读:
    【SICP练习】150 练习4.6
    windows已安装solr
    ps快速删除圆角图片旁白的白色区域方法
    junit学习笔记(二):hamcrest和TestSuit
    取球游戏
    【Linux操作系统分析】设备驱动处理流程
    POJ Secret Milking Machine 【网络流+二分】
    oracle 10 g 需要启动的2个服务
    jQuery也能舞出绚丽的界面(完结篇)
    HDU 2665(Kth number-区间第k大[内存限制+重数])
  • 原文地址:https://www.cnblogs.com/qinyg/p/3239863.html
Copyright © 2020-2023  润新知