现在的位置: 首页 > 综合 > 正文

buntu 10.04环境下载&编译Android 源代码

2014年01月17日 ⁄ 综合 ⁄ 共 6693字 ⁄ 字号 评论关闭

1. 前言

本文叙述了如何从零开始搭建基于 Google 官方 Android 2.2.1  froyo  源码的开发环境,包括如何下载源代码、编译源代码,以及在模拟器中运行编译生成的镜像。文中开发机是基于 Ubuntu
10.04
 的,同样适用于其他版本的 Ubuntu  现在需要弄清楚一下几点,防止后面出现误操作: 下载源代码是用参数: repo
init -u git://android.git.kernel.org/platform/manifest.git   -b  froyo 
(下载的是 2.2.1版本,编译环境操作系统必须 32 位的, jdk1.5 版本  ---jdk1.5 没有 64 位版本)。如果是没有带参数的下载源代码,将会下载所有的源代码,编译环境要求:操作系统 64 位, jdk1.6 ,(偶是 2010  10 15  做)但很有可能会出现交叉编译工具错误:“ /bin/bash:
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: 
没有那个文件或目录 ”(实际上是有 arm-eabi-gcc 这个文件的,偶怀疑是版本问题 --32 位的,而环境要求是 64 位的 —-- 下载全部代码 

    2. 下载 JDK 1.5 (不建议此下载方式,防止配置环境参数出错。建议用apt-get
install
 方式,请跳转到:第 4  

编译 Android 源码需要 JDK1.5 版(主要是需要其中的 javadoc ), 1.6 版是 不兼容的。 JDK1.5 已经停止支持,其最 终的版本是 JDK
5.0 Update 22
 

可从 Sun 官网上下载:

http://java.sun.com/javase/downloads/5u22/jdk

选择平台 Linux ,勾选同意许可协议: 

单击 Continue ,在弹出的页面中一共有两个下载,选第一个 jdk-1_5_0_22-linux-i586.bin 下载: 

3. 部署 JDK 1.5

   3.1 解压缩 JDK

以下命令均在 root 账户上执行,非 root 账户执行某些命令可能需要加 sudo 

 jdk-1_5_0_22-linux-i586.bin 放在 root  录下。进入该目录:

cd ~

然后赋予该 bin 文件可执行属性:

chmod +x jdk-1_5_0_22-linux-i586.bin

再执行安装 ( 注意前面有 ./) 

./jdk-1_5_0_22-linux-i586.bin

跳过协议阅读。

最后一行:

Do you agree to the above license terms? [yes or no]

键入 yes ,然后回车,开始解压。默认会解压到当前目录下的 jdk1.5.0_22 目录下(此处是 ~/
jdk1.5.0_22
 )。

3.2 JDK 版本切换

  如果同时需要使用 JDK1.6 版做应用开发,则系统中将同时存在 JDK1.5  JDK1.6  因此需要实现能够在不同版本间切换。如果不使用 JDK1.6 ,请做完 1.5  的设置后跳至 3.3 节。

这里使用 update-alternatives 命令实现。

首先为 JDK1.5 版生成可选配置选项:

update-alternatives --install /usr/bin/jdk jdk /root/jdk1.5.22 255 

(sudo update-alternatives --install /usr/bin/jdk jdk /home/ynb/jdk1.5.0_22 255) 

/usr/bin/jdk 是符号链接,它指  /etc/alternatives/jdk (由第 2 个参数 给出的),/root/jdk1.5.22(/home/ynb/jdk1.5.0_22)  实际目的链接, 255 是优先级(任意整数,  automatic
mode
 自动模式 时,数字大的优先级较高,被选为默认配置选项)。

然后再为 JDK1.6 版生成(如果有 JDK1.6 的话。不使用 JDK1.6 的请跳至 3.3  ):

update-alternatives --install /usr/bin/jdk jdk /root/jdk1.6.20 0

这样,默认 jdk 版本即为 1.5 版。 需要切换到 1.6 版时,请使用 update-alternatives
–config jdk

  3.3 配置 JDK 环境变量

下面开始配置环境变量。

在终端中执行: sudo gedit ~/.bashrc

修改 .bashrc 文件,添加下面语句:

#set java environment

export JAVA_HOME=/usr/bin/jdk

export JRE_HOME=JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

该段代码最好设置在文件的尾部。

保存文件。在终端中执行 source ~/.bashrc

重启系统请使用 java –version 检查 JDK 是否 配置正确。

4.  apt-get install 方式安装 JDK1.5 

Android 要求的 jdk 1.5,  Ubuntu10.4 的源里只有 JDK1.6. 如果安装了 jdk1.6 请先卸载 

$sudo  apt-get  remove  remove openjdk-6-jdk

$sudo  apt-get  remove  remove openjdk-6-jre

$sudo  apt-get  remove  remove openjdk-6-jre-headless

 

安装 jdk1.5 目前网上解决方法有两种: 
    解决方法一 ( 建议 )    安装 JDK1.5 
   
  1  根据官方文档里所说 , 源代码的编译必须使用 JDK5 才能编译的了,所以这里偶使用 jdk5
  2  需要先更新源 , 在终端里执行 sudo vim /etc/apt/sources.list
  3   source.list 里把以下 2 行拷贝到文档最后面:      

deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

      保存退出。 
  4  执行 sudo apt-get update 更新源 .
  5  配置编译环境并下载 JDK5  sudo apt-get install sun-java5-jdk
    解决方法二:   安装 JDK
1.6
  , 修改 Android 源文件。 
  1  安装 jdk 1.6 ,修改 <src_top/build/core/make.mk>( 如果 2.0 版本源码请修改<src_top/build/core/main.mk>)
    在文件中搜索并分别把: 
      java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')
      javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')
    两行改成: 
      java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')
      javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')
    即可。 
    推荐使用第一种解决方法。

5 安装其他必备组件

在终端上,使用下面的命令安装: ( 前面的 1  2  3 步骤都可以省略啦 )

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

因为 JDK1.5 在前面已经单独安装过了,因此此处 apt-get install 命令行中没有加入 sun-java5-jdk 

 

6 下载 Android 源代码 

   6 .1 安装 repo 脚本

首先安装 repo 。在当前用户: ~  录下新建一个 bin 目录。在终端中执行:

cd ~

mkdir bin

然后,向 PATH 中添加 bin  径:

export PATH=$PATH:~/bin

然后执行下面两行指令,下载 repo 脚本并修改可执行属性:

curl https://android.git.kernel.org/repo >~/bin/repo

chmod a+x ~/bin/repo

  6 .2 初始化 repo

首先建立一个目录用来存放 Android 源代码:

mkdir mydroid

cd mydroid

然后用最新的列表执行初始化。这里偶下载 android 2.2.1(froyo) ,因此加了参数 –b froyo (android
2.2.2(froyo)
 源码下载 :2G  
repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo )
(
 下载 2.1_r2 源码

repo init -u git://android.git.kernel.org/platform/manifest.git –b android-2.1_r2

下载全部源码: repo init -u git://android.git.kernel.org/platform/manifest.git )

(下载2.0源码:
repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair )
上面下载2.0时有个莫名其妙的问题 :
ynb@ynb-pc:~/bin$ repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair
Usage: repo init -u url [options]
出现上面问题,删除mydroid目录:rmdir mydroid  ; mkdir mydroid2.0 ; cd mydroid2.0;
再:repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair 就可以了)
(
 如果能通过浏览器浏览到 android 源码的主页,但运行 repo init  repo
sync
 的时候,却没法下载源码,形如: 
只需要把 git 开头的地址改为 http 即可: 
[1]
repo init -u http:// android.git.kernel.org/platform/manifest.git -b froyo
[2]
 修改 manifest.git 里的地址,也是把 git:// 改为 http://
vim .repo/manifest.git
如: 
<?xml version="1.0" encoding="UTF-8"?>
  <manifest>
     <remote  name="korg"
             fetch="http:// android.git.kernel.org/"
              review="review.source.android.com" />
     <default revision="froyo"
              remote="korg" />  )

 

这中间会问到你的名字和 Email 。如果你打算上传代码, Email 须是一个 Google 账户。

repo 初始化成功后会看到类似于下面的提 示:

repo initialized in /home/( 当前用户名 )/mydroid

最后执行 $repo sync 开始同步代码。过程比较漫长,下载速度取决于你的网速(偶的 3-4 小时 左右 ),中间有可能遇到断线,重新执行 repo
sync
 即可断点续传。

7 编译 Android 源代码

   7 .1 编译生成镜像

切换到 android 源码根目录下,执行 $sudo make 即可。首次编译非常耗时,取决于机器配置,大约需要 2-3 小时 。有可能会出现:“ Permission
denied
 (权限拒绝的提示)” 请命令赋予权限: $cd 无权限文件的当前目录 回车    $sudo
chmod -R +rwx *  
回车  完成后镜像生成在/root/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 目录下。

   7.2 编译、配置 Android SDK

make 编译完成后,执行 $sudo make sdk 命令,生成对应于该版本源代码的 sdk, 此过程用的时间偶的是 10多分钟 。注意这个 sdk 不能用于生产环境。

用于生产环境的最好用如下命令: $sudo make PRODUCT-sdk-sdk 命令,生成对应于该版本源代码的用于生产环境的 sdk, 此过程用的时间偶的是 1 个多小时 

Android 官方的 SDK 和偶自己编译 Android 源码时使用 make
sdk
 编译出的 SDK 有区别,模拟器版本不同,加载的默认镜像也不同(一个是官方的, 一个是自己编译的)。下面将展示如何能够自由切换 SDK 版本。

首先是自己编译的 SDK 版本,实际位置是(注意权限 : $cd
~/mydroid/out/host/linux-x86/sdk
 
回车,$ sudo chmod -R a+wrx * 回车    
~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86 

8 在模拟器中运行编译的镜像

打开终端,执行 android 脚本:

$android

出现下图所示窗口: 

选择左边第一项 Virtual Devices ,然后在右边选择 New ,新建一个 AVD 

Name  AVD 的名称,随便取,但只能包含字母和数字以及点、下划线和连字符, 这里取名 test 

Traget :目标 SDK 版本,这里选自己编译的 2.1-r1  Android
SDK
 

SD Card  SD 卡。暂且不填,待需要时再设置。

Skin :皮肤(模拟器屏幕分辨率)。

Hardware :使用默认即可

然后点 Create AVD ,就创建好了一个 AVD 。点击 Start  可启动模拟器,其运行的是自己编译的镜像。


若以后要再次启动此 AVD ,请在终端中运行:

emulator –avd test   emulator @test


转载自:http://blog.csdn.net/qclzdh/article/details/6281406

抱歉!评论已关闭.