`
adashao
  • 浏览: 21410 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android源码下载以及编译

 
阅读更多
redhat linux


一、下载并编译安装git
wget http://kernel.org/pub/software/scm/git/git-1.7.5.4.tar.bz2



tar -xlvf git-1.7.5.4.tar.bz2
cd git-1.7.5.4
./configure --prefix=/usr/local/ (使用--prefix参数指定Git的安装路径)

make
sudo make install





  一.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 –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.
构建Windows版的Android SDK


来源: ChinaUnix博客  日期: 2009.04.10 22:38 (共有0 条评论) 我要评论

下面是构建Windows版Android SDK的步骤:
1. 在Ubuntu系统里对mydroid做如下Build
  $ cd mydroid
  $ make
  $ make sdk
2. 把Build好的mydroid目录拷贝到Windows系统中
3. 安装cygwin
- 下载地址:
http://www.cygwin.com/
- 设置默认的文本文件类型为DOS/text
- 记住把下面的包都选上autoconf, gcc, g++, bison, python, zip, unzip, mingw-zlib, flex, make, vim
- 最好把emacs, wget, openssh, rsync也都选择安装上
- 不要安装readline
4. 在Build脚本中指定SDK版本号
   脚本文件位置在development/build/tools/make_windows_sdk.sh
   找到'SDK_NUMBER',将其值设置为1.5。如下所示:
    #SDK_NUMBER=`echo $filename | sed -n 's/^.*_\([^_./]\+\)_[^_.]*\..*$/\1/p'`
    SDK_NUMBER=1.5
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.me_linux-x86.zip out/host/windows-x86/sdk
   现在到out/host/windows-x86/sdk目录里看一下吧,SDK的zip压缩包文件应该在那里了。
6. 解压SDK的zip压缩包
   在最新的capcake的SDK目录是,emulator.exe的位置在tools子目录下,几个系统image文件在platforms\android-1.5\images子目录里。
注:
1. 在写本文时,由于编译出的emulator.exe无法执行,所以这里使用了emulator单独发布的代码包(
android-emulator-1.0_r2.tar.bz2
)。
由于该版本的代码没有对新SDK的目录结构作相应更新。所以,在启动emulator.exe程序时,需要用'-system'参数指定image文件存
放的路径,并用'-skindir'参数指定skins目录的路径。当然,也可以自己在'android_main.c'中修改源代码,以便能直接用不带
参数的emulator来启动模拟器。具体如下:
   添加images搜索路径
const char *sysdir_paths[] = {
      "%s/lib/images/%s",    /* emulator in , images in /lib/images */
      "%s/%s",                /* emulator and images in the same directory */
      "%s/../%s",
      "%s/http://www.cnblogs.com/%s",          /* emulator in /host/bin, images in  */
      "%s/../platforms/android-1.5/images/%s", /* 这里是新加的内容,新的SDK1.5中,images存放在/platforms/android-1.5/images里 */
      0
};
   修改skins路径
if (!opts->skindir)
        optional_file(&opts->skindir, "skindir", opts->system, "../skins");
2. 修改用户数据的image文件存放的子目录名
    源代码中的值目前还是'SDK-1.0',为了和Build出的SDK保持统一,可以修改android.h中的代码:
#define ANDROID_SDK_VERSION "SDK-1.5"
3. 最好把cygwin安装在C盘根目录下(C:\),否则需要对Build脚本(make_windows_sdk.sh)作相应修改。
    笔者的cygwin安装在D:\cygwin,所以修改后的内容如下所示:
# We currently need libz from MinGW for aapt
cp -v /cygdrive/d/cygwin/bin/mgwz.dll "$TOOLS"

------------------------------------------------------------------------------
===============================================================================
---------------------------------------------------------------------------


*************************************
1.安装repo前的准备:
*************************************
$ sudo apt-get install git-core gnupg (gnupg实际已自带)

  $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

  $ sudo apt-get install zlib1g-dev

  $ sudo apt-get install valgrind (可选,有21M大,我觉得一般人是用不到的)

  $ sudo apt-get install python2.5 (实际上不用装,Ubuntu 8.10已经自带)

  $ sudo apt-get install sun-java5-jdk

  注意,不要用 sun-java6-jdk, 不然在make sdk,具体来说是make doc这一步中,遇到这个错误:

Docs droiddoc: out/target/common/docs/dx

javadoc: error - In doclet class DroidDoc, method start has thrown an

exception java.lang.reflect.InvocationTargetException

com.sun.tools.javac.code.Symbol$CompletionFailure: class file for

sun.util.resources.OpenListResourceBundle not found2. 下载repo脚本,放到/bin目录下,加上可执行权限

|||||||对于公司的机器直接运行如下命令即可:(针对Ubuntu Linux (32-bit x86))||||||||

$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev


Required Packages:


Git 1.5.4 or newer and the GNU Privacy Guard.

JDK 5.0, update 12 or higher. Java 6 is not supported, because of incompatibilities with @Override.

flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev (optional), build-essential, zip, curl.


You might also want Valgrind, a tool that will help you find memory leaks, stack corruption, array bounds overflows, etc.


$ sudo apt-get install valgrind


Intrepid (8.10) users may need a newer version of libreadline:


$ sudo apt-get install lib32readline5-dev
*******************************************

2.安装repo:
*******************************************
$ cd ~

$ mkdir bin                       //在主目录下新建一个bin文件夹

$ echo $PATH                      //查看环境变量

$ curl http://android.git.kernel.org/repo >~/bin/repo
                                  //下载repo
$ chmod a+x ~/bin/repo


更改PATH:

$ mv ~/repo /bin
***************************************
3.代理设置.
***************************************
因为在公司需要用到代理才能连接外网.所以repo命令也要用到代理设置.具体如下.
因为git的代理是借助其他软件实现的.我们需要下载一个connet.c编译,在新建一个proxy文件。
(1)下载conect.c
下载地址:http://www.newbupt.org/wForum/disparticle.php?boardName=Linux&ID=20184,下载附件内容
(2)gcc -o connect connect.c              //编译成目标文件

     mv connect ~/bin                      //移动到~/bin
(3)设置一个wrapper

echo "/home/liu/bin/connect -H http://10.99.60.201:8080 $@" >> ~/bin/proxy  //注意不要漏掉$@

chmod +x ~/bin/proxy
(4)完成之后记得执行一下 proxy啊。方法:“. Proxy”
******
proxy的写法还有一个版本,我就是用的这个版本调通的。

1..在目录下/home/liu/bin下新建一个proxy.sh 的文件,内容如下:

#!/bin/sh
# /home/proxy.sh

# http proxy setting
export HTTP_PROXY=10.99.60.201:8080
export http_proxy=$HTTP_PROXY

# set git to use ssh over http proxy
export GIT_SSH="/home/liu/bin/socks-ssh.sh"
export GIT_PROXY_COMMAND="/home/liu/bin/socks-gw.sh"

2.在目录下/home/liu/bin下新建一个socks-ssh.sh文件,内容如下:

#!/bin/sh
# /home/liu/bin/socks-ssh.sh
ssh -o ProxyCommand="/home/liu/bin/socks-gw.sh %h %p" $@

3.在目录下/home/liu/bin下新建一个socks-gw.sh文件.内容如下.

#!/bin/sh
# /home/liu/bin/socks-gw.sh
# This script connects to a HTTP proxy using connect.c
connect -H 10.99.60.201:8080 $@
注意:不要忘记执行一下“. proxy”(中间有空格)

********
****************************************
4.准备完成,开始下载源代码:
****************************************
$ mkdir myandroid         //新建一个存取代码的文件夹

$ cd myandroid            //进入此文件夹

    
在myandroid目录中执行


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

  中间会提示输入电子邮件什么的,如果你打算要提交patch的话,用google accounts注册过的邮箱
        在myandroid中执行 repo sync就可以开始下载源码了
$ repo sync
下载源代码说明:
如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,-m参数制定manifest的名字,比如:

$ repo init -u git://codeaurora.org/platform/manifest.git -b [branch] -m [manifest]
              //设置要同步的目录,地址
$ repo sync        //开始同步源代码,即开始下载

例如:
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b donut -m Q8650BSDCANLYA3170.xml  
$ repo sync            


但是这一步非常慢,这里有些文档中没有的技巧了:



repo 的使用请看repo help。如果只是要学习源码的话,那只用repo sync一个命令就行。repo sync不带参数的话会更新所有子项目,可以repo sync project_path来指定更新项目。 那么project_path在哪可以找到呢?myandroid/.repo/manifests/default.xml (你至少需要先repo init过才有这些东西)


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics