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

简介:

本节书摘来自异步社区《深入理解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所示。


28229247e568dfe35df05ba07288e166f67edc5d

在接下来的内容中,以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所示。


611a115de6e103f6fc6fac6425de0a0125fb6924

在终端中切换到源代码根目录中,然后执行下面的命令设置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所示。


e6312181af7b1b618999adae354f6aad98559646

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

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

make -j16

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


d031c97e7d6fd774a9d1db16e54335072ec48d5f

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

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


828dd48166c5fe167a3b236c162e37abea45a3b5

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

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


e3de657fbf849170ce9171766920a9162e4ec269
相关文章
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
1001 1
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
502 6
如何将python应用编译到android运行
|
Android开发 iOS开发
android自动化编译
android自动化编译
|
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开发知识可参考相关书籍。
433 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
2429 1
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
1111 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
1398 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
1381 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?

热门文章

最新文章