Android4.4编译环境折腾记

Posted 某某璀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 java
11 update-alternatives --config javac
12 update-alternatives --config javadoc
13 update-alternatives --config mozilla-javaplugin.so
14 update-alternatives --config javaws
15 update-alternatives --config javap
16 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 declaration
14 of libintl_gettextparse was here
15 # define PLURAL_PARSE libintl_gettextparse
16                        ^
17 ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of macro
18 PLURAL_PARSE
19 extern int PLURAL_PARSE PARAMS ((void *arg));
20             ^
21 ../../../binutils-gdb/intl/plural-exp.h:102:23: error: conflicting types for
22 libintl_gettextparse
23 # define PLURAL_PARSE libintl_gettextparse
24                        ^
25 ../../../binutils-gdb/intl/plural.y:40:25: note: in expansion of macro
26 PLURAL_PARSE
27 # define __gettextparse PLURAL_PARSE
28                          ^
29 plural.c:63:25: note: in expansion of macro __gettextparse
30 #define yyparse         __gettextparse
31                          ^
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 declaration
36 of libintl_gettextparse was here
37 # define PLURAL_PARSE libintl_gettextparse
38                        ^
39 ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of macro
40 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 here
48 #define yylex           __gettextlex
49                          ^
50 ../../../binutils-gdb/intl/plural.y:69:12: note: in expansion of macro
51 yylex
52 static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
53             ^
54 ../../../binutils-gdb/intl/plural.y:178:29: error: arg undeclared (first
55 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编译环境折腾记的主要内容,如果未能解决你的问题,请参考以下文章

自行搭建Android4.4编译环境

显示对话框片段时与状态栏重叠,仅在Android4.4中

[转] webpack折腾记:性能优化

Android 4.4 — 半透明状态/导航栏 — fitSystemWindows/clipToPadding 不能通过片段事务工作

win7和Ubuntu双系统折腾记

iTOP4412开发板Android4.4源码编译分享