《深入理解Android 5 源代码》——第2章,第2.1节获取并编译Android源代码

简介:

本节书摘来自异步社区《深入理解Android 5 源代码》一书中的第2章,第2.1节获取并编译Android源代码,作者 李骏,更多章节内容可以访问云栖社区“异步社区”公众号查看

第2章 获取并编译Android源代码
深入理解Android 5 源代码
在分析Android源代码之前,需要先获取Android系统的源代码,并在自己的机器上进行编译。在本章的内容中,将详细讲解获取并编译Android 5.0源代码的基本知识。另外,因为Android系统源代码的文件数量巨大,目录结构层次复杂,所以,将在本章对Android 5.0源代码的目录结构进行整体分析,并详细介绍从SDK中生成SDK的方法。

2.1 获取Android源代码
要想研究Android系统的源代码,需要先获取源代码。目前市面中的主流操作系统是Windows、Linux和Mac OS。因为Mac OS属于类Linux系统,所以本书将讲解在Windows系统和Linux系统中获取Android源代码的知识。

2.1.1 在Linux系统中获取Android源代码
北京时间,Google在https://android.googlesource.com/上正式公布了Android 5.0的源代码,如图2-1所示。

在Linux系统中,通常使用Ubuntu来下载和编译Android源代码。由于Android的源代码内容很多,Google采用了Git的版本控制工具,并对不同的模块设置不同的Git服务器,我们可以用repo自动化脚本来下载Android源代码。在Android官方站点source.android.com/source/ building.html中,提供了获取并编译Android源代码的具体过程,如图2-2所示。


93723798a1351c3be401de90dd33d542a7083c8e

在接下来的内容中,将详细讲解获取Android源代码的过程。

(1)下载repo

在用户目录下,创建bin文件夹,用于存放repo,并把该路径设置到环境变量中去,命令如下:

$ mkdir ~/bin
$ PATH=~/bin:$PATH
下载repo的脚本,用于执行repo,命令如下:

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
设置可执行权限,命令如下:

$ chmod a+x ~/bin/repo

(2)初始化一个repo的客户端

在用户目录下,创建一个空目录,用于存放Android源代码,命令如下:

$ mkdir AndroidCode
$ cd AndroidCode

进入到AndroidCode目录,并运行repo下载源代码,下载主线分支的代码,主线分支包括最新修改的bug,以及并未正式发布的版本的最新源代码,命令如下:

$ repo init -u https://android.googlesource.com/platform/manifest
下载其他分支正式发布的版本,可以通过添加-b参数来下载,命令如下:

$ repo init -u https://android.googlesource.com/platform/manifest -b
android-5.0_0_r1

例如可以使用如下命令来初始化最新的Android源代码:

./repo init -u https://android.googlesource.com/platform/manifest -b android-5.0_0_r1

在下载过程中会需要填写Name和E-mail,填写完毕之后,选择Y进行确认,最后提示repo初始化完成,这时可以开始同步Android源代码了,同步过程很漫长,需要耐心等待,执行下面命令开始同步代码:

$ repo sync

经过上述步骤后,便开始下载并同步Android源代码了,笔者的界面效果如图2-3所示。


fbcab6f5bf51e48c42beca3ab863a584d94497aa

因为网络方面的原因,可能执行“./repo init-u https://android.googlesource.com/platform/manifest-bandroid-5.0_0_r1”初始化命令会失败,提示一些类似网络连接失败的信息,此时不用理会,只需继续执行这个命令。如果出现多次失败提示,则可以尝试使用如下方法来解决。

(1)使用如下命令删除Android 5.0文件中的缓存文件,然后重新执行初始化命令:

rm -rf * -R

(2)晚上、凌晨时下载,一般这个时候的网络环境容易下载Android源代码。

注意
 
(1)在源代码下载过程中,在源代码下载目录看不到任何文件,打开“显示/隐藏”,会看到一个名为“.repo”的文件夹,这个文件夹是用来保存Android源代码的“临时文件”。
(2)当文件最后下载接近完成时,会从“.repo”文件夹中导出Android源代码。
(3)当Android 5.0源代码下载完成后,可以看到Android源代码下载目录中会有bionic、bootable、build、cts、dalvik等文件夹目录,这些就是Android的源代码。
(4)如果不得不关闭电脑停止下载,那么可以在源代码下载的终端中按下Ctrl + C组合键或者Ctrl + Z组合键停止源代码的下载,这样不会造成源代码的丢失或损坏。

2.1.2 在Windows平台获取Android源代码
在Windows平台上获取Android源代码的方式和在Linux中获取原理相同,但是需要预先在Windows平台上面搭建一个Linux环境,此处需要用到cygwin工具。cygwin的作用是构建一套在Windows上的Linux模拟环境,下载cygwin工具的地址如下:

http://cygwin.com/install.html
下载成功后会得到一个名为“setup.exe”可执行文件,通过此文件可以更新和下载最新的工具版本,具体流程如下所示。

(1)启动cygwin,如图2-4所示。

(2)单击“下一步”按钮,选择第一个选项:从网络下载安装,如图2-5所示。


1da172526871b9eaf0e047a6e0c413ff78f70233

(3)单击“下一步”按钮,选择安装根目录,如图2-6所示。

(4)单击“下一步”按钮,设置网络代理。如果所在网络需要代理,则在这一步进行设置,如果不用代理,则选择直接下载,如图2-7所示。


05e1a358f927bef17326e28bd9c8a9e6264a712c

(5)单击“下一步”按钮,选择下载站点。一般选择离我们比较近的站点,速度会比较快,如图2-8所示。

(6)单击“下一步”按钮,开始更新工具列表,如图2-9所示。


241f3e1a93e8c3526691fb6d108e563a794afe42

(7)单击“下一步”按钮,选择需要下载的工具包。在此需要依次下载curl、git、python这些工具,如图2-10所示。

为了确保能够安装上述工具,一定要用鼠标双击图2-10中的那些项使其变为Install形式,如图2-11所示。


06109708f5b546ef11c7092d165e80c2acbe8f62

(8)单击“下一步”按钮,经过漫长的等待过程,如图2-12所示。

如果下载安装成功会出现提示信息,单击“完成”按钮即完成安装。当安装好cygwin后,打开cygwin,会模拟出一个Linux的工作环境,然后按照Linux平台的源代码下载方法就可以下载Android源代码了。

建议读者在下载Android源代码时,严格按照官方提供的步骤进行,地址是:http://source. android.com/source/downloading.html,这一点对初学者来说尤为重要。另外,整个下载过程比较漫长,需要大家耐心等待。图2-13是下载Android源代码时的截图。


25c678ab0f0a0bcf32285de2eb4f7727a502844c
相关文章
|
5月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
403 1
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
123 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
3月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
5月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
282 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
5月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
394 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
291 0
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
57 19
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
65 14