首页 > 代码库 > Android4.4编译环境折腾记
Android4.4编译环境折腾记
题记:感觉是时候写点什么了=_=!
第一次安装了ubuntu14.04.5,官网下载的iso,官网下的jar,编译android4.x需要安装jdk6,更高的版本会有问题,baidu到很多搭建环境的步骤,这个不多说,在win7下使用EasyBCD引导安装的ubuntu,1TB硬盘果断装了双系统,事实证明没删掉win7是个多么明智的决定,在jdk方面,android4.4比4.0要多配置一个javap,其他都一样
1 update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_43/bin/java" 1 2 update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_43/bin/javac" 1 3 update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/lib/jvm/jdk1.6.0_43/bin/javadoc" 1 4 update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jdk1.6.0_43/jre/lib/amd64/libnpjp2.so" 1 5 update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.6.0_43/bin/javaws" 1 6 update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.6.0_43/bin/javap" 1 7 update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/jdk1.6.0_43/bin/jar" 1 8 9 # Choose the java you installed as default 10 update-alternatives --config java11 update-alternatives --config javac12 update-alternatives --config javadoc13 update-alternatives --config mozilla-javaplugin.so14 update-alternatives --config javaws15 update-alternatives --config javap16 update-alternatives --config jar
接下来就是安装库文件了,库文件不能少,不然会报错缺少xxx中断编译,这个比较好处理,缺啥apt-get啥,但是还是在事先就全部安装好,这编译一次4.4也不容易,好几个小时呢
1 apt-get install 2 git gnupg flex bison gperf build-essential 3 zip curl libc6-dev libncurses5-dev x11proto-core-dev 4 libx11-dev:i386 libreadline6-dev:i386 5 libgl1-mesa-glx-lts-quantal:i386 libgl1-mesa-dev-lts-quantal 6 g++-multilib mingw32 tofrodos lib32ncurses5-dev 7 python-markdown libxml2-utils xsltproc zlib1g-dev:i386
但是!!由于我是编译公司已有的源码,并不是原生系统源码,报错了,第一次是有个文件没有自动生成!!一个REVISION的变量undefined,于是找到报错的文件一个一个defined,但是!!!公司老大的电脑能编译通过,自动生成的ver.h文件里面包含了REVISION变量的定义,这就有意思了,于是跑到到老大电脑上一查jdk,ubuntu,gcc,g++等版本,jdk有小版本的不同,但这个应该不是关键,ubuntu都是14.04的,gcc/g++都是4.8.4,也就是ubuntu14.04自带的编译器,然后还有交叉编译器,这个在源码中包含了arm-linux-gcc,版本肯定是一样的,后来碰到有大神说是gcc的版本太高了,可问题是别人的gcc也是4.8啊为什么就不报错!!!心塞塞。。。改完了这个undefined error,编译继续,然后碰到了更多的undefined。。。
比如plural-exp.h文件中的# define PLURAL_PARSE __gettextparse报conflicting types错误
1 In file included from ../../../binutils-gdb/intl/plural.y:35:0: 2 ../../../binutils-gdb/intl/plural-exp.h:102:23: error: conflicting types for 3 ‘libintl_gettextparse‘ 4 # define PLURAL_PARSE libintl_gettextparse 5 ^ 6 ../../../binutils-gdb/intl/plural.y:40:25: note: in expansion of macro 7 ‘PLURAL_PARSE‘ 8 # define __gettextparse PLURAL_PARSE 9 ^10 plural.c:185:5: note: in expansion of macro ‘__gettextparse‘11 int __gettextparse (void);12 ^13 ../../../binutils-gdb/intl/plural-exp.h:102:23: note: previous declaration14 of ‘libintl_gettextparse‘ was here15 # define PLURAL_PARSE libintl_gettextparse16 ^17 ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of macro18 ‘PLURAL_PARSE‘19 extern int PLURAL_PARSE PARAMS ((void *arg));20 ^21 ../../../binutils-gdb/intl/plural-exp.h:102:23: error: conflicting types for22 ‘libintl_gettextparse‘23 # define PLURAL_PARSE libintl_gettextparse24 ^25 ../../../binutils-gdb/intl/plural.y:40:25: note: in expansion of macro26 ‘PLURAL_PARSE‘27 # define __gettextparse PLURAL_PARSE28 ^29 plural.c:63:25: note: in expansion of macro ‘__gettextparse‘30 #define yyparse __gettextparse31 ^32 plural.c:1130:1: note: in expansion of macro ‘yyparse‘33 yyparse (void)34 ^35 ../../../binutils-gdb/intl/plural-exp.h:102:23: note: previous declaration36 of ‘libintl_gettextparse‘ was here37 # define PLURAL_PARSE libintl_gettextparse38 ^39 ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of macro40 ‘PLURAL_PARSE‘41 extern int PLURAL_PARSE PARAMS ((void *arg));42 ^43 plural.c: In function ‘libintl_gettextparse‘:44 plural.c:1299:7: error: too few arguments to function ‘__gettextlex‘45 yychar = yylex (&yylval);46 ^47 plural.c:64:25: note: declared here48 #define yylex __gettextlex49 ^50 ../../../binutils-gdb/intl/plural.y:69:12: note: in expansion of macro51 ‘yylex‘52 static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));53 ^54 ../../../binutils-gdb/intl/plural.y:178:29: error: ‘arg‘ undeclared (first55 use in this function)56 ((struct parse_args *) arg)->res = $1;57 ^
对没错,就是下面这个链接的错误!!!
http://stackoverflow.com/questions/33562051/conflicting-types-for-libintl-gettextparse
网上碰到这个错误的还真不多,可能是我运气真的太好,网上的解决方法是bison版本过低,升级到3.0就好了,屁啊。我的bison版本就是3.0.2,老大的环境也是3.0.2,自己找了好久不了了之。。。
于是,我默默的格式化了ubuntu系统的所在磁盘,这一删不得了,因为ubuntu与windows双系统是ubuntu在进行开机引导的,所以很正常的我开不了机了23333,没关系,我还可以进U盘的PE系统,咳咳,那个由于我是四五年前的时候给U盘做的启动盘了,又很正常的PE系统检测不到公司配的新电脑的硬盘!!这我一下子蒙圈了,网上一搜,原来是U盘PE系统太老了,还好!!我自己电脑还在旁边,于是又下个laomaotao啥的搞个最新的PE,终于能检测到硬盘啦,那然后是用U盘直接装Ubuntu呢还是继续win7引导,想想就我这运气还是继续靠win7吧,用分区工具重写了grub,这样又能开机啦
以前在学校的时候自己有个arm9的开发版,跑过android4.0的系统,编译环境还是ubuntu12.04,于是这次上官网下了个ubuntu12.04.5,烧写完毕,重启,哎呀我去又出大事了!!ubuntu开不了机了。报了个错网上一搜,说是thinkpad的bios的设置,不兼容的问题,具体错误不太记得了,但是!我还是坚持着又烧写了一次ubuntu12.04.2,注意这次是2!!!然后神奇的是居然进到桌面了,难道是自己在配置ubuntu12.04.5的时候出了岔子??哎不管了,2与5又有多大的差别呢,又不是14.04,用了会14.04还是觉得14.04好看很多啊!!!(谁让我是个看颜值的程序猿呢
这次用ubuntu12.04.2应该没啥问题了吧,源码download下来,环境轻车熟路的搭建好,开始编译!恩,REVISION undefined依然遇到,改过继续,这次碰到更奇葩的error了!!baidu/google都没几个人碰到的啊,compile_et: Couldn*t find compile_et*s template files
搜过来搜过去就只有这哥们的帖子(笑哭 http://tieba.baidu.com/p/3199034286 按照回帖的做了,这库文件早就是最新的了,所以没用
没办法,只有看Makefile文件了,没有找到compile_et 的模板文件,是报错的prof_err.et还是啥??于是用命令compile_et prof_err.et 这个没报错啊,于是又编译一次,还是错了,看Makefile文件,哦!原来是compile_et --buildtree prof_err.et 这个命令,那确实,会报错,卡了好久,有次莫名其妙的vi了一下compile_et这个工具,工具???md,原来是shell脚本啊,只读的shell脚本啊,又是自动生成的shell脚本啊!没有后缀的compile_et我tm还以为是像windows里的exe工具一样呢,真是玩windows玩入魔了,这该死的定式思维,然后一个大写的绝对路径在里面躺着啊!!这路径还是老大的路径啊!!!这个文件就压根没有自动生成啊!!!这把我坑的我也不多说什么了,改掉!!!!编译终于通过了!!测试一下,没错!终于跑起来了!!开心啊,然后开开心心的回家了,第二天......
吃完早餐,开心的打开电脑,然后,1分钟过去了..5分钟过去了...10分钟过去了......ubuntu卡在了用户登录之前!!!ubuntu死掉了!!!我去!!!为什么!!!搞了个把小时没用,各种方法试过,没用!!决定重装ubuntu,老大一脸惊呆的问我,你又准备重装啊?我:...
然后心里还是默默的挂念着ubuntu14.04,然后又装了14.04,真是做死,豪无疑问又碰到了# define PLURAL_PARSE __gettextparse报conflicting types的错误,装的太多次都忘记14.04是这个错误了2333,真是为自己捉急!!无奈,为了节省时间只好装回12.04.2...把上次碰到的错误都解决掉,这次成功进入了系统!!!
然后开始了开发之旅
要编译android4.4吧,得有个IDE查看代码吧,无奈Source Insight没有linux版,网上好多都用的wine+Source Insight,于是我也这么干了,但是以本人4代i5,8GB缓存的thinkpad居然在使用SI的时候一卡一卡的,一直以为是自己哪个地方没配置好,来来回回把SI工程放在NTFS盘符下,放在EXT4盘符下,都是一样,没有任何优化的效果,无奈了好多天,这tm也太影响效率了啊,这和不能用有什么区别?!!excuxe me??好吧,换!!!!那么配置vim吧哈哈哈,打着正好学习使用vim各种插件的想法向着配置成新一代SI方向去干了!这样的教程网上是有一大把,我把差不多的都配置完了,使用 :TrinityToggleAll也是可以打开成SI界面一样的
具体方法如下:http://blog.csdn.net/nklinux/article/details/44501593
可能是自己没有配置对,而且按F8-12是木有用的,因为thinkpad在F8-12上写了快捷方式。。。
于是最后装了个VirtualBox。。。然后上win7哈哈哈哈,我也是没谁了,virtualbox不要装软件中心的,有问题,可能是版本太低了,我后来是卸载掉然后下了个5.0的deb装上了,到此,终于搞定!
经过这么长时间的折腾,以后在也不想再在环境这个问题上搞来搞去了。。。神烦!!系统的文件自己不知道的决不再乱动,万一就开不了机了。。。
Android4.4编译环境折腾记