Android: Android源码下载方法详解

来源:互联网 发布:手机抽签软件 编辑:程序博客网 时间:2024/04/29 04:02

安卓源码下载地址:http://source.android.com/source/downloading.html
相信很多下载过内核的人都对这个很熟悉
git clone git://android.git.kernel.org/kernel/common.git kernel
但是这是在以前,现在如果这么执行的话,会显示如下内容
Initialized empty Git repository in /home/star/working/kernel/.git/
android.git.kernel.org[0: 149.20.4.77]: errno=Connection refused
fatal: unable to connect a socket (Connection refused)
通过浏览器输入http://android.git.kernel.org/,发现该网站已经被重定向为http://source.android.com/source/downloading.html
可以在该页面的最后发现内核的下载方法。

 

下面我们介绍一下Android源码下载的步骤。

工作环境:

操作系统:Ubuntu 10.04   或  Ubuntu10.10

git程序 :1.7.0.4  或 1.7.1

转载请注明出处:http://blog.csdn.net/pku_android

方法一:
1.1 初始化安装环境
参考网页http://source.android.com/source/initializing.html
主要要做的就是安装jdk和安装一些软件包
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
  libxml2-utils
如果已经安装了,就不许要这步了

1.2 无论下载内核和源码,都需要进行如下操作
参考网页http://source.android.com/source/downloading.html
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
如果出现: repo init error: could not verify the tag 'v1.12.7',执行下面的命令:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
建立一个文件夹,以便下载的内容保存其中
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
@@@ 以下可以脚本实现autogit.rar @@@

1.3 内核下载
$ git clone https://android.googlesource.com/kernel/common.git kernel
命令行最后面的kernel的意思是保存在这个文件夹下,所以可以是任何名字,该文件夹不需要自己去创建,最后的这个不写也没问题
如果想下载其他版本的内核
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
下载过程中,会有如下信息,速度快慢取决于网速了。
Initialized empty Git repository in /home/star/kernel/kernel/.git/
remote: Counting objects: 40, done
remote: Counting objects: 2073952, done
remote: Finding sources: 100% (208/208)
remote: Getting sizes: 100% (88/88)
remote: Compressing objects: 100% (2/2)
remote: Total 2073863 (delta 1735363), reused 2073862 (delta 1735363)
Receiving objects: 100% (2073863/2073863), 427.93 MiB | 318 KiB/s, done.
Resolving deltas: 100% (1735382/1735382), done.
在我下载的过程中,出现了如下问题
error: RPC failed; result=56, HTTP code = 2002 MiB | 23 KiB/s 
到现在我也不清楚是由于什么原因导致的,猜测
1.1中所说的事情,都做了吗?我发现有一些安装包尚未安装,安装之。
或者,可能是网络问题,重复执行一下,会发现并不是在同一个地方出现这个问题的,说不定哪次就成功了
或者,用别人的电脑下载一下(虽然方法是我发现的,可是并不是我第一个下载成功的,我遇到了RPC failed,后来让同学尝试,成功,之后我也尝试了,在把所需要的安装包都安装后,也成功)

1.4 更换内核版本
由于在1.3中我写的是kernel,这是可以看到当前目录下出现了一个kernel文件夹
$ cd kernel/
$ ls
发现没有任何内容
查看当前内核版本,master,不知道是什么意思
$ git branch
* master
查看所有可用内核版本
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-2.6.39
  remotes/origin/android-3.0
  remotes/origin/master
可以看到目前只提供了少数的版本,只有2.6.39和3.0,比如我要下载2.6.39
$ git checkout -b android-2.6.39 origin/android-2.6.39
Switched to a new branch 'android-2.6.39'
该命令的android-2.6.39指的是分支的名字,其实是可以随便取的,关键是origin/android-2.6.39,要对应git branch -a命令显示的remotes后面的内容
完成后,查询当前分支
$ git branch
* android-2.6.39
  master
$ ls
arch     Documentation  init     lib          README          sound
block    drivers        ipc      MAINTAINERS  REPORTING-BUGS  tools
COPYING  firmware       Kbuild   Makefile     samples         usr
CREDITS  fs             Kconfig  mm           scripts         virt
crypto   include        kernel   net          security
会看到突然出现很多文件夹,这就是内核了
由于误操作
比如$ git checkout -b android-2.6.39 origin/android-2.6.39,只是输入$ git checkout -b android-2.6.39,这时,会得到一个空的分支
$ git branch -a
* android-2.6.39
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-2.6.39
  remotes/origin/android-3.0
  remotes/origin/master
如果再次执行
$ git checkout -b android-2.6.39 origin/android-2.6.39
fatal: git checkout: branch android-2.6.39 already exists
一种方法,就是给把-b后面的android-2.6.39改为其他名字,但是这个有问题的分支android-2.6.39还是会存在的
查看$ git branch --help,找到分支删除的命令
$ git branch -D android-2.6.39
error: Cannot delete the branch 'android-2.6.39' which you are currently on.
需要切换分支,假设也存在android-3.0,当然也可以切换为master或者其他存在的分支,$ git branch -a查看分支
$ git checkout android-3.0
Checking out files: 100% (37131/37131), done.
Switched to branch 'android-3.0'
$ git branch -D android-2.6.39
Deleted branch android-2.6.39 (was fe8bf45).


方法二
2.1 参考1.1和1.2

2.2 类似于下载Android源码的过程,先执行如下命令
$ repo init -u https://android.googlesource.com/platform/manifest
如果要下载指定版本:
repo init -u https://android.googlesource.com/platform/manifest -b  android-4.4_r1
在这一步还需要用到gmail的邮箱
备注:
在下载Android源码的过程中,并不会下载kernel,那怎样才能既下载源码,又下载kernel呢
参考网页http://elinux.org/Android_Kernel_Download
 a kernel git tree并没有被默认的Android manifest file引用既然没有引用,那就加上它
修改.repo/manifest.xml(目前的目录为1.2中已经建立的WORKING_DIRECTORY)
$ vim .repo/manifest.xml
加上这条语句
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>
位置我觉得和其它的project选项并列即可。
版本号参考1.4,可能只能下载2.6.39和3.0

2.3 下载源码和内核reposync.rar
$ repo sync
漫长的等待
~..~只下载内核
如果我只想下载内核呢
很简单,修改2.2提到的文件.repo/manifest.xml,把所有project标签都删除,再添加
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>

编译环境的搭建

首先若是没有修改源,请修改为国内的源,从而提高软件的下载安装的速度

可以参考下面博客的内容添加一些速度快的源,如:台湾源、Ubuntu官方上海源、网易、搜狐、

http://hi.baidu.com/houxn22/item/48f0f7d150657c16d80e4468


安装编译所需的软件

1、 安装jdk

官方推荐安装jdk1.6的,现在不支持命令安装了,只有Oracle官网下载,或者可以在本人百度网盘下面的地址中下载:

http://pan.baidu.com/share/link?shareid=2263608836&uk=4278685087


打开后选择jdk-6u45-linux-x64.bin。

安装完后修改环境变量。


2、 安装其它一些编译所需软件


在终端中执行:sudo apt-get install git-core gnupg flex bison gperf build-essential \

  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \

  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \

  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \

libxml2-utils xsltproc


基本只要安装以上软件即可,官方网站上说的其它一些软件或者设置可以不用理会。

注:此步可能会出现错误,请查看本文最后部分的说明


编译源代码

3.1编译初始化:

在终端中执行:

source build/envsetup.sh

或:

. build/envsetup.sh

执行后输出:

source build/envsetup.sh including device/asus/grouper/vendorsetup.shincluding device/asus/tilapia/vendorsetup.shincluding device/generic/armv7-a-neon/vendorsetup.shincluding device/generic/armv7-a/vendorsetup.shincluding device/generic/mips/vendorsetup.shincluding device/generic/x86/vendorsetup.shincluding device/samsung/maguro/vendorsetup.shincluding device/samsung/manta/vendorsetup.shincluding device/samsung/toroplus/vendorsetup.shincluding device/samsung/toro/vendorsetup.shincluding device/ti/panda/vendorsetup.shincluding sdk/bash_completion/adb.bash


3.2选择编译目标:

在终端中执行下面的命令:

lunch


之后选择你要编译的设备,选择后,会初始化编译的项目的相关文件。


3.3编译代码:

在终端中执行:make -j4

-j4:表示用四个线程来编译


编译根据不同机器的配置不同所需时间也有很大差异。

出现以下信息表示编译完成:

target Java: ContactsTests (out/target/common/obj/APPS/ContactsTests_intermediates/classes)

target Dex: Contacts

Done!

Install: out/target/product/generic/system/app/Browser.odex

Install: out/target/product/generic/system/app/Browser.apk

Note: Some input files use or override a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

Copying: out/target/common/obj/APPS/Contacts_intermediates/noproguard.classes.dex

target Package: Contacts (out/target/product/generic/obj/APPS/Contacts_intermediates/package.apk)

 'out/target/common/obj/APPS/Contacts_intermediates/classes.dex' as 'classes.dex'...

Processing target/product/generic/obj/APPS/Contacts_intermediates/package.apk

Done!

Install: out/target/product/generic/system/app/Contacts.odex

Install: out/target/product/generic/system/app/Contacts.apk

build/tools/generate-notice-files.py  out/target/product/generic/obj/NOTICE.txt  out/target/product/generic/obj/NOTICE.html "Notices for files contained in the filesystem images in this directory:" out/target/product/generic/obj/NOTICE_FILES/src

Combining NOTICE files into HTML

Combining NOTICE files into text

Installed file list: out/target/product/generic/installed-files.txt

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Running:  mkyaffs2image -f out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Install system fs image: out/target/product/generic/system.img

DroidDoc took 5331 sec. to write docs to out/target/common/docs/doc-comment-check


编译可能出现的错误,请查看本文最后部分的说明


4、运行模拟器

在终端中执行:emulator


运行模拟器可能出现的错误,请查看本文最后部分的说明



5、相关问题的解决办法

5.1 下载源代码可能会提示的错误

5.1.1error: Exited sync due to fetch errors...


方法一:不理会他,重新执行repo sync命令。


方法二:

关于这个问题其实google是有说明的http://source.android.com/source/downloading.html,为了防止连接数过多,每个ip都需要认证。。。

第一步:从这里the password generator获取用户名和密码,前提是你在之前填写了你的真实姓名和邮箱

第二步:将上面的页面上以machine开头的两行复制到  ~/.netrc文件中

第三步:repo init -u https://android.googlesource.com/a/platform/manifest  多了个“/a”

然后就可以repo sync了

特别注意.netrc文件是在用户的根目录下,root用户就是/目录下,如果没有的话就自己建一个,把权限改为 *00



5.1.2若是出现这个错误:Exited sync due to gc errors 


表示代码基本下载完,需要从repo里面导出来,但是git的版本太低,不支持1.72以下版本。

添加这个源:deb http://ftp.de.debian.org/debian sid main。

在终端中执行:gedit /etc/apt/source.list

在文件的最后添加deb http://ftp.de.debian.org/debian sid main,并保存退出

回到终端中执行:sudo apt-get update

更新完后,安装高版本的git工具

在终端中执行:sudo apt-get install git-core


5.2安装编译环境的软件可能会出现的问题

下列软件包有未满足的依赖关系: libasound2: 破坏: libasound2-plugins (< 1.0.24-0ubuntu3) 但是 1.0.22-0ubuntu6 正要被安装  libglib2.0-0: 破坏: gnome-control-center (< 1:3) 但是 1:2.30.0-0ubuntu4 正要被安装  ppp: 破坏: network-manager (<= 0.8.0.999-1) 但是 0.8-0ubuntu3 正要被安装E: 破损的软件包


某些源有问题,为高版本 ubuntu的源 ,删除即可,如安装高版本的git所用的源就是ubuntu 10.4之后的源,用在10.04上就可以会有问题,引起此提示。

在终端中执行:gedit /etc/apt/source.list

把文件的最后 deb http://ftp.de.debian.org/debian sid main 删除,并保存退出

回到终端中执行:sudo apt-get update

再次重新安装编译环境的软件


5.3、编译可能会遇到的问题:

5.3.1运行make命令后,提示以下错误:/bin/bash: java: command not found

首先检查是否确实安装了jdk,在终端中输入:java -version ,若是有安装jdk,就会显示jdk的版本信息,提示出错,说明没有安装jdk,那么就安装jdk。

安装jdk后还是提示上面的错误信息,则按执行以下命令建立链接文件来解决问题:

sudo ln -s /jdk1.6.0_21/bin/jar ~/bin/jar

sudo ln -s /jdk1.6.0_21/bin/java ~/bin/java

sudo ln -s /jdk1.6.0_21/bin/javac ~/bin/javac

sudo ln -s /jdk1.6.0_21/bin/javah ~/bin/javah

sudo ln -s /jdk1.6.0_21/bin/javadoc ~/bin/javadoc


重新编译若还是提示一样的错误,再执行下面的命令:

sudo ln -s /jdk1.6.0_21/bin/jar /bin/jar

sudo ln -s /jdk1.6.0_21/bin/java /bin/java

sudo ln -s /jdk1.6.0_21/bin/javac /bin/javac

sudo ln -s /jdk1.6.0_21/bin/javah /bin/javah

sudo ln -s /jdk1.6.0_21/bin/javadoc /bin/javadoc

至此java的问题应该可以解决

5.3.2 编译出现以下错误提示:

============================================

Checking build tools versions...

************************************************************

You are attempting to build with the incorrect version

of java.

 Your version is: java version "1.6.0_24".

The correct version is: Java SE 1.6.

 Please follow the machine setup instructions at

    https://source.android.com/source/download.html

************************************************************

build/core/main.mk:141: *** stop。 停止。

切换从普通用户登,然后修改源码目录的存取权限:chmod 777 src

之后再运行编译命令再次编译

5.3.3 No command 'lunch' found, did you mean:

解决方法:

运行以下命令:

source build/envsetup.sh

之后再次运行编译命令:lunch full-eng或lunch full-user ……..


5.4运行模拟器可能会出现的问题:

No command 'emulator' found, did you mean:

编译成功之后,在终端运行emulator命令,却提示: 

No command 'emulator' found, did you mean:

Command 'qemulator' from package 'qemulator' (universe)

emulator: command not found

解决方法:

重新运行以下命令:

source build/envsetup.sh

lunch full-eng

之后再次运行 emulator  命令


 

转载请注明出处:http://blog.csdn.net/pku_android

0 0
原创粉丝点击