虚拟机中下载 android2.3源码

来源:互联网 发布:会计办公软件 编辑:程序博客网 时间:2024/04/30 05:22
一  前言

学习一门技术最好的方式莫过于阅读它的源代码,正如Linux鼻祖的经典名言:read the fucking source code .. 英语不太好,大概意思是:去读那些操蛋的源代码吧!而Android提供了大量的源代码给我们学习,所以,我们不去阅读下,真是暴殄天物!
so... 今天这篇文章的话,就是讨论怎么在windows环境下,下载,编译android源代码。。。

我的环境是win7,我先是用ubuntu12,编译源码总报错解决不了,听别人说也是这样,用ubuntu11尝试一下,编译通过 ....

二  VMware虚拟机
如上所述,我们用的是windows操作环境。但是android源代码是用git工具来管理的,一般在linux环境下来同步,所以,第一步,我们需要安装linux环境。这里的话,我们选择VMware来运行linux虚拟机。
VMware的话,我选择VMWare 10,版本尽量新点,听说低版本的VMware网络支持不是很好,我们下载源代码,网络不好是不行滴。。。

三  ubuntu安装
对于Linux环境,我选择的是ubuntu, 版本是ubuntu-11.04-desktop-i386.iso
然后还有注意点的是设置虚拟机的内存和硬盘,内存根据自己电脑配置设置,我3G内存,分配了1G给虚拟机。硬盘的话,我分配了30G,因为担心下载编译后,空间不够。


四  配置环境
一路无语,等你的ubuntu启动完毕之后,ctrl + alt + T 打开命令行, 执行下列命令

1. USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupg

2. 安装JDK。在Ubuntu上执行以下命令:
     USER-NAME@MACHINE-NAME:~$ sudo add-apt-repository ppa:ferramroberto/java   
     USER-NAME@MACHINE-NAME:~$ sudo apt-get update
     USER-NAME@MACHINE-NAME:~$ sudo apt-get install sun-java6-jre sun-java6-plugin
     USER-NAME@MACHINE-NAME:~$ sudo apt-get install sun-java6-jdk
使用的时候,总是报错,干脆直接去甲骨文去下jdk

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u31-oth-JPR

下载二进制文件,编译后,设置为默认使用jdk,,并设置环境变量。

设置环境变量  gedit /etc/profile

JAVA_HOME=/home/sihaixuan/workspace/jdk1.6.0_31export JRE_HOME=/home/sihaixuan/workspace/jdk1.6.0_31/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
执行: source /etc/profile

设置默认jdk:

sudo update-alternatives --install /usr/bin/javadoc javadoc /home/sihaixuan/workspace/jdk1.6.0_31/bin/javadoc 300

java ,javac ,javah等都类似添加进去。


3. 依赖的其它包。在Ubuntu上执行以下命令:
     USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl


4. 调试工具。在Ubuntu上执行以下命令:
     USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind

5. 安装curl ,执行以下命令:
   sudo apt-get install curl


有个时候,可能你的ubuntu没有配置源,导致安装不成功,我们可以配置下。
命令:sudo gedit /etc/apt/sources.list

然后把下面的源添加进文件,保存

deb http://tw.archive.ubuntu.com/ubuntu/ oneiric main universe restricted multiversedeb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric main universe restricted multiversedeb http://tw.archive.ubuntu.com/ubuntu/ oneiric-security universe main multiverse restricteddeb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric-security universe main multiverse restricteddeb http://tw.archive.ubuntu.com/ubuntu/ oneiric-updates universe main multiverse restricteddeb-src http://tw.archive.ubuntu.com/ubuntu/ oneiric-updates universe main multiverse restricted#网易 Ubuntu 11.10 源(速度很快)deb http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiversedeb-src http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiversedeb http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricteddeb-src http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricteddeb http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricteddeb http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricteddeb-src http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricteddeb http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricteddeb-src http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricteddeb-src http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted#骨头源,骨头源是bones7456架设的一个Ubuntu源 ,提供ubuntu,deepindeb http://ubuntu.srt.cn/ubuntu/ oneiric main universe restricted multiversedeb-src http://ubuntu.srt.cn/ubuntu/ oneiric main universe restricted multiversedeb http://ubuntu.srt.cn/ubuntu/ oneiric-security universe main multiverse restricteddeb-src http://ubuntu.srt.cn/ubuntu/ oneiric-security universe main multiverse restricteddeb http://ubuntu.srt.cn/ubuntu/ oneiric-updates universe main multiverse restricteddeb http://ubuntu.srt.cn/ubuntu/ oneiric-proposed universe main multiverse restricteddeb-src http://ubuntu.srt.cn/ubuntu/ oneiric-proposed universe main multiverse restricteddeb http://ubuntu.srt.cn/ubuntu/ oneiric-backports universe main multiverse restricteddeb-src http://ubuntu.srt.cn/ubuntu/ oneiric-backports universe main multiverse restricteddeb-src http://ubuntu.srt.cn/ubuntu/ oneiric-updates universe main multiverse restricted#mirror.lupaworld.com的源,速度很快deb http://mirror.lupaworld.com/ubuntu/archive/ oneiric main restricted universe multiversedeb http://mirror.lupaworld.com/ubuntu/archive/ oneiric-security main restricted universe multiversedeb http://mirror.lupaworld.com/ubuntu/archive/ oneiric-updates main restricted universe multiversedeb http://mirror.lupaworld.com/ubuntu/archive/ oneiric-backports main restricted universe multiversedeb http://mirror.lupaworld.com/ubuntu/ubuntu-cn/ oneiric main restricted universe multiverse#这里你也可以直接使用更快速的ubuntu.cn99.com的源(推荐):deb http://ubuntu.cn99.com/ubuntu/ oneiric main restricted universe multiversedeb http://ubuntu.cn99.com/ubuntu/ oneiric-updates main restricted universe multiversedeb http://ubuntu.cn99.com/ubuntu/ oneiric-security main restricted universe multiversedeb http://ubuntu.cn99.com/ubuntu/ oneiric-backports main restricted universe multiversedeb http://ubuntu.cn99.com/ubuntu-cn/ oneiric main restricted universe multiverse

然后执行 sudo apt-get update 进行更新。。

6.  下载repo,执行下面命令
a.  mkdir ~/bin
b.  PATH=~/bin:$PATH
c.  curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
d.  chmod 777 ~/bin/repo

上面这个命令
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
可能会执行不成功,经常被河蟹,
下面这个也许可以
curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo"> ~/bin/repo

7.  创建源代码目录,并进入
mkdir ~/android_prj
cd ~/android_prj

8.  初始化, 我这里下载的是android2.3的代码,这个版本的代码非常具有代表性,和2.2相比,做了很多改动。。

  
repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread   

repo init -u https://android.googlesource.com/platform/manifest -b  gingerbread

repo init -u http://android.googlesource.com/platform/manifest -b  gingerbread

三中选一,我是用第三个,网上说也要可能修改 .repo文件下的manifest.xml中
        

<remote  name="aosp" fetch=".." />改为<remote  name="aosp"  fetch="http://android.googlesource.com" />后面就是最新到源码路径

看到类似下面的提示,表示初始化完成。

repo has been initialized in /opt/android4.3username@user-desktop:/opt/android4.3$


 

9. repo sync 开始同步代码,看到如下提示,就同步代码成功!我同步了一个晚上,听说有的同步了两天两夜。。
Fetching project device/htc/commonFetching projects: 100% (171/171), done.  Syncing work tree: 100% (171/171), done. 



五   编译代码

1    . build/envsetup.sh  注意前面有个空格和点号
2.    choosecombo 下面的参数默认就可。。
3.    make开始编译。

编译中出现的错误:

(1)错误1

============================================ find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录 find: `out/target/common/docs/gen': 没有那个文件或目录 find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录 find: `out/target/common/docs/gen': 没有那个文件或目录 find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录 find: `out/target/common/docs/gen': 没有那个文件或目录 find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录 find: `out/target/common/docs/gen': 没有那个文件或目录 find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录 find: `out/target/common/docs/gen': 没有那个文件或目录 ============================================ 

从提示看,是少了两个目录;应该是系统编译的时候,有应用程序或者系统指向这两个文件夹;
我查了android源码,确实没有这两个文件夹,于是按照路径新建:(在源码所在的根目录中)
mkdir  /frameworks/base/frameworks/base/docs/html
mkdir /out/target/common/docs/gen

(2)错误2

/bin/bash: jar: command not foundmake: *** [out/host/common/obj/JAVA_LIBRARIES/apicheck_intermediates/javalib.jar] Error 127

原因是java sdk问题

解决方法:

1、先进去/usr/bin

2、sudo ln -s -f /usr/android/java/jdk1.6.0_31/bin/javr

具体java sdk目录根据自己所安装的目录决定。

如果提示javadoc : commond not found,按上面的方法,把jar更换成javadoc

在添加后软键接后,还是找不到,有可能是没有配置默认的java,我这里没有配置javah,就提示没有找到javah

update-alternatives --install  /usr/bin/javah javah  /usr/android/java/jdk1.6.0_31/bin/javah 300


如果,出现了如下界面,则说明,你编译完成了。。。

编译完成后会生成了一个out 目录,编译成功会会再源码目录下生成一个out文件夹,网上说大小有12G,我的只有3.2G,所有所在的挂载区剩余空间最好大于20G。
主要的两个目录为host 和target
1)前者表示在主机(x86)生成的工具
2)后者表示目标机(模认为ARMv5)运行的内容。
镜像文件生成在/home/mfcai/mydroid/out/target/product/generic下:android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,
ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,
会把system和userdata分别加载到ramdisk文件系统中的system和userdata目录下
make编译的并不是所有内容,不包含内核和SDK。


六   编译sdk

      在源码下载路 下 make PRODUCT-sdk-sdk

     编译完成后会在/home/mfcai/mydroid/out/host/linux-x86/sdk/目录生成sdk


原创粉丝点击