CUPCAKE 编译

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } H1 { margin-bottom: 0.21cm } H1.western { font-family: "AR PL UMing CN", serif } H1.cjk { font-family: "DejaVu Sans"; font-size: 24pt; font-style: normal; font-weight: bold } H1.ctl { font-family: "DejaVu Sans"; font-size: 24pt; font-weight: bold } TD P { margin-bottom: 0cm } A:link { so-language: zxx } STRONG { font-style: italic; font-weight: normal } -->

.PC 工作环境准备 
    1.
Ubuntu 官方主页 www.ubuntn.com.cn 下载 Ubuntu8.04 桌面版,然后完全安装。
    2.
打开 ubuntu 终端,输入 sudo apt-get install 命令来通过 ubuntu 服务器在线安装需要使用的软件,这里不需要选     择软件版本, ubuntu 服务器会做自动的版本匹配。待安装的软件有 flex bison gperf libsdl- dev libesd0-       dev libwxgtk2.6-dev build-essential python valgrind curl git 。执行命令后使用 which 命令验证是否      安装成功,注意,如果缺少部分软件,或者安装没有成功,编译通常都会遇到问题,无法完成。
    3.
www.java.sun.com 下 载 JDK_1.5.0_18.bin ,在 ubuntu 终端中直接执行该程序,默认会被安装                     到 /usr/JDK_1.5.0_18 路径下。在终端中输入 #java–version, 如果显示出 java 版本信息,说明 java 安装成功。
   
这里没有选择 ubuntu 的自动安装,原因主要是有时候下载速度很慢,而且安装过程有时候会出现问题,反正这样从     SUN 的官网下载安装也很简单,呵呵。   
    4
.使用 export 来设置环境变量:
    #export JAVA_HOME=/usr/jdk1.5.0_18
    #export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    #export PATH=$PATH:$JAVA_HOME/bin
   
由于因为其它工作需要的原因,这里我还安装了 1.6 JDK ,所以使用 export 的方式来动态改变环境变量,而没有直     接写到 /etc/bash.bashrc 中,这个大家可以根据自己的具体情况来选择。
    #export PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$PATH(
git 工具进行设置,否则无法正      常使用 )
   
. 代码下载
   
这里的所有代码指定为 Android cupcake 版本,更新日期为 2009 4 8 日,这个版本是 Android 一个相对比较新的      版本。
    1.
创建工作目录:
    #mkdir /home/android
    #cd /home/android
    #mkdir bin
    2
.下载安装 repo 版本管理工具:
    #curl http://android.git.kernel.org/repo > /home/android /bin/repo
    #cd bin
    #chmod a+x repo
   
由于 Android 项目官方采用 repo 来做同步管理,所以这里只有使用 repo 才可以做代码同步。
    3.
准备下载 Android
    #cd /home/android
    #./bin/repo init -u git://android.git.kernel.org/platform/manifest.git –cupcake
   
通常情况下会出现 error 提示(如果是以前没有创建过 repo 账户的话),这个错误可以忽略。最后的 -cupcake 就是      为了下载 cupcake 版本,如果不加的话,下载的是 master 版本, master 版本属于开发测试版本,很多功能还不稳定
    4
.配置 repo 帐户:
    #git config --global user.email "xxxxx@xxxxxxx "
    #git config --global user.name "xxxxxx"
   
邮箱地址填有效邮箱即可,我试过,其实这步跳过也没有问题。
    5
.下载源码:
    #repo sync
   
这个操作就是下载整个 Android 的源码到本地,具体花费时间和网速有关, cupcake 版本源码大概 1.3G 左右。进         入 /home/android/ 可以看到 Android 的源码目录如下:
    --repo  --
主要是同步管理所用到的一系列文件
    --bionic  --Android
编译过程所需要的一些库
    --bootable  --
负责启动和备份的一些文件
    --build  --
最主要的一些 makefile 和编译配置文件
    --dalvik  --
经过 Google 优化了的 java 虚拟机
    --development  --
开发用的一些文件夹,包括模拟器和工具等
    --external  --Android
工程中引入的外部功能库
    --frameworks  --
中间件部分
    --hardware  --
和硬件有关的一些支持文件,包括 wifi ,电信模块等
    --kernel  --
经过了优化和修改的 linux 内核
    --packages  --
所有的上层应用包
    --prebuild  --Android
编译工具所在目录
    --system  --
一些系统级文件
   
. 系统和开发工具编译
    1.
系统编译
    Android
文件系统由于已经自带了经过优化的交叉编译工具,并且为所有的源码都提供了经过验证的 makefile ,所      以系统的整体编译相对简单,官方发布的版本中基本功能都已经包含进了 makefile 中,但是我下载的版本的中文       的输入法没有被引入,这里做适当修改:
    #cd /home/android/build/target/product/
    #gedit generic.mk
   
打开这个文件后,在 PRODUCT_PACKAGES 中,加入 PinyinIME, 然后保存退出。这样在整体编译的时候就会把中文输入     法也编译进 system 中了。
   
修改完成后:
    #cd /home/android/
    #make
   
第一次进行整体编译,这个过程大概持续 2 3 小时,默认情况下,会在 /home/android/ 目录下生成一个 out 文件夹      ,所有的编译生成物都在这一目录下。如果想更改生成文件的目录,请参考 /build/buildspec.mk.default 文件中      的说明和选项,很简单,相信大家都能看懂。如果编译过程中出现问题,请自行检查上面 PC 工作环境准备部分中是     否哪里 出了问题,就不要在论坛里反复问了,因为这样的问题应该是自己参考这个帖子后可以完全自己解决的。
   
    2.
开发工具的编译
    Android
提供了完整的开发工具和交叉编译工具,这些都包含在了源码内,所以只要对源码正确编译,就可以获得      丰富的开发工具,并且 Android 的移植工作也需要这些工具的支持。
   
编译 Android 开发工具的步奏如下:
    #cd /home/android/
    #make sdk
   
如果出现无法正常编译的情况,请检查 JDK1.5.0_18 的环境变量配置是否成功。正常情况下最后在 /home/android/      目录下会生长一个 out 文件夹。
    #cd /out/host/linux-x86/sdk/
   
可以看到这里有了一个名叫 android-sdk_eng.root_linux-x86 的文件夹,这个文件夹基本包含了 Android 的模拟器      和所有的开发调试工具。打开这个文件夹,可以看到这里主要由以下几部分组成:
    --add-ones  --
需要增加的新工具路径
    --docs  --
关于模拟器和各种开发工具的说明等
    --platform  --
模拟器和开发工具需要的文件
    --tools  --
模拟器和开发工具的应用程序
   
. 模拟器使用和文件系统提取
    1.
模拟器使用
   
进入 ~/android-sdk_eng.root_linux-x86/tools 目录下,这里有很多 Android 的工具,其中模拟器对应的应用程        序是 emulator 。下面是正确使用模拟器的步奏:
    #./android create avd –n NO1 –t 1
   
这个命令会进入创建 avd 的过程,按自己的需要做出一些选择后,名称为 NO1 avd 就创建成功了,以后可以通过这      个创建的 avd 来使用模拟器。 1.4 之前的版本不需要这样创建, 1.5 版本后不正确创建是无法使用的。
    #./android list avd
   
输入命令来检查创建是否成功 , 如果成功会列出来。
    #./emulator./android create avd –n NO1 –t 1 –avd NO1
   
启动刚才创建的名为 NO1 的模拟器,使用的内核,文件系统等均使用默认的,即 ~/android-sdk_eng.root_linux-       x86/platform/ 路径下的内核和文件系统。没什么问题的话,我们就可以看到 Android 操作系统的虚拟界面了。
    2.
使用自己编译的系统
    Android
可以运行在开发板上的文件系统的提取需要依靠模拟器,具体的操作步奏如下:
    #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
    #./mksdcard –l 200M /home/sdcard.img
   
这里使用 mksdcard 开放工具在 /home 目录下建立一个 200M sdcard.img ,用于模拟器中数据和外部数据的交互,虚      拟 SD 卡的大小不应该小于 100M ,否则在后期的文件系统打包过程中,有可能会有 SD 卡存储空间不够的问题。
    #./android create avd –n cupcake –t –c /home/sdcard.img 1
   
创建一个名为 cupcake 的,附带有 sdcard 的虚拟设备。
    #./emulator –avd cupcake –sysdir /home/android/out/target/product/generic –data                     /home/android/out/target/product/generic/userdata.img  -ramdisk                     /home/android/out/target/product/generic/ramdisk.img –kernel /home/android/prebuild/android-            arm/kernel/kernel-qemu
   
使用名为 cupcake 的虚拟设备启动模拟器,并规定系统,数据等的映象文件路径,模拟器内核采用                    prebuild/android-arm/kernel/kernel-qemu 。当然也可以使用自己编译的内核镜像,关于如果编译内核的问题 会      在以后陆续发贴说明。
   
打开一个新的终端进行操作:
    #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
    #./adb remount
   
这里使用 adb 工具的 remount 选项来使模拟器中的 system 目录权限改为可读写。
    #./adb push tar /system/bin
   
这里使用 adb 工具的 push 指令将提前使用 busybox 做好的 tar 应用程序加入到模拟器的 /system/bin 目录下。关于         busybox 的使用这里不作介绍,网上太多了,呵呵
    #./adb shell
   
这里使用 adb 工具进入到模拟器的 shell 中。
   
进入到 Android 模拟器的 shell 中操作如下:
    #tar xvf /sdcard/system.tar /system
    #tar xvf /sdcard/userdata.tar /data
   
这里使用前面加入到模拟器中的 tar 应用程序来对 system data 目录下所有内容进行打包,并存储到 sdcard 里。操      作结束后,进入 sdcard 目录下查看是否有了 system.tar userdata.tar 文件,如果有,则证明打包成功。          
    #exit
   
退出 shell ,并关闭模拟器。
    #mount –o loop sdcard.img /mnt
    #cd /mnt
   
这里将虚拟 SD 卡挂载在 /mnt 目录下,进入 /mnt 目录后,就可以将 system.tar userdata.tar 拷贝出来,文件系统的     提取完成。
   
   
经过测试,发现其实使用 android 提供的 mkyaffsimage 直接对 /out/target/product/generic/system 目录 进行打包      ,制作出 system.img 也完全可以使用,不过不知道 userdata.img 如何制作,希望有人可能指点。使用        mkyaffs2image 制作文件系统映像时要注意的是一些配置文件的权限问题,比如 /system/usr/keylayout 下的文件       权限就有问题,需要修改,否则生成的映像在模拟器中加载后,键盘等无法正常使用。
   
最后,要说的是,新加入 android 的朋友们遇到问题我个人建议最好不要立刻就问,毕竟是个 80 %以上都开源的系      统,不妨自己尝试解决问题,到论坛逛逛,在网上搜索下,或者自己读下源码,都是一种提高。拿到的资源其实都     是一样的,学到的东西,得到的锻炼却是不同的。

昏天暗地的花了两天时间 , 终于在 Fedora 8 上成功编译了 android 1.5, 和大家分享一下编译的经验 :)

一 准备编译环境

Fedora 8 已经包含了编译 android 时所需的大部分开发包 , 我们还需要安装 git gperf.

开始终端 , 敲入下面的命令 :

$ yum install git-core

$ yum install gperf

Fedora 8 自带的 java 开发包是 JDK6, 而编译 nadroid 时需要 JDK5, 否则在 make sdk 时会出现错误 .

可以从 sun 网站下载 jdk-1_5_0_18-linux-i586-rpm.bin , 我下载到了 opt 目录下 .

在终端上敲入如下命令 :

$ cd /opt

$ chmod a+x jdk-1_5_0_18-linux-i586-rpm.bin

$ ./jdk-1_5_0_18-linux-i586-rpm.bin

文件会在 /opt 下自动生成 jdk1.5.0_18 子目录 , 并解压 .

然后需要设置 JAVA 主目录 , 编辑 /etc/bashrc 文件 :

$ vi /etc/bashrc

点击 insert i , 进入 insert 模式 , 在文件末尾添加

export JAVA_HOME=/opt/jdk.1.5.0_18

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

点击 esc, 进入命令模式 , 输入 ":wq", 然后敲入 reboot 重新启动 .

启动后 , 开启终端 , 输入 "java -version", 如果提示当前版本为 1.5.0_18, 则安装成功 .

二 下载源代码

先要下载 repo, 如果以 root 用户登陆 , 则可以将 repo 下载 /root/bin 目录下 ( 也可以下载 /home/bin 目录下 , 但要将目

录加入到 PATH ):

$ curl http://android.git.kernel.org/repo > /root/bin/repo

$ chmod a+x /root/bin/repo

然后在 home 下建立 mydroid 文件夹 , 当然可以在其他你喜欢的目录下建立 :

$ cd /home

$ mkdir mydroid

$ cd mydroid

输入以下命令 :

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

不出意外的话 , 完成后应该显示 "repo initialized in /mydroid".

最后输入 "repo sync" 开始下载源代码 .

工程很大 , 只是下载代码的话需要留出 2G 以上的空间 , 如果还要编译那就需要留出 6G 以上的空间 .

三 编译

下载完成后进入源代码目录 , 开始编译 , 如下 :

$ cd /home/mydroid

$ make

完成后会生成 system.img 等文件 .

由于 android1.5 版本 SDK 的目录结构有所变化 , 所以 ADT0.8.0 不能再使用了 , 我们需要自己编译 ADT:

$ ./development/tools/eclipse/scripts/build_server.sh /home

"/home" 是编译好 ADT 后的输出目录 , 可以指定其他你喜欢的目录 , 在这个过程中可能会自动下载

eclipse, 貌似是由于没有设定 ECLIPSE_HOME 环境变量的原因 , 不过没有细究 :).  最后需要生成 linux

下的 SDK, 如下 :

$ make sdk

成功后 , 会在 ./out/host/linux-x86 下生成 sdk 文件夹 , 其中包含了我们需要的 SDK.

注意将 SDK 目录加入到 PATH , 修改 /etc/bashrc, 加入

export PATH=/home/mydroid/out/host/linux-x86sdk/android-sdk_eng.root_linux-x86/tools:$PATH

linux 上运行

需要卸载 eclipse 上原来的 ADT0.8.0( 如何卸载就不说了 , 不过要注意卸载干净 ,ADT Editor 也一并卸载 ).

启动 android1.5 emulator 时需要 avd 文件 , 先输入 "android list targets" 取得 target ID, 例如为 1, 然后 ,

$ android create avd -n my_avd -t 1

创建 avd 文件后 , 即可启动 emulator,

$ emulator -avd my_avd

启动很慢 , 要耐心等待 .

五 生成 window SDK

需要将 mydroid 目录和编译的 ADT, 复制到 windows , 我是在 window xp 下使用 explore2fs 读取 linux 分区进行的

复制 . 然后安装 cygwin, 注意默认的文本类型要设置为 DOS/text, 这些开发包 autoconf, bison, curl, flex, gcc,

g++,git,gnupg, make, mingw-zlib, python, zip, unzip 都要选上 , 不要选择 readline.

打开 development/build/tools/make_windows_sdk.sh 文件 ,

找到 "SDK_NUMBER=`echo $filename | sed -n 's/^.*_\([^_./]\+\)_[^_.]*\..*$/\1/p'`", 修改为

#SDK_NUMBER=`echo $filename | sed -n 's/^.*_\([^_./]\+\)_[^_.]*\..*$/\1/p'`

 SDK_NUMBER=1.5

 然后在 cygwin 中输入以下命令 :

  $ cd mydroid
 $ mkdir -p out/host/windows-x86/sdk
 $ development/ build / tools / make_windows_sdk.sh  out / host / linux - x86 / sdk / android-sdk_eng.root_linux-x86.zip  out / host / windows - x86 / sdk

同样在 eclipse 中安装我们编译的 ADT, 指定 sdk 目录 . 启动 emulator 之前还要生成 avd 文件 .

六 我上传了 , 可以下载

我将我编译的版本 android1.5 压缩后上传到了 rayfile , 大家可以下载 . 文件中的 android-eclipse-v200904252140.zip 就是编译好的 ADT.

 

 

你可能感兴趣的:(eclipse,android,linux,git,ubuntu)