您的位置:首页 > 移动开发 > Android开发

使用ubuntu11.4编译android2.3.4_r1的过程

2011-09-09 08:31 387 查看
新手编译android 2.3.4_r1的过程,此记录是使用windows发表的,所以一些步骤不太详细,但是不详细的地方可以复制出来,google一下就可以了,具体步骤稍候补充:

1.下载ubuntu11.4的光盘镜像,没有刻录机,所以直接使用wubi安装方式,安装在D胖,20G的空白盘

为了不在安装过程出妖蛾子,先把一些有用没用的库先下载下来

sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6

sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

2.安装jdk,到java官方网站下载jdk-6u26-linux-i5865.bin,不要带rpm的..因为ubuntu11.4自身不带rpm安装

3.sudo mv jdk-6u26-linux-i586.bin /usr/local

4.cd /usr/local

5.sudo ./jdk-6u26-linux-i586.bin

7.想要编辑/etc/profile 但是ubuntu 11.4没自带vim,vi不会用,所以到软件管理器里搜索vim,选择一个评论比较多的下载安装

8.sudo vim /etc/profile 设置JAVA环境变量

9.准备工作中,已经安装来curl,使用curl获取repo到~/bin目录下(bin为新建文件夹)

10.将repo加到自己的环境变量中

11.下载代码

这是因为在Makefile中检测了CPU的字长。我直接把build/core/main.mk中下面的话注释掉:

#ifneq (64,$(findstring 64,$(build_arch)))
#$(warning ************************************************************)
#$(warning You are attempting to build on a 32-bit system.)
#$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
#$(warning ************************************************************)
#$(error stop)
#endif

新建~/bin/android文件夹,

在android目录下执行repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.4_r1,此步骤几分钟执行完毕

执行repo sync,此过程为真正下载代码,下载过程很漫长,下载期间缓存在~/bin/android/.repo/目录下,用文件浏览器看不到。

12.进行中....

(插入)才发现有人转载来我的文章,但是没注明出处,特插入本页地址http://hi.baidu.com/lypoint(不是因为他的转载注明作者是他自己,而是因为写了一半的文章读者看了不知道结果,本文章会多次更新,如果你看到的是不完全的,请到这个地址来阅读最新版本)

13.刚刚下载代码完毕,期间中断过几次(如果能编译通过,断点续传就没有问题),共花费来三天两夜下载完毕,这速度算慢的。

代码共包含116813项,合计2.8G,ubuntu的剩余空间还有4.4G.

14.在~/bin/android下执行make -j2 -j2是双核的意思,这样快点,几核就是 -j几

15.由于我用的双核32位的本本,提示我编译错误

You are attempting to build on a 32-bit system.

Only 64-bit build environments are supported beyond froyo/2.2.

这是因为在Makefile中检测了CPU的字长。把build/core/main.mk中下面的话注释掉:

#ifneq (64,$(findstring 64,$(build_arch)))

#$(warning ************************************************************)

#$(warning You are attempting to build on a 32-bit system.)

#$(warning Only 64-bit build environments are supported beyond froyo/2.2.)

#$(warning ************************************************************)

#$(error stop)

#endif

16.重新执行make -j2,编译过程很漫长

17.执行大概两个小时后,编译器报错,gcc崩溃。。

In file included from external/webkit/WebCore/html/HTMLElementsAllInOne.cpp:79:

external/webkit/WebCore/html/HTMLMetaElement.cpp: In member function 'void WebCore::HTMLMetaElement::process()':

external/webkit/WebCore/html/HTMLMetaElement.cpp:82: warning: suggest parentheses around '&&' within '||'

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLOptionsCollection.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLParser.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLParserErrorCodes.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLTableRowsCollection.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLTokenizer.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/HTMLViewSourceDocument.cpp

target thumb C++: libwebcore <= external/webkit/WebCore/html/ImageData.cpp

arm-eabi-g++: Internal error: Killed (program cc1plus)

Please submit a full bug report.

See <http://gcc.gnu.org/bugs.html> for instructions.

make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/html/ImageData.o] 错误 1

make: *** 正在等待未完成的任务....

lihj@ubuntu:~/bin/android$

18.查来资料,觉得是gcc版本问题,降级gcc到4.3.0

下载gcc-4.3.0.tar.bz2解压缩,configure提示缺少gmp和mpfr,下载这两个,解压之后放到gcc解压后的文件夹里。

make 编译俩小时 ,make check 检查一遍, make install 安装完毕

执行gcc --version看到版本号已经降了

19.到android目录下,make clean后,重新make -j2

20.编译了俩小时又出错

/usr/bin/ld: i386:x86-64 architecture of input file `out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/ulocks.o' is incompatible with i386 output

/usr/bin/ld: i386:x86-64 architecture of input file `out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_hash.o' is incompatible with i386 output

/usr/bin/ld: final link failed: Invalid operation

collect2: ld 返回 1

make: *** [out/host/linux-x86/obj/lib/libneo_util.so] 错误 1

make: *** 正在等待未完成的任务....

host StaticLib: libexpat (out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/libexpat.a)

echo out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/lib/xmlparse.o out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/lib/xmlrole.o out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/lib/xmltok.o | xargs ar crsP out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/libexpat.a

root@ubuntu:/home/lihj/bin/android#

21.在官网看到,需要一些库

apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos

执行了一下,发现都已经安装了

22.到官网查阅到

Initialize

Initialize the environment with the envsetup.sh script. Note that replacing "source" with a single dot saves a few characters, and the short form is more commonly used in documentation.

$ source build/envsetup.sh
or

$ . build/envsetup.shChoose a Target
Choose which target to build with lunch. The exact configuration can be passed as an argument, e.g.

$ lunch full-eng
23.再次执行sudo make,执行了五遍,每次都是在编译一个多小时后死机

24.原因是笔记本物理内存太低,只有1G,把内存升到1.5G

25.编译通过

26.将system.img userdata.img ramdisk.img复制到有app开发环境的windows中

27.执行emulator -image system.img -data userdata.img -ramdisk ramdisk.img

28.启动后即为编译出的2.3.4的android系统,但是这个系统只能在模拟器中使用,因为没有具体手机硬件的驱动

有问题欢迎到我的空间http://hi.baidu.com/lypoint交流

后记

此次编译共花费两周时间,当然大部分时间是电脑在编译,我还得用另外的电脑继续工作~~~

提示读者,ubuntu的空间要分大一些,ubuntu11.4占用3G,GCC4.3占用3G(安装成功后可以删除一部分),Android源码占用3G,编译过程中使用4G,其他依赖库也需要空间 ,我分了15G空间,中间为了节省空间删除了一些系统东西..幸好最后没出问题...编译完后系统只剩下二百兆

另外电脑最好配置高一点,我用的是笔记本,本来配置就低,还有诸多毛病,只为了加条内存就用了三天时间,浪费时间精力....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: