这几天一直在编译4.03版本的Android源码,不是很顺利,记录一下,作为备忘录。
源代码的主页在:http://source.android.com/source/initializing.html
平台为VM8+Ubuntu11.10
- 安装JDK6
添加软件源:deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
更新:apt_get udpate
安装:apt-get install sun-java6-jdk - 安装其他软件
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
- 进入源码目录
- 设置环境变量
. build/envsetup.sh
- 编译
make -j4
输出信息如下:
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=4.0.3.0.2.0.1.0
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.0.0-12-generic-i686-with-Ubuntu-11.10-oneiric
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
OUT_DIR=out
========================================================================================
- 出错
prebuilts/tools/gcc-sdk/gcc: 行 40: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/i686-linux-glibc2.7-4.6/bin/i686-linux-gcc: 没有那个文件或目录
- 处理
cd prebuilts/tools/
git reset --hard HEAD^
cd ../../external/qemu
git reset --hard d4f5a3ae87a7246613188940c1667bf2880da402
上面的解决方法参考:http://groups.google.com/group/android-building/browse_thread/thread/7d5b3c3b2076c35f - 修改完成之后
make clean
make -j4 - 漫长等待,一觉醒来之后,出现如下错误:
target Dex: android.core.tests.libcore.package.com.no-core-tests-res
target Dex: android.core.tests.libcore.package.dalvik.no-core-tests-res
collect2: ld terminated with signal 9 [Killed]
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] 错误 1
make: *** 正在等待未完成的任务....
DroidDoc took 5376 sec. to write docs to out/target/common/docs/doc-comment-check - 处理.
google了一把,这个问题的答案还真多,总结有三种处理方式:
1) 没有swap分区。 //我在安装的分了2G的swap,不是这个原因
2) gcc的版本需要为4.4. //查了一下自己的gcc版本,是4.6.1,果然不一致,不过后来想想,官网页没有说GCC版本问题,应该和版本没有关系,这个方法暂不采用。
3)用多线程编译不太安全,最好用make. //我就是用多线程的make -j4 编译的。
最后,采用了第三种处理方式,运行make命令(这里我没有make clean)。 - 半个小时之后,激动人心的时刻到了:
Install system fs image: out/target/product/generic/system.img
- 运行
我用自己编译的模拟器运行运行模拟器之后一直是黑屏,原因不明,这个以后处理。
我们找个现有的模拟器进行测试,把生成的ramdisk.img,system.img,userdata.img这三个文件拷贝到相关模拟器的相关目录:android-sdks\system-images\android-15\armeabi-v7a,运行,出来下面的最终画面: