Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177683
  • 博文数量: 82
  • 博客积分: 3005
  • 博客等级: 少校
  • 技术积分: 785
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-08 16:05
文章分类

全部博文(82)

文章存档

2012年(5)

2011年(18)

2010年(59)

我的朋友

分类: LINUX

2010-02-10 15:00:35

Android之使用Ubuntu 8.10编译
0. 系统环境
Android目前只支持在Linux和Mac上编译,不支持Windows,这里使用的是Ubuntu
8.10。

 
1. 获取工具
A. Android源码是通过Git来管理的,首先获取Git 1.5.4或更高版本以及GNU
Privacy Guard。
   sudo apt-get install git-core gnupg
B. 获取JDK5.0 update 12或更高版本,目前最高版本是JDK6.0 update 10。
   注意:使用JDK6.0 update 10编译Android系统没有问题,但编译sdk时会出
错。
   sudo apt-get install sun-java5-jdk或
   sudo apt-get install sun-java6-jdk
C. 获取flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可
选),build-essential,zip,curl。
   sudo apt-get install flex bison gperf libsdl-dev libesd0-dev
libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
D. 获取Valgrind(可选),此工具可以帮你查找内存泄漏、堆栈破坏以及数组访
问越界等错误。
   sudo apt-get install valgrind

 
2. 安装Repo
   Repo是一个python脚本,被设计用来更简单的获取Android源码,其核心也是使
用Git来获取源码。
A. 创建~/bin目录,并将其加入PATH环境变量
   cd ~           (进入用户目录)
   mkdir bin       (创建bin文件夹)
   sudo gedit ~/.bash_profile      (打开.bash_profile文件,在其中加入
PATH=$PATH:~/bin)
   . ~/.bash_profile      (使环境变量改变马上生效)
   echo $PATH         (再次检查~/bin是否已经加入PATH环境变量)
B. 下载repo脚本,并将它的属性改为可执行
   curl > ~/bin/repo         (下载
repo)
   chmod a+x ~/bin/repo                                (更改属性)
C. 创建一个保存源码的目录
   mkdir Android        (创建Android目录)
   cd Android            (进入Android目录)
D. 初始化repo工作环境,获取最新的工程清单。
   repo init -u git://android.git.kernel.org/platform/manifest.git
   其中会提示输入姓名和电子邮件,如果需要上传源码到Android项目,请使用
gmail的邮箱。
E. 完成
   初始化完成以后,会有一个类似于下面的提示。
   repo initialized in ~/Android
   这时Android目录下面会有一个.repo目录,里面包含Android各个子项目的清
单(Manifest)以及其他一些文件。
3. 获取源码
   repo sync             (同步源码)
   这个过程非常的漫长,经常会无故无响应或者断掉,没关系,再重新运行repo
sync就可以了。
   不 带参数的repo sync是同步整个Android工程,也可以只同步其中的某一个子
项目,使用 repo sync ,其中project_path可以
在.repo/manifests /default.xml中找到。在default.xml文件中,有很多形
要的project_path。
   因为kernel子项目比较大,建议单独同步,其他的子项目一起同步:
   repo sync kernel
4. 编译源码
A. 建立java环境
   首先检查是否有JAVA_HOME环境变量,
   echo $JAVA_HOME
   如果没有,建立JAVA_HOME环境变量,
   sudo gedit ~/.bash_profile
   在其中加入JAVA_HOME=<你的JDK目录路径>,
   然后再加入ANDROID_JAVA_HOME=$JAVA_HOME,
   然后使环境变量生效,
   . ~/.bash_profile
   再次检查JAVA_HOME以及ANDROID_JAVA_HOME环境变量,
   echo $JAVA_HOME
   echo $ANDROID_JAVA_HOME
B. 编译Android
   cd ~/Android
   B.1 make
   这 一步编译出system.img、userdata.img、ramdisk.img三个镜像,位于
out/target/product /generic目录下。但是这里并没有编译最关键的kernel,如
果需要编译kernel,可以根据自己的硬件环境配置kernel,然后编译生成。
   B.2 如果需要编译sdk,运行make sdk(jdk6.0 update 10编译会出错)。
   使用jdk5.0进行编译sdk可以顺利通过,但是如果已经安装了jdk6,需要执行如
下操作:
   sudo update-alternatives --config javadoc
    现有 2 个可选项,它们都提供了“javadoc”<
    选择        可选项
    -----------------------------------------------
     +        1    /usr/lib/jvm/java-6-sun/bin/javadoc
    *         2    /usr/lib/jvm/java-1.5.0-sun/bin/javadoc
    要维持缺省值[*],按回车键,或者键入选择的编号:
    选择2即可
    B.3 编译内核(master模拟器内核)
    编译器在/home/lgliu/mydroid/prebuilt/linux-x86/toolchain下
    % git clone git://android.kernel.org/kernel/common.git kernel
    % cd kernel
    % export ARCH=arm
    % export CROSS_COMPILE=arm-eabi-
    % make goldfish_defconfig
    % make
    B.4 编译内核(cupcake分支)
      mkdir ~/android_root ; cd ~/android_root
      $ repo init -u git://android.git.kernel.org/platform/manifest.git
-b cupcake
      $ repo sync

        You won't find any goldfish (code name for the emulator
hardware
        platform) files in the synced 2.6.27 kernel source tree. So do
this:

      $ cd kernel
      $ git checkout --track korg/android-goldfish-2.6.27 -b goldfish

        Now you'll find a number of goldfish files on that branch, and
you can
        make the kernel like so:

      $ cd ~/android_root
      $ cd kernel
      $ export ARCH=arm
      $ export CROSS_COMPILE=arm-eabi-
      $ make goldfish_defconfig
      # you now git checkout --track korg/android-goldfish-2.6.27 -b
goldfish have a .config file
      $ make

 

C. 运行emulator
   我们这里使用已经编译好的模拟器kernel镜像,即kernel-qemu,位于
~/Android/prebuilt/android-arm/kernel目录下,然后运行模拟器。
   cd ~/Android/out/host/linux-x86/bin    (进入模拟器程序所在目录)
   ./emulator -system ~/Android/out/target/product/generic -kernel
~/Android/prebuilt/android-arm/kernel/kernel-qemu
   其中-system指定system.img、userdata.img和ramdisk.img所在目录,-kernel
指定加载的内核。
   对于cupcake版本,需要首先创建avd设备,才能使用。
   到
~/android-cupcake/out/host/linux-x86/sdk/android-sdk_eng.lgliu_linux-x86/tools目录运行./android,注意一定是如下目录,
   不是~/android-cupcake/out/host/linux-x86/bin目录,否则会有问
题!!!!!
    ./android create avd -t 1 -n newavd
  
D. 开发环境
   在Android目录下运行. build/envsetup.sh,然后就会多出几个可用的命令,
可以使用help进行查看。
   在修改了某一个模块以后,可以使用mmm <目录>来重新编译所有在<目录>中的
所有模块,使用mm编译当前目录中的所有模块。
   在修改了Android系统以后,可以使用make snod重新生成system.img。
阅读(785) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~