关于Ubuntu下Android源码下载编译的一点体会

       //2013-5-13  android 2.3.1  Wubi ubuntu12.04

       两年前还在读书的时候,接触过Linux的一些东西,在公司做Android开发使用的都已经是搭建好的环境,最近新买了个本,琢磨着把源码下来编译下,毕竟是码农,电脑里没代码不好意思出门,上周抽出几天没加班的时间,Wubi安装了Ubuntu12.04,下了Android2.3.1和master的代码,编译运行了遍,期间走了不少弯路,~总结一下~
       1)Ubuntu启动后图形界面输入密码无效。
       症状:在Ubuntu下载编译完Android2.3.1重启,登录框输入密码后,闪过命令行界面后无法正常登录。
       原因:google了一下,大多是删除或者修改X11的一些配置文件,因为在下载编译之前可以正常进入,所以排除了这种可能,后来证明是因为磁盘空间不足,用df -hl检查发现分配给Ubuntu的分区使用率98%,OK,挪走。
Note: It is also possible to build Android in a virtual machine. If you are running Linux in a virtual machine, you will need at least 16GB of RAM/swap and 30GB or more of disk space in order to build the Android tree。
       解决办法: df -hl  ; mv  ~/android_src  /host/ , 因为使用Wubi安装Ubuntu,对于那些非常重要的代码文件,在/host下操作安全且不占用分配给Ubuntu的磁盘空间。

       2)Ubuntu环境配置

       这部分的配置主要还是参照http://source.android.com/source/initializing.html。Android源码开发的同志们是在Ubuntu LTS (10.04)上调试的,所以如果你不怕麻烦,愿意手动配置网络参数,自己寻找依赖包和链接库,可以使用10.04http://releases.ubuntu.com/lucid/,但是强烈不推荐。参照google官网上的配置方法,除了jdk添加方式已经失效了以外,其它工具和库都是可以正常安装的。

       最好安装64bit的Linux系统,For Gingerbread (2.3.x) and newer versions, including the master branch, a 64-bit environment is required. Older versions can be compiled on 32-bit systems.如果Host不支持64bit也没关系,只需要在编译的时候改动一些配置文件,ICS及以前的可以编过,以后的可能会出一些类似LIB64SDL.a 格式不正确之类的错误,比较麻烦。

       3)repo下载时无限挂起及Unreachable error

       症状:同步时显示有速度,但是并没有从android.googlesource.com fetch项目文件。长时间非常danteng的不报错不同步。
       原因:主要是网络原因,当然也有可能是连接的配置问题,
http://stackoverflow.com/questions/2091474/repo-sync-problem

       解决方法:模式按照官网给的步骤操作,只不过在初始化 repo时 https改成了http,网上给出修改repo和.repo/Manifest.xml文件据说能提高速度,我没有尝试,其间如果发现挂起或者异常,重新repo sync,会断点续传,如果夜里下载可以写个自动repo的脚步,google一下可以搜到,就不赘述了。

       提示:如果下载没有完成,目录下没有任何代码文件,repo这个脚本会先把.repo/projects下各个目录配置好git代码仓库,并在下载完成前把代码check out出来,所以在下载时看不到下的代码。如果实在repo下载有问题,可以不必纠结在ubuntu下下载,很多论坛都有源码tar包,教育网的同学直接上六维或者北邮人上下载都可以。

      4)错误类型分类

      在网上可以搜到大部分的编译错误类型的解决办法,大概可以分成以下几类。

      a) 编译系统位数是32位,这类编译错误基本上就是改动一些配置文件,把针对于64位的配置改成32位即可,按照搜到的方法修改都可以解决。

      b) 工具版本错误及库缺失,比如在使用Ubuntu12.04编译ICS及以上版本代码时,由于系统默认gcc版本已更新至4.6导致的编译失败。再比如较早版本代码使用jdk1.5编译。解决办法就是配置目标版本,再比如一些缺少库的问题,可以通过apt-get install解决,亲身测试只要事先按照google官方给的步骤安装工具和库,此类编译错误很少。建议在Ubuntu11.10以上版本安装,会自动检查依赖关系并给出建议。

      c) Waiting for unfinished jobs类

      之所以单独作为一类错误,是因为造成这个错误的原因很多,有可能是使用eclipse创建项目产生bin文件引起的,也可能是缺少部分编译系统文件需要的库或者文件格式可是无法识别。这个需要根据其它信息加以判断。

      其它类型的编译错误还很多,只是暂时没有碰到,就先记下这些。

      小结

      其实环境搭建这种问题,很多错误都是随机的(原因肯定是必然的,随机对咱们这个层面来说),比如repo的网络问题,版本编译报出的很多错误,网上可能查不到解决方案,很多时候还会为tty x不支持中文显示而郁闷,想来还是不必纠结,毕竟Android的源码不是我们写的,工具和环境随着版本变化出现不兼容的问题也是难免,按照官网的步骤做,大部分问题还是可以避免的,只是在着手之前想一些规避问题的方法,确保较高的可行性,少犯些低级错误,会比较顺利的完成此类工作。

 

      //2013-9-18  android 4.3.1  vmware-9.0 64bit ubuntu12.04

      使用Wubi安装的Ubuntu编译运行Android可行,但是不太方便,大部分时间还是在Window下查看修改源代码,修改后又需要在Linux环境下编译得到目标文件,简单快捷的方法是在虚拟机上安装ubuntu,通过配置Samba让ubuntu中的源代码目录直接映射到Windows主机,简单方便起效快。

       安装vmware及ubuntu12.04虚拟机的过程就不说了,注意新建vmware虚拟机需要是64bit,需要主机本身是64bit并且在Bios中开启相关设置重启,虚拟机考虑要全编Android源代码,给了3G内存,60GB硬盘,按照谷歌官网上的要求,使用repo sync下了android4.3的源码。按照官网提示下载repo文件始终失败,可能是网络原因,不一定要从官网下载,目前百度云盘上有一些repo可以通用,具体过程可以参考http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html。

      得到repo后下载还算顺利,我下载的是android-4.3_r1,10M的带宽下完大概6个多小时,需要注意之前/home挂载的硬盘分区需至少50G,4.3的代码下来10G多,加上repo文件的内容达到22G,编译后整个分区使用达到了40G+,所以,尽量把该目录所在分区设置在50G以上,否则重启死机、开不了X窗口,后果自负!

      这套虚拟机配置,已经突破了官网对全编要求的底线了,网上也是极力不推荐,全编前需要按照上述网址的方式配置好jdk及环境变量,官网上要求预先安装一坨工具软件

     关于Ubuntu下Android源码下载编译的一点体会_第1张图片

       直接按照上述方法一个命令全装会出问题,建议逐个安装,按照ubuntu12.04默认的apt的依赖文件/etc/apt/sources.list,大部分都是可以安装成功,有个别会推荐你安装新的版本,just do it。这一步很关键,上述工具软件安装成功会让你在全编源代码时大大减少编译出错概率,逐条apt-get install,为了确保顺利,可以先apt-get update更新依赖信息。

      如果确保了这三个条件:使用64位虚拟机;jdk及环境变量配置无误;工具软件坨成功安装,全编Android源代码可以说是一件比较享受的事,尽管整个过程在我这3G内存虚拟机跑了8个小时,却仅仅报了三个编译错误,全可以通过google解决,一个是swap内存空间不足,可以通过增大swap分局解决,另两个是找不到javadoc和javah命令的问题,指定目录建立软连接即可。

      具体编译信息如下

     关于Ubuntu下Android源码下载编译的一点体会_第2张图片

       因为在虚拟机上编译,3G内存是必须滴,但是成功后以后基本上不会再全编了,单编不需要太多资源,可以把虚拟机内存调到2G或者更低,实践证明完全没问题。

       经过8小时的漫长等待,当然,虚拟机编译时你可以刀几局,很快就过去了~

     关于Ubuntu下Android源码下载编译的一点体会_第3张图片

       大功告成后,由于本人很悲催的把/home分区设置较小,45G空间被占满,重启虚拟机居然出现停在Ubuntu图标Loading画面无法进入的情况,尝试使用CD试用模式进入系统把repo文件删除,依然没有解决,一气之下禁用图形模式,把/etc/default/grub下的GRUB_CMDLINE_LINUX_DEFAULT="quiet splash”修改成="quiet splash text”,然后update-grub即可。如果实在不适应命令行模式下的乱码字符,安装zhcon凑合下吧。至今没有解决图形界面无法进入的问题,有童鞋知道答案还请示下~

      在虚拟机上编译成功后,我们可以安装Samba服务及配置磁盘映射,这样在Windows下可以直接访问虚拟机里的共享目录,具体过程可参考http://www.linuxidc.com/Linux/2011-06/37836.htm,磁盘映射参考http://www.linuxidc.com/Linux/2011-04/34369p2.htm,完成后即可在windows中直接看到虚拟机被映射目录了,我是映射了android-4.3_r1源码文件夹。映射成功后就可以看到多了一个网络磁盘驱动器:

 

     192.168.0.114是虚拟机的ip地址,Share是该虚拟机中源码文件被映射到Windows下的文件名,点击进入:

    

      里面就是虚拟机下已经编译完成的源码目录,你可以直接在SourceInsight中包含Ubuntu中的文件,方便修改及得到目标文件,省去切换拷贝的繁琐~

     小结

       由于编译前的三项前提工作成功完成,编译时出错很少,64bit、官方要求工具坨、jdk及环境变量配置对于成功编译十分重要,为了日后开发方便,建议配置samba服务及磁盘映射,相对于五月份第一次下载编译源码的痛苦经历,这次仅仅花了周末两天,可见前人总结的“只是在着手之前想一些规避问题的方法,确保较高的可行性,少犯些低级错误”,多么重要~

     ~版权所有~转载请声明~

你可能感兴趣的:(android,ubuntu,源代码,编译)