原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html

 告诉windows用户一个不好的消息,windows环境下没法编译android源码。用cygwin?不行,因为cygwin模拟的环境太简单,编译android源码需要好多工具,比如gnupg flex bison gperf libsdl-dev libesd0-dev …有的环境还需要wine。单纯的cygwin肯定是不能满足需要的。那么windows环境下怎么办呢?给你两个选择:第一装虚拟机,第二装双系统。

关键字

Android4.3源码 Android 4.3源码下载 Android 4.3源码编译 Android最新源码

本文的目录结构

1、源码的下载

2、编译环境的搭建

3、编译源代码

4、允许模拟器

5、相关出错的处理方法

Google于2013.07.25发布了Android4.3的源码及其相关产品,下面把本人在ubuntu10.04 的64位系统上下载源码,和编译源码做个记录备份,也供有需要的人参考,难免有错,敬请见谅,还忘勿吝啬指出。

源代码下载、编译环境安装、源代码编译和运行模拟器的过程中可能会出现的一些错误在本文最后一章节,若出现类似错误,可以参考。

1、 源码的下载

源代码的下载,首先需要安装以下工具软件:curl 和 git-core

1.1安装curl:

打开终端,可以使用按Ctrl+Alt +T的快捷方式打开终端

在终端中执行命令:sudo apt-get install curl

1.2安装git-core

1.2.1在用户目录下新建bin目录

在终端中执行:mkdir ~/bin

1.2.2安装git-core

在终端中执行:curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

给repo执行权限:chmod a+x ~/bin/repo

注:若是下载repo失败可以到我百度网盘中去下载,下面给出链接:

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

将~/bin添加环境变量,作用是:git软件下载安装在此目录,在别的目录运行可能提示出错:会找不到此软件。

在终端中执行命令:PATH=~/bin:$PATH

1.3 下载源代码

1.3.1进入要源代码将要保存的目录

如我的源代码保存在:、/opt/android4.3

在终端中执行:cd /opt/android4.3 进入到android4.3目录中

1.3.2 下载源代码

对于下载不同版本的android,指定一个manifest分支(即只指明android对应的版本),使用-b参数(即下载某个版本的源代码),目前关于Android 4.3的源码有以下分支:我们可以选择自己需要下载的:

* [new branch]      android-4.3_r0.9 -> origin/android-4.3_r0.9

* [new branch]      android-4.3_r0.9.1 -> origin/android-4.3_r0.9.1

* [new branch]      android-4.3_r1 -> origin/android-4.3_r1

* [new branch]      android-4.3_r2 -> origin/android-4.3_r2

* [new branch]      android-4.3_r2.1 -> origin/android-4.3_r2.1

我们选择下载最新的源码,具体命令:

~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.3_r2.1

执行此命令会下载一些文件到我们电脑中,这条命令的主要作用是初始化我们要下载的源码的的一些配置文件,看到类似下面的提示,表示初始化完成。

repo has been initialized in /opt/android4.3username@user-desktop:/opt/android4.3$

初始化完成后,会在/opt/android4.3目录中生成一个.repo的目录(此目录为隐藏属性的文件,我们可以在终端中使用ls -la命令,或者在文件浏览器中选择“查看”,然后勾选“显示隐藏文件”,就可以看到此目录),此目录保存了将要下载的源代码的相关信息,下面我们开始下载源码

同步获取源码

#~/bin/repo sync

如果中间出现中断,这个很正常,你可以再次输入 ~/bin/repo sync 命令来进行下载。

可以写一个脚本,当中断后,又自动开始下载,可以在我网盘中下载此脚本:reposync

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

把reposync脚本放在你源码的目录,执行./reposync命令就可以了。

根据网速的不同,下载时间也有快慢,最好在睡觉前或下班后下载代码,由于源文件比较大,一般国内都要5小时左右甚至更久。

若是出现以下信息,表示代码以下载完成:

Fetching projects: 100% (166/166), done.

Syncing work tree: 100% (165/165), done.

源代码下载完成后,/opt/android4.3文件夹的大小为20G左右,其中.repo有10 G+。

运行~/bin/repo sync 还可以重新校对下载的源码,若是有问题或遗漏了一些文件会重新下载,并从.repo目录中导出到实际源码中

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

2、编译环境的搭建

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

可以参考下面博客的内容添加一些速度快的源,如:台湾源、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、编译源代码

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  命令

【转】Android 4.3源码的下载和编译环境的安装及编译的更多相关文章

  1. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  2. Android framework完整源码下载

    包括cpp等native代码.可zip打包下载. https://github.com/android/platform_frameworks_base/branches/stale Android线 ...

  3. 下载Android 5.0源码(附源码)

    下载方法见我的另一篇博客:http://blog.csdn.net/maosidiaoxian/article/details/41680769 2014-12-24更新:5.0.1源码已上传. 这次 ...

  4. 【转】Android 4.4源码下载与编译

    原文网址:http://www.cnblogs.com/zhx831/p/3550830.html 这篇文章记录了我下载源码和编译的全过程, 全过程参考Android官方文档 1. 下载Android ...

  5. Android源码的下载和编译

    由于公司会安排我做硬解码这块,所以最近一直想研究一下Android源码,可是Android源码的下载真的挺麻烦的(可能是我第一次下载),参照网上的方法,没有一个可行的,现在就将我的下载过程和大家分享一 ...

  6. 第一部分:开发前的准备-第八章 Android SDK与源码下载

    第8章 Android SDK与源码下载 如果你是新下载的SDK,请阅读一下步骤了解如何设置SDK.如果你已经下载使用过SDK,那么你应该使用AVD Manager,来更新即可. 下面是构建Andro ...

  7. MAC环境下 Android P 系统源码下载、编译、导入到AS、Pixel2xl刷机 实战

    一.下载源码 1 . 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中: mkdir ~/bin PATH=~/bin:$PATH 2 . 下载 Repo 工具,并确保它可执行: curl ...

  8. Android源码和内核源码的下载,编译和执行

    笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问 ...

  9. I.MX6 android 4.2 源码下载

    /************************************************************************* * I.MX6 android 4.2 源码下载 ...

随机推荐

  1. VS2010 error RC2135: file not found

    VS2010 C++ win32 DLL 工程, 添加 rc 文件, 编辑 String Table. 默认情况下英文版本的 rc 文件能够顺序编译通过,为了让工程支持多语言,将字符串修改为其他语言时 ...

  2. 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)

    题目地址:http://oj.tsinsen.com/A1120 问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但 ...

  3. 未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。数据类型不被支持。

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 博客分类: 雅芳生涯 .Net VB C# OracleMicrosoftSecurity  ...

  4. H5 APP开发必读,20个你不知道的Html5新特征和窍门

    Jeffrey Way曾发表过一篇博文<28 HTML5 Features, Tips, and Techniques you Must Know >讲述了28个HTML5特征.窍门和技术 ...

  5. 《Effective Java》读书笔记

    一.引言 1.几条基本规则:(清晰性和简洁性最为重要) 模块的用户永远也不应该被模块的行为所迷惑(那样就不清晰了),模块要尽可能小,但又不能太小 代码应该被重用,而不是被拷贝 模块之间的依赖性应该尽可 ...

  6. Bind Enum to ListControl

    当使用MVVM时,相信你和我一样经常有这样的需求: 在ViewModel里定义了一个Enum,它必然是对应UI上的一个ListControl作为不同选项. 有一种做法是使用Converter,将Enu ...

  7. CSS学习_属性选择器

    CSS选择器参考 [attribute]——选取带有指定属性的元素: [attribute=value]——选取带有指定属性和值的元素: [attribute~=value]——选取属性值中包含指定词 ...

  8. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  9. js事件之神奇的onclick

    21:58 2013/7/1 <a href="#" onclick="alert(123124);" >链接</a> 意思是鼠标点击链 ...

  10. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185

    一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...