下载和编译Android2.2源码
首先需要安装linux环境,这里我使用VMWare 安装了Ubuntu14.04
下载git和curl工具
apt install git-core curl
配置git的name和email,否则后面下载时会提示配置
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
下载repo脚本
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
创建工作目录
mkdir Android_Code
cd Android_Code
初始化repo脚本
下面这种初始化方法表示下载最新的Android源码,地址我使用的是清华大学镜像,具体请参考
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果要下载某个特定的Android版本,则需要如下配置,Android版本可以自行查找
如我下载的Android2.2的某个版本repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-2.2.1_r1
这里我遇到了无法连接到互联网的情况,可以将如下内容复制到你的~/.bashrc里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
开始下载,注意下载时由于网络原因可能会中断,可以Ctrl+Z停止,然后继续执行如下下载命令。-j 标识启动的线程。
Repo sync [-j n]
下载完成后可以看到如下目录
配置编译环境
编译Android2.2需要下载jdk5 ,下载地址为http://www.oracle.com/technetwork/java/archive-139210.html安装jdk并配置环境变量。
提前安装好下列依赖sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils xsltproc
安装Gcc 和g++ ,需要注意版本号。这里默认的版本号太高,需要降级,如问题4
执行编译
Source build/envsetup.sh
选择需要编译的版本然后执行 make命令
Lunch
问题1
由于ubuntu中可能已经包含了jdk,所以输入java –version 时会提示如下信息。
sudo update-alternatives --install /usr/bin/java java /home/limeng/jdk1.5.0_22/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /home/limeng/jdk1.5.0_22/bin/javac 300
sudo update-alternatives --config java
问题2:
解决办法
Cd /usr/bin
执行下列命令,路径为你安装jdk的路径
Sudo ln -s -f /home/limeng/jdk1.5.0_22/bin/jar
如果提示javah:commond not found,和上面修改方法类似
Sudo ln -s -f /home/limeng/jdk1.5.0_22/bin/javah
问题3:
这个错误是gcc和g++版本不兼容导致的,也有可能是安装完gcc没有安装g++
首先安装gcc和g++及一些依赖包sudo apt-get install build-essential
sudo apt-get install g++
安装完成后使用 gcc -v 查看版本,然后使用g++ -v 查看版本,保证版本一致
如果系统中安装有多个版本的gcc 那么就需要ln一下,执行命令如下sudo ln -sf g++-4.3 /usr/bin/g++
sudo ln -sf g++-4.3 /usr/bin/i686-linux-gnu-g++
sudo ln -sf gcc-4.3 /usr/bin/gcc
sudo ln -sf gcov-4.3 /usr/bin/gcov
sudo ln -sf gcc-4.3 /usr/bin/i686-linux-gnu-gcc
问题4:
解决方法:
1、首先安装gcc4.4和g++4.4
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
2、gcc和g++的降级
gcc降级:
sudo rm -rf /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
gcc -v
g++降级
sudo rm -rf /usr/bin/g++
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
g++ -v
问题5:
Unknown parameter a interfaceName fortags/attrs
make: ***
[out/target/product/eve/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/JSHTMLElementWrapperFactory.h]
Error
255
make: *** Waiting for unfinished jobs....
Unknown parameter a interfaceName fortags/attrs
make: ***
[out/target/product/eve/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/HTMLElementFactory.h]
Error
255
Unknown parameter a interfaceName fortags/attrs
make: ***
[out/target/product/eve/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/HTMLNames.h]
Error
255
解决方法:
如下修改文件WebCore/dom/make_names.pl
my $preprocessor = "/usr/bin/gcc -E -P -x c++"; |
my $preprocessor = "/usr/bin/gcc -E -x c++"; |
问题6:
原因分析:
系统编译环境缺少两个库文件Xlib.h与libx11
解决办法:
直接通过下面两个命令来安装缺失的文件库。
apt-file search Xlib.h
问题7:
解决方法:
sudo apt-get install g++-4.4-multilib
问题8:
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/
android/skin/window.o] Error 1
解决:
sudo apt-get install libx11-dev
问题9:
apt-get install zlib1g-dev (没管用)
apt-get install lib32z1-dev
问题10:
sudo apt-get install libncurses5-dev
sudo ln -s/usr/lib/x86_64-linux-gnu/libncurses.so /usr/lib/libncurses.so
我按上面这样执行了一下,又报下面的错误
error while loading shared libraries:libncurses.so.4: cannot open shared
object file: No such file or directory
ls /usr/lib/libncu* 查看有没有这个库,结果如下:
/usr/lib/libncurses.a /usr/lib/libncurses.so.5
/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3
可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的,建一个链接
ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4
问题11:
解决方法:修改./framework/base/tools/aapt/Android.mk文件
LOCAL_LDLIBS := -lz
ifeq ($(HOST_OS),linux)
-LOCAL_LDLIBS += -lrt
+LOCAL_LDLIBS += -lrt -lpthread
endif
ifeq ($(HOST_OS),windows)
其他类似的如framework/base/tool/localize/修改Android.mk
make: ***[out/host/linux-x86/obj/EXECUTABLES/localize_intermediates/localize]
问题12
解决方法:
sudo apt-get install libswitch-perl
问题13
Cd /usr/bin/
sudo ln -s -f /home/limeng/jdk/jdk1.5.0_22/bin/javadoc
问题14 运行模拟器报错
sudo apt-add-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
sudo apt-get update
sudo apt-get install libsdl1.2debian:i386
终于运行成功了!中间差点都放弃了,弄了好久终于编译成功。