《深入理解Android:Telephony原理剖析与最佳实践》一2.2 Android源代码下载及编译过程

简介: 本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第2章,第2.2节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 Android源代码下载及编译过程

前面完成了Ubuntu、JDK、Android SDK的安装和配置,接着开始下载和编译Android 4.0源代码,这个过程简单但花费的时间比较长,请读者先有个心理准备。
Android 4.0的代号为Ice Cream Sandwich,简称ICS,中文名称冰淇淋三明治。

2.2.1 工作目录设置

本书采用ICS名称的文件夹作为Android 4.0源代码的根目录,在用户根目录下新建代码根目录ICS文件夹,并设置此目录为工作目录,在.bashrc中增加export $workdir=~/ICS。
注意 笔者在Android开发过程中发现,配置工作目录的环境变量有利于提升工作效率,这主要体现在一些Android工具命令、代码路径、编译结果路径等与工作环境变化配合使用会简化操作,读者在使用过程中逐步体味;后续涉及的$workdir是Android 4.0源代码的根目录。

2.2.2 源代码下载

Android 4.0源代码本地的目录已经建立,接着就要开始下载代码了,操作及相关说明如下:

/* repo脚本下载(repo脚本是Android项目编写的Python的脚本,用来统一管理Android项目的代码仓库) */
$sudo curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > /usr/bin/repo
$chmod +x /usr/bin/repo
//代码下载
cd $workdir//实际进入~/ICS目录
repo init -u https://android.googlesource.com/platform/manifest \
-b android-4.0.3_r1//初始化Android代码仓库,其版本为4.0.3

repo sync / 开始下载代码,这个过程花费的时间很长,国内下载完毕的时间大概在几个小时到十多个小时,视网络情况而定;建议读者在晚上下载,一般来讲,一个晚上基本可以完成下载,即使代码下载中途中断了,也不必担心, repo sync支持续传 /

2.2.3 整体编译Android 源代码

Android 4.0源代码下载完成后,开始编译源码,详情见如下操作及相关说明:

$cd $workdir
$ make
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.3//Android源码版本为4.0.3
TARGET_PRODUCT=full
……
============================================
Checking build tools versions...

……//由于编译过程时间比较长,编译的日志会很大,这里省略了编译日志
//以下是编译成功日志信息,可以看出成功生成了很多IMG镜像文件

Installed file list: out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img

第一次编译时间较长,大约为3小时,如果计算机处理能力较强,可以使用make –j8增加编译工作进程数从而减少编译时间。编译完成后,进入$workdir/out/target/product/generic,关注此目录下的system.img、ramdisk.img、userdata.img等3个IMG镜像文件以及data、obj、root、system等目录,请读者自己去看看这些目录下究竟生成了一些什么文件。这里重点关注system目录,其主要结构如下:
app(应用apk文件,如Phone.apk、Mms.apk等)
bin(可执行文件,rild、vold等)
etc(系统配置信息)
fonts(字体文件)
framework(主要保存一些jar包,framework.jar、core.jar等)
lib(主要保存一些so动态链接库文件,libril.so、libreference-ril.so等)
usr(用户配置信息)
xbin(系统的一些可执行文件)

2.2.4 单个模块按需编译

整个Android编译环境从搭建到现在已经完成了80%。前面已经谈到之所以搭建这样的编译环境,就是为了能够调试、运行修改的内容。如果在Phone应用里修改了Android源码增加日志打印,是不是也要通过make来编译呢?这样的话,是不是在编译方面需要花很多时间?不用担心,在Android中能够按照模块进行模块的单独编译,减少不必要的编译时间开销。
注意 在进行分模块编译之前,我们必须完成整体编译,否则不能成功编译需要单个编译的模块。
分模块编译主要有两种方式:第一种,在$workdir下mmm module path;第二种,进入对应的应用模块代码所在目录,执行mm。详情见如下操作及相关说明:

$cd $workdir
$mmm packages/apps/Phone/  //编译Phone应用
$mmm frameworks/base/       //编译frameworks
$. build/envsetup.sh//mm编译方法加载环境变量;这里需要注意的是,build前有一个空格
$cd packages/apps/Phone //Phone应用代码目录
$mm  //编译Phone模块
$cd $workdir
$cd frameworks/base //进入frameworks代码目录
$mm  //编译frameworks

不论采用什么方式编译单个模块,编译成功后,均有如下类似的日志:

Install: out/target/product/generic/system/XXX/XXX.apk

XXX代表应用模块的名称,如果编译frameworks,会生成framework.jar。
注意 建议使用mmm方式分模块编译,如果使用mm方式编译,就会删除system.img、ramdisk.img、userdata.img等IMG镜像文件,之后还要重新make编译全部代码生成这些镜像文件,非常耗时。

2.2.5 编译生成本地Android SDK

还记得前面下载和安装的Android官方发布的SDK吗?既然已经下载了Android 4.0.3源代码,就可以根据Android源代码编译本地的Android SDK,详情见如下操作及相关说明:

$cd $workdir
$make sdk /* 在Android 4.0之前的版本直接用make SDK就能正常编译完成,但到了4.0版本就需要做一些预编译的工作了,否则直接编译SDK会有编译错误出现 */ 
//采用如下的编译过程就能正常编译出本地Android SDK
$. build/envsetup.sh//这里容易出错的地方就是,build前有一个空格
$lunch sdk-eng//加载sdk-eng,默认是full-eng
$make sdk//编译SDK
//编译成功后有如下日志
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.android_linux-x86.zip
//将刚编译出的SDK压缩包复制出来,在做make编译全部代码时会删除此文件,这样避免了重复编译SDK
$cd $workdir/out/host/linux-x86/sdk/
$cp android-sdk_eng.android_linux-x86.zip $workdir/
$tar –xvf $workdir/android-sdk_eng.android_linux-x86.zip
//可对比一下官方发布的SDK与本地编译的SDK有什么区别
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
1224 106
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1106 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
869 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1020 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
500 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
6月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
321 0
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3815 77
|
9月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
1104 4
|
9月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
982 1

热门文章

最新文章

下一篇
开通oss服务