《深入理解Android 5 源代码》——第2章,第2.4节编译源代码

2.4 编译源代码
编译Android源代码的方法非常简单,只需使用Android源代码根目录下的Makefile,执行make命令即可实现。当然在编译Android源代码之前,首先要确定已经完成同步工作。进入Android源代码目录使用make命令进行编译,使用此命令的格式如下所示:

$: cd ~/Android5.0(这里的“Android就是我们下载源代码的保存目录)
$: make

编译Android源代码可以得到“~/project/android/cupcake/out”目录,笔者的截图界面如图2-15所示。

整个编译过程也是非常漫长,需要读者耐心等待。在本节的内容中,将详细讲解编译并在模拟器中运行Android 5.0源代码的方法。

2.4.1 搭建编译环境
在编译Android源代码之前,需要先进行环境搭建工作。在Android官方网站http://source.android.com/source/initializing.html提供了编译源代码的教程,如图2-16所示。

在接下来的内容中,以Ubuntu系统为例讲解搭建编译环境以及编译Android源代码的方法。具体流程如下所示。

(1)安装JDK,编译Android 5.0的源代码需要JDK 1.7,下载jdk-7u22-linux-i586.bin后进行安装,对应命令如下:

$ cd /usr
$ mkdir java
$ cd java
$ sudo cp jdk-7u22-linux-i586.bin所在目录 ./
$ sudo chmod 755 jdk-7u22-linux-i586.bin
$ sudo sh jdk-7u22-linux-i586.bin

(2)设置JDK环境变量,将如下环境变量添加到主文件夹目录下的.bashrc文件中,然后用source命令使其生效,加入的环境变量代码如下:

export JAVA_HOME=/usr/java/jdk_27
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/bin/tools.jar:$JRE_HOME/bin
export ANDROID_JAVA_HOME=$JAVA_HOME

对于安装好的JDK,并且在添加环境变量之后,可以输入并执行命令“java –version”来查看JDK的版本。

(3)然后安装需要的编译工具,对于Linux 10.04系统来说,只需要安装如下所示的软件工具即可,在安装前保持电脑正常连接网络:

sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib-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 \

然后使用下面的命令实现一个软链接文件:

sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

然后安装Linux 11.10系统需要的特别工具:

sudo apt-get install libx11-dev:i386

(4)开始设置高速缓存,目的是加快编译速度。对于配置不是很高的电脑来说,最好进行这个设置,这样可以节约很多时间。设置方法是先用vi或者gedit软件打开宿主目录下的“.bashrc”文件,然后在文件的最后添加如下值:

export USE_CCACHE=1
然后在保存后退出,重新登录系统以使设置生效,如图2-17所示。

在终端中切换到源代码根目录中,然后执行下面的命令设置ccache的大小为50GB。

prebuilts/misc/linux-x86/ccache/ccache -M

其实ccache就是一个执行文件,后面的-M和50GB是传递给ccache的参数,表示设置50GB的缓存空间,这个大小可以根据我们的时间需要来修改。

(5)运行如下所示的命令,导入编译Android源代码所需的环境变量和其他参数:

source build/envsetup.sh

要想了解具体添加了哪些环境变量等,可以打开图2-18中方框中对应的文件。

(6)运行lunch命令选择编译目标,运行lunch命令后会出现一些已经预置好的项目。在此输入对应的数字,然后回车选择编译目标对象,如图2-19所示。

运行lunch命令并选择好编译目标后,会出现如图2-20所示的提示信息。

(7)接下来开始步入真正的编译阶段了,运行如下所示的命令进行编译:

make -j16

因为笔者电脑的CPU是i7 4770,所以,在此使用16,如图2-21所示。

编译过程比较慢,因为电脑配置的问题可能需要几个小时的漫长等待。编译成功后会弹出如图2-22所示的提示信息。

这样在编译完成后,可以在源代码中的“out/target/product/generic/”目录生成对应固件等文件,如图2-23所示。

2.4.2 在模拟器中运行
在模拟器中运行的步骤就比较简单了,只需在终端中执行下面的命令即可:

emulator
运行成功后的效果如图2-24所示。

时间: 2024-09-13 21:54:19

《深入理解Android 5 源代码》——第2章,第2.4节编译源代码的相关文章

《深入理解Android 5 源代码》——第2章,第2.5节编译源代码生成SDK

2.5 编译源代码生成SDK在Android 5.0的源代码的根目录下有一个SDK目录,所有和SDK相关的代码都放在这个目录中,包括镜像文件.模拟器和ADB等常用工具,以及SDK中的开发包的文档,可以通过编译的方式来生成开发需要的SDK,编译命令如下所示: $ Make SDK 当编译完成后,会在/out/host/linux-x86/sdk/目录下生成SDK,这个SDK是完全与源代码同步的,与官方网站上下载的SDK功能完全相同,包含了开发用的JAR包.模拟器管理工具和ADB调试工具,可以使用这

《深入理解Android》一第1章 搭建源代码编译环境

第1章 搭建源代码编译环境 本章主要内容 Android全源码开发环境: Android常用工具及相关技巧说明: WebKit代码目录结构及全书内容概要: WebKit源代码调试. 作为全书的第1章,首先要介绍的是Android系统以及WebKit全源码开发环境的背景信息.

《深入理解Android》一第3章 WTF的实现及使用

第3章 WTF的实现及使用本章主要内容分析OwnPtr和RefPtr的实现及使用分析Assert与Android crash dump分析WTF内存管理及容器类分析原子操作介绍Android WebKit的运行结构第2章对WebKit的整体结构做了介绍,从宏观上勾画出了WebKit的轮廓,使读者据此对WebKit有了整体的了解.从本章起读者将与笔者一道拿起"手术刀",精确剖析WebKit的实现细节,对WebKit建立起具体的认识.对于WebKit的分析,起点一定是其C++基础库-WTF

《深入理解Android》一第2章 浏览器工作原理及WebKit概览

第2章 浏览器工作原理及WebKit概览本章主要内容简述浏览器的工作原理介绍浏览器内核发展史概述WebKit架构第1章为读者说明了Android源码的编译环境本书内容概要,在本章中将阐述万维网技术的基本概念和浏览器的主要工作原理,并简单介绍和对比主流的全功能浏览器内核以及WebKit项目的历史和现状,最后着重描述WebKit内核的架构流程和设计思想.

《深入理解Android 5 源代码》——导读

目 录前 言 第1章 Android系统介绍 1.1节Android系统介绍1.2节剖析Android系统架构1.3节五大组件1.4节进程和线程第2章 获取并编译Android源代码 2.1节获取并编译Android源代码2.2节分析Android源代码结构2.3节Android源代码提供的接口2.4节编译源代码2.5节编译源代码生成SDK第3章 分析Java Native Interface系统第4章 分析HAL系统第5章 分析IPC通信机制第6章 分析Binder对象和Java接口第7章 分

《深入理解Android 5 源代码》——第2章,第2.2节分析Android源代码结构

2.2 分析Android源代码结构 获得Android 5.0源代码后,源代码的全部工程分为以下3个部分. Core Project:核心工程部分,这是建立Android系统的基础,被保存在根目录的各个文件夹中. External Project:扩展工程部分,可以使其他开源项目具有扩展功能,被保存在"external"文件夹中. Package:包部分,提供了Android的应用程序.内容提供者.输入法和服务,被保存在"package"文件夹中. 在本节的内容中

《深入理解Android:卷III A》一一第2章 深入理解Java Binder和MessageQueue

第2章 深入理解Java Binder和MessageQueue 本章主要内容: 介绍Binder系统的Java层框架 介绍MessageQueue 本章所涉及的源代码文件名及位置: IBinder.java frameworks/base/core/java/android/os/IBinder.java Binder.java frameworks/base/core/java/android/os/ Binder.java BinderInternal.java frameworks/ba

《深入理解Android:卷III A》一一2.1概述

2.1概述 由于本书所介绍的内容是以Java层的系统服务为主,因此Binder相关的应用在本书中比比皆是.而MessageQueue作为Android中重要的任务调度工具,它的使用也是随处可见.所以本书有必要对这两个工具有所介绍.根据邓凡平的同意与推荐,本章由卷II第2章升级到4.2.2,并且增加了对AIDL相关知识点的分析.本章作为本书Android源代码分析之旅的开篇,将重点关注两个基础知识点,它们是:Binder系统在Java世界是如何布局和工作的.MessageQueue的新职责.先来分

《深入理解Android:Telephony原理剖析与最佳实践》一导读

前 言 随着ICT技术的推广和发展,在三网融合.智慧的地球(物联网)等概念风行的形势下,手机终端技术的发展和进步可谓日新月异:Android经受住了市场的考验,并占据了较大的市场份额,从手机芯片厂家.手机生产厂家到各种应用开发公司.互联网公司等,逐步形成了以Android系统平台为核心的上下游产业链.正是由于Android源代码的开源,各大手机厂商才能通过深度定制Android系统平台,在降低研发成本的同时,快速推出具有自身特色的Android智能手机产品.因此,各大手机厂家在推出新版本Andr