admin管理员组

文章数量:1532355

2023年12月13日发(作者:)

Android: Android源码下载方法详解

分类: Android平台

安卓源码下载地址:/source/

相信很多下载过内核的人都对这个很熟悉

git clone git:///kernel/ kernel

但是这是在以前,现在如果这么执行的话,会显示如下内容

Initialized empty Git repository in /home/star/working/kernel/.git/

[0: 149.20.4.77]: errno=Connection refused

fatal: unable to connect a socket (Connection refused)

通过浏览器输入/,发现该网站已经被重定向为/source/

可以在该页面的最后发现内核的下载方法。

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

工作环境:

操作系统:Ubuntu 10.04 或 Ubuntu10.10

git程序 :1.7.0.4 或 1.7.1

转载请注明出处:/pku_android

方法一:

1.1 初始化安装环境

参考网页/source/

主要要做的就是安装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 无论下载内核和源码,都需要进行如下操作

参考网页/source/

$ mkdir ~/bin

$ PATH=~/bin:$PATH

$ curl /dl/googlesource/git-repo/repo > ~/bin/repo

如果出现:

repo init error: could not verify the tag 'v1.12.7',执行下面的命令:

curl /git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

建立一个文件夹,以便下载的内容保存其中

$ mkdir WORKING_DIRECTORY

$ cd WORKING_DIRECTORY

@@@ 以下可以脚本实现1.3 内核下载

$ git clone /kernel/ kernel

命令行最后面的kernel的意思是保存在这个文件夹下,所以可以是任何名字,该文件夹不需要自己去创建,最后的这个不写也没问题

如果想下载其他版本的内核

$ git clone /kernel/

$ git clone /kernel/

$ git clone /kernel/

$ git clone /kernel/

$ git clone /kernel/

下载过程中,会有如下信息,速度快慢取决于网速了。

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 /platform/manifest

如果要下载指定版本:

$ repo init -u /platform/manifest -b android-4.4_r1

在这一步还需要用到gmail的邮箱

备注:

在下载Android源码的过程中,并不会下载kernel,那怎样才能既下载源码,又下载kernel呢

参考网页/Android_Kernel_Download a kernel git tree并没有被默认的Android manifest file引用既然没有引用,那就加上它

修改.repo/(目前的目录为1.2中已经建立的WORKING_DIRECTORY)

$ vim .repo/

加上这条语句

位置我觉得和其它的project选项并列即可。

版本号参考1.4,可能只能下载2.6.39和3.0

2.3 下载源码和内核$ repo sync

漫长的等待

~..~只下载内核

如果我只想下载内核呢

很简单,修改2.2提到的文件.repo/,把所有project标签都删除,再添加

编译环境的搭建

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

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

/houxn22/item/48f0f7d150657c16d80e4468

安装编译所需的软件

1、 安装jdk

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

/share/link?shareid=2263608836&uk=4278685087

打开后选择。

安装完后修改环境变量。

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/

或:

. build/

执行后输出:

source build/ including device/asus/grouper/uding device/asus/tilapia/uding device/generic/armv7-a-neon/uding device/generic/armv7-a/uding device/generic/mips/uding device/generic/x86/uding device/samsung/maguro/uding device/samsung/manta/uding device/samsung/toroplus/uding device/samsung/toro/uding device/ti/panda/uding sdk/bash_completion/

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/

Install: out/target/product/generic/system/app/

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/

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

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

Processing target/product/generic/obj/APPS/Contacts_intermediates/

Done!

Install: out/target/product/generic/system/app/

Install: out/target/product/generic/system/app/

build/tools/ out/target/product/generic/obj/ out/target/product/generic/obj/ "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/

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

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

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

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

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

方法二:

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

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

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

第三步:repo init -u /a/platform/manifest 多了个“/a”

然后就可以repo sync了

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

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

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

添加这个源:deb /debian sid main。 在终端中执行:gedit /etc/apt/

在文件的最后添加deb /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/

把文件的最后 deb /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

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

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

/source/

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

build/core/:141: *** stop。 停止。

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

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

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

解决方法:

运行以下命令:

source build/

之后再次运行编译命令: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/

lunch full-eng

之后再次运行 emulator 命令

本文标签: 下载编译安装源码出现