新手编译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.shor
$ . build/envsetup.shChoose a TargetChoose which target to build with lunch. The exact configuration can be passed as an argument, e.g.
$ lunch full-eng23.再次执行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空间,中间为了节省空间删除了一些系统东西..幸好最后没出问题...编译完后系统只剩下二百兆
另外电脑最好配置高一点,我用的是笔记本,本来配置就低,还有诸多毛病,只为了加条内存就用了三天时间,浪费时间精力....