感谢支持
我们一直在努力

Android源代码下载及编译开发

Ubuntu 环境下载 Android 代码

1.Git 和 Repo 的安装

首先确保在当前用户的主目录下创建一个 /bin 目录(如果没有的话),然后把它 (~/bin) 加到 PATH 环境变量中。

www.linuxidc.com@ubuntu:~$ vim .bashrc 添加:

export PATH=$PATH:~/bin

www.linuxidc.com@ubuntu:~$ source .bashrc

www.linuxidc.com@ubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/a/bin  www.linuxidc.com@ubuntu:~$ sudo apt-get install git-core

www.linuxidc.com@ubuntu:~$ sudo apt-get install curl

这两条命令会从互联网的软件仓库中安装 git-core 和 curl 。 其中 curl 是一个利用 URL 语法在命令行方式下工作的文件传输工具,它支持很多协议,包括 FTP 、 FTPS 、 HTTP 、 HTTPS 、 TELENT 等,我们需要安装它从网络上获取 Repo 脚本文件。

对于android2.3.3可获取:

@ubuntu:~$ curl http://android.git.kernel.org/repo > ~/bin/repo

对于android4.1可获取:

wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo

这句命令会下载 repo 脚本文件到当前主目录的 bin 目录下,并保存在文件 repo 中。 最后我们需要给 repo 文件可执行权限 www.linuxidc.com@ubuntu:~$ sudo chmod a+x /home/a/bin/repo

接下来我们就可以利用 repo 脚本和 Git 、 curl 软件获取 Android 的源代码了。

但许多情况下,可能你根本无法下载,下面列举了一些问题现象和解决的办法:

www.linuxidc.com@ubuntu:~$ cat /etc/issue 
Ubuntu 12.04.2 LTS \n \l 
 
www.linuxidc.com@ubuntu:~$ sudo lsb_release -a 
[sudo] password for jianguoliao: 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description:    Ubuntu 12.04.2 LTS 
Release:    12.04 
Codename:  precise 
www.linuxidc.com@ubuntu:~$ 

上面命令查看自己的ubuntu的版本号:12.04

1、先是系统查看是32位的还是64位

www.linuxidc.com@ubuntu:~$ getconf LONG_BIT 
32 
www.linuxidc.com@ubuntu:~$ getconf WORD_BIT 
32 
www.linuxidc.com@ubuntu:~$ file /bin/ls 
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xae048fd2a071afcb017d9091f4a78835e27340b2, stripped 
www.linuxidc.com@ubuntu:~$ 
www.linuxidc.com@ubuntu:~$ 
www.linuxidc.com@ubuntu:~$ 
www.linuxidc.com@ubuntu:~$ uname -m 
i686 
 
 
uname -m 如果出现i386 i686 i586则是32位 如果出现amd64 则是64位系统 

2、安装jdk1.6

方案一,可能会出现错误

Installing the JDK

——————————————————————————–

The Sun JDK is no longer in Ubuntu’s main package repository. In order to download it, you need to add the appropriate repository and indicate to the system which JDK should be used.

Java 6: for Gingerbread and newer

$ sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

上面可能出现如下错误;

www.linuxidc.com@ubuntu:~$ sudo apt-get install sun-java6-jdk 
正在读取软件包列表… 完成 
正在分析软件包的依赖关系树       
正在读取状态信息… 完成       
现在没有可用的软件包 sun-java6-jdk,但是它被其它的软件包引用了。 
这可能意味着这个缺失的软件包可能已被废弃, 
或者只能在其他发布源中找到 
 
E: 软件包 sun-java6-jdk 没有可供安装的候选者 

方案二  建议采用下面这个方法,我12.04的ubuntu版本,64位的用官方网站用的第一种方法没有成功

 sudo gedit /etc/apt/sources.list 
打开源列表,在最后一行添加 
 
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse  保存退出。 
 
2、sudo apt-get update 
3、sudo apt-get install sun-java6-jdk 
4、www.linuxidc.com@ubuntu:~$ sudo update-alternatives –config java 
There is only one alternative in link group java: /usr/lib/jvm/java-6-sun/jre/bin/java 
Nothing to configure. 
5、www.linuxidc.com@ubuntu:~$ java -version 
java version “1.6.0_06” 
Java(TM) SE Runtime Environment (build 1.6.0_06-b02) 
Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode) 
www.linuxidc.com@ubuntu:~$ 

Installing required packages (Ubuntu 12.04)

——————————————————————————–

Building on Ubuntu 12.04 is currently only experimentally supported and is notguaranteed to work on branches other than master.

$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

3、安装git

sudo apt-get install git-core curl 

这条命令会从互联网的软件仓库中安装 git-core 和 curl

 

4、

Installing Repo

——————————————————————————–

Make sure you have a bin/ directory in your home directory and that it is included in your path:

$ mkdir ~/bin
$ PATH=~/bin:$PATH
Download the Repo tool and ensure that it is executable:

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

其中

www.linuxidc.com@ubuntu:~$  curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 
  % Total    % Received % Xferd  Average Speed  Time    Time    Time  Current 
                                Dload  Upload  Total  Spent    Left  Speed 
  0    0    0    0    0    0      0      0 –:–:–  0:04:00 –:–:–    0curl: (7) Failed to connect to 2404:6800:4005:c00::88: Network is unreachable 

下面为两种解决办法,任何一种都可以

一、

curl “http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo” >~/bin/repo

二、

打开 gedit /etc/hosts

添加如下内容:

74.125.237.1 dl-ssl.google.com

www.linuxidc.com@Ubuntu:~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 22889 100 22889 0 0 20152 0 0:00:01 0:00:01 –:–:– 24221
www.linuxidc.com@ubuntu:~$

chmod a+x ~/bin/repo

5、

Initializing a Repo client

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

$ repo init -u https://Android.googlesource.com/platform/manifest

遇到如下问题:

www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/platform/manifest
gpg: key 920F5C65: “Repo Maintainer <repo@android.kernel.org>” not changed
gpg: key 338871A4: public key “Conley Owens <cco3@android.com>” imported
gpg: Total number processed: 2
gpg: imported: 1 (RSA: 1)
gpg: unchanged: 1

fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

或者:

* [new tag] v1.9.5 -> v1.9.5
* [new tag] v1.9.6 -> v1.9.6
Get https://android.googlesource.com/platform/manifest
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– 0:00:06 –:–:– 0
curl: (22) The requested URL returned error: 404
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 92, done
remote: Finding sources: 100% (92/92)
remote: Total 816 (delta 96), reused 816 (delta 96)
Receiving objects: 100% (816/816), 708.29 KiB | 247 KiB/s, done.
Resolving deltas: 100% (96/96), done.
From https://android.googlesource.com/platform/manifest
* [new branch] android-1.6_r1 -> origin/android-1.6_r1

解决方法,官网说明,和网上统一口径,如下:

1, 先按官网的步骤一步步执行
2,当遇到上述问题后,用浏览器登录https://android.googlesource.com/new-password,并用gmail帐号登录;
3, 点击网页上的“允许访问”,得到类似的结果:

machine android.googlesource.com login git-<userName>.gmail.com password <password>
machine android-review.googlesource.com login git-<userName>.gmail.com password <password>
将上边的两行追加到~/.netrc文件结尾。(如果你的linux系统中从来没有建立过此文件,就在home目录下建立.netrc文件,将上面的信息加到新建的文件中去),
4,下载地址的URI更改为https://android.googlesource.com/a/platform/manifest(中间加上了“/a”)。

因为访问基本是匿名的,为了防止连接过多,对同一IP地址的连接数做了一定的限制。用gmail帐号进行认证。
在公司网络内或者用虚拟机下载的话,会经常遇到这问题。

如果遇到下面问题

www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$
www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/a/platform/manifest –config

Your Name [jianguo liao]: jianguo liao
Your Email [liaojianguo19840726@gmail.com]: liaojianguo19840726@gmail.com

Your identity is: jianguo liao <liaojianguo19840726@gmail.com>
is this correct [y/N]? y

repo has been initialized in /home/jianguoliao/WORKING_DIRECTORY

解决

www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/platform/manifest

Your identity is: jianguo liao <liaojianguo19840726@gmail.com>
If you want to change this, please re-run ‘repo init’ with –config-name

或者:注意没有/a哦

www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/platform/manifest –config

Your Name [jianguo liao]: jianguo liao
Your Email [liaojianguo19840726@gmail.com]: liaojianguo19840726@gmail.com

Your identity is: jianguo liao <liaojianguo19840726@gmail.com>
is this correct [y/N]? y

repo has been initialized in /home/jianguoliao/WORKING_DIRECTORY
www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$

接着搞:

www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
.repo/manifests/: discarding 88 commits

Your identity is: jianguo liao <liaojianguo19840726@gmail.com>
If you want to change this, please re-run ‘repo init’ with –config-name

repo has been initialized in /home/jianguoliao/WORKING_DIRECTORY
www.linuxidc.com@ubuntu:~/WORKING_DIRECTORY$

好吧,接下来最后一步了

$ repo sync

网上有朋友建议,写个脚本如下:

#!/bin/bash
echo “======start repo sync======”
repo sync
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync
done

其中还遇到如下问题,经常提示如下信息,网上有朋友建议:

error: Failed connect to android.googlesource.com:443;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs

fatal: HTTP request failed

error: Cannot fetch platform/tools/motodev

error: Cannot fetch platform/frameworks/base

error: Cannot fetch platform/prebuilts/sdk

error: Exited sync due to fetch errors

等错误信息。

解决方法:编辑/etc/hosts文件

$ sudo gedit /etc/hosts

增加下面内容,保存

74.125.71.82 www.googlesource.com

74.125.31.82 android.googlesource.com

203.208.46.172 cache.pack.google.com

59.24.3.173cache.pack.google.com

此外,还需下载编译库等工具,可用下面命令:

sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl python sun-java5-jdk valgrind lib32readline5 wx-common

这里部分工具是专用于AMD64 位环境的有时Java5 可能无法下载,可有以下尝试解决此问题:

 

第一种尝试:下载java 1.5 的安装bin 包手动安装,最终失败, 具体过程如下:

download java5:

https://launchpadlibrarian.net/24508358/sun-java5_1.5.0-18.orig.tar.gz tar,

chmod a+x, ./xxxx.bin

mkdir /usr/lib/jvm

cp jdk-5.0u18-dlj-linux-i586.bin to /usr/lib/jvm

run jdk-5.0u18-dlj-linux-i586.bin to install java into /usr/lib/jvm/jdk1.5.0_18

add below lines in /etc/enviroment:

JAVA_HOME=/usr/lib/jvm/jdk1.5.0_18

JRE_HOME=/usr/lib/jvm/jdk1.5.0_18/jre

CLASSPATH=.:/usr/lib/jvm/jdk1.5.0_18/lib:/usr/lib/jvm/jdk1.5.0_18/jre/lib

$ java -version

Error occurred during initialization of VM

java/lang/NoClassDefFoundError: java/lang/Object

 

第二种尝试:非常简单,但是有效:

修改source ,将9.10 的源改成9.04 的源。源在/etc/apt/source.list :

deb http://mirror.optus.net/ubuntu/ jaunty main restricted universe multiverse

deb http://mirror.optus.net/ubuntu/ jaunty-security main restricted universe multiverse

deb http://mirror.optus.net/ubuntu/ jaunty-updates main restricted universe multiverse

deb http://mirror.optus.net/ubuntu/ jaunty-proposed main restricted universe multiverse

deb http://mirror.optus.net/ubuntu/ jaunty-backports main restricted universe multiverse

deb-src http://mirror.optus.net/ubuntu/ jaunty main restricted universe multiverse

deb-src http://mirror.optus.net/ubuntu/ jaunty-security main restricted universe multiverse

deb-src http://mirror.optus.net/ubuntu/ jaunty-updates main restricted universe multiverse

deb-src http://mirror.optus.net/ubuntu/ jaunty-proposed main restricted universe multiverse

deb-src http://mirror.optus.net/ubuntu/ jaunty-backports main restricted universe multiverse

运行:sudo apt-get update 之后,用sudo apt-get install sun-java5-jdk 即可像以往一样安装java 1.5

或按以下源添加JDK:

1.5的:

执行sudo gedit /etc/apt/sources.list,

添加以下内容,将10.04的源改成9.04的源。

deb http://cn.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb http://cn.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

然后sudo apt-get update

再用sudo apt-get install sun-java5-jdk

安装后的基本设置:

sudo update-alternatives –config java

sudo update-java-alternatives -s java-1.5.0-sun

 

1.6的:

sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
sudo apt-get update
sudo apt-get install sun-java6-jdk

 

安装后的基本设置:

sudo update-alternatives –config java

sudo update-java-alternatives -s java-1.5.0-sun

这时候再用java -version 就能看到java 1.5 已经正常工作了最后不要忘记把源换回9.10的

 

2 、初始化版本库 如果是想把 Android 当前主线上最新版本的所有的 sourcecode 拿下来,我们需要 repo 的帮助。

先建立一个目录,比如 ~/myandroid ,进去以后用 repo init 命令即可。

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

对于android4,可使用下面命令:

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

repo sync

这个过程会持续很长的时间,具体要多少时间就取决于网络条件了 最后会看到

repo initialized in /myandroid 这样的提示,就说明本地的版本库已经初始化完毕,并且包含了当前最新的 sourcecode 。

如果想拿某个 branch 而不是主线上的代码,我们需要用 -b 参数制定 branch 名字,比如:

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

另一种情况是,我们只需要某一个 project 的代码,比如 kernel/common ,就不需要 repo 了,直接用 Git 即可。

git clone git://android.git.kernel.org/kernel/common.git

这也需要不少的时间,因为它会把整个 Linux Kernel 的代码复制下来。

如果需要某个 branch 的代码,用 git checkout 即可。比如我们刚刚拿了 kernel/common.get 的代码,那就先进入到 common 目录,然后用下面的命令:

git checkout origin/android-goldfish-2.6.27 -b goldfish

这样我们就在本地建立了一个名为 goldfish 的 android-goldfish-2.6.27 分支,代码则已经与 android-goldgish-2.6.27 同步。

我们可以通过 git branch 来列出本地的所有分支。 这里我们以 android-2.1_r1 这个分支为例:

www.linuxidc.com@Ubuntu:~$ mkdir myandroid www.linuxidc.com@ubuntu:~$ cd myandroid www.linuxidc.com@ubuntu:~/myandroid$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.1_r1

repo initialized in /home/a/myandroid

3 、同步版本库 使用 repo sync 命令,我们把整个 Android 代码树做同步到本地,同样,我们可以用类似 repo sync project1 project2 … 这样的命令来同步某几个项目 如果是同步 Android 中的单个项目,只要在项目目录下执行简单的 git pull 即可。 www.linuxidc.com@ubuntu:~/myandroid$ repo sync 下载 android-sdk-2.1_r1 版本

www.linuxidc.com@ubuntu:~$ # mkdir android-sdk-2.1_r1

www.linuxidc.com@ubuntu:~$ # cd android-sdk-2.1_r1/

www.linuxidc.com@ubuntu:~ android-sdk-2.1_r1

# repo init -u git://android.git.kernel.org/platform/manifest.git -b android-sdk-2.1_r1

www.linuxidc.com@ubuntu:~$ android-sdk-2.1_r1

# repo sync

 

Gentoo 环境下载 Android 代码 同 ubuntu 类似,先下载 repo 和 git:

emerge net-misc/curl

emerge dev-util/git

编辑~/.bashrc 文件,把~/bin 目录加到PATH 后续操作与 ubuntu 相同

 

5 、通过 GitWeb 下载代码 另外,如果只是需要主线上某个项目的代码,也可以通过GitWeb 下载,在shortlog 利用关键字来搜索特定的版本,或者找几个比较新的tag 来下载还是很容易的。 Git 最初是为Linux 内核开发而设计,所以对其他平台的支持并不好,尤其是Windows 平台,必须要有Cygwin 才可以。现在,得益于msysgit 项目,我们已经可以不需要Cygwin 而使用Git 了。另外,Git Extensions 是一个非常好用的Windows Shell 扩展,它能与资源管理器紧密集成,甚至提供了Visual Studio 插件。它的官方网站上有一分不错的说明文档 ,感兴趣的朋友可以看一看。至于Git 的参考文档,我推荐Git Magic ,这里还有一个Git Magic 的中文版 。

 

source 命令的使用

source 命令: source 命令也称为“点命令”,也就是一个点符号(. )。

source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

用法:

#vim ~/.bashrc #source ~/.bashrc

Android 中 mm build 的方法也是一样

#source ./build/envsetup.sh

#cd android sub dir

#mm source

命令用法:

source FileName

作用: 在当前bash 环境下读取并执行FileName 中的命令。

注:该命令通常用命令“ .” 来替代 。

如:source .bash_rc 与 . .bash_rc 是等效的。

source 命令( 从 C Shell 而来) 是bash shell 的内置命令。点命令,就是个点符号,( 从Bourne Shell 而来) 是source 的另一名称。同样的,当前脚本中配置的变量也将作为脚本的环境,source( 或点) 命令通常用于重新执行刚修改的初始化文档,如.bash_profile 和 .profile 等等。

例如,假如在登录后对 .bash_profile 中的 EDITER 和 TERM 变量做了修改,则能够用source 命令重新执行 .bash_profile 中的命令而不用注销并重新登录。比如您在一个脚本里export $KKK=111 , 假如您用./a.sh 执行该脚本,执行完毕后,您运行 echo $KKK , 发现没有值,假如您用source 来执行 ,然后再echo , 就会发现KKK=111 。因为调用./a.sh 来执行shell 是在一个子shell 里运行的,所以执行后,结构并没有反应到父shell 里,但是 source 不同他就是在本shell 中执行的,所以能够看到结果 source 命令的一个妙用在编译核心时,常常要反复输入一长串命令,如 make mrproper make menuconfig make dep make clean make bzImage ……. 这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。用source 命令可以办到这一点。它的作用就是把一个文件的内容当成是shell 来执行。先在/usr/src/linux- 2.4.20 目录下建立一个文件,取名为make_command :在其中输入如下内容:

make mrproper && make menuconfig && make dep && make clean && make bzImage && make modules && make modules_install && cp arch/i386/boot/bzImge /boot/vmlinuz_new && cp System.map /boot && vi /etc/lilo.conf && lilo -v 文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20 下输入 source make_command 就行了。这个文件也完全可以做成脚本,只需稍加改动即可。

这里主要是让大家理解source 的用法。如果你用的不是lilo 来引导系统,可以把最后两句话去掉。配置你自己的引导程序来引导新内核。 shell 编程中的命令有时和C 语言是一样的。&& 表示与,|| 表示或。把两个命令用&& 联接起来,如 make mrproper && make menuconfig ,表示要第一个命令执行成功才能执行第二个命令。对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。

Ubuntu 下AMD64CPU 编译

Android 心得

sudo update-alternatives –config java

sudo update-alternatives –config javac

sudo update-alternatives –config javadoc

切换到对应JAVA 编译环境 AMD64环境下 build android可能会遇到的问题:

1、 sudo apt-get install g++-4.2-multilib 或执行: sudo apt-get install g++-multilib 解决ld lstd++ 问题,编译adb时候出现 2、 sudo apt-get install zlib1g-dev

3、 sudo apt-get install lib32z1-dev lib32ncurses5-dev 解决ld -lz -lncurses 问题

4. cd /usr/lib32 sudo ln -s libX11.so.6 libX11.so 解决 libX11问题

5. g++和gcc 用4.3的版本,若不是4.3,用ln改一下: sudo ln -snf gcc-4.3 gcc sudo ln -snf g++-4.3 g++ sudo ln -snf cpp-4.3 cpp 6. 内存要多于1G。不然会在target dex的时候挂住。

Ubuntu环境下采用sudo apt-get安装eclipse后,install Android Gingerbread(2.3)的ADT:

Eclipse / Help / Install New Software / Add Location输入
https://dl-ssl.google.com/android/eclipse/

这是ADT的安装网址,若出现安装问题,可能有以下原因:

1、通过Eclipse的Help->install new software,安装http://dl.google.com/eclipse/plugin/3.5目录下的插件,解决wst.sse.core插件找不到的Bug

2、在Eclipse下通过Help->install new software安装http://download.eclipse.org/tools/gef/updates/releases/,解决Eclipse插件GEF(Graphical Editing Framework)安装问题。

3、此时再安装ADT包不会存在插件找不到的提示,安装完后再通过ADT安装Android SDK即可。

赞(0) 打赏
转载请注明出处:服务器评测 » Android源代码下载及编译开发
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏