`
kongweile
  • 浏览: 517306 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android Build系统分析

阅读更多

闲来无事,分析一下Android的Build系统,希望对自己的工作有所助益;有可能对别人有所帮助。

Android无疑是一个很大的系统,目前看来也是还很年轻,又很有活力的一个系统。通过研究它的build子系统,至少可以看到一个大系统是怎样写出来的。

Makefile,很多人可能都觉得,这个东西太简单了,甚至很多时候都不需要,我直接gcc把源代码编出来就可以了。这种想法,在程序小的时候是可以的,但是要写一个大型的系统的话,如果还守着以前的手工作坊的模式,那只会给自己带来很大的困扰。

我们关注的不是Makefile的语法,偏僻的用法,而是学习一下,Android这个大系统里,关于build管理,它用Makefile解决了一些什么样的问题。

粉墨登场

产品,product。Android已经支持了好几款产品,比如有HTC的dream, hero, nexus,Motorola的droid等,还有Google自己的generic的android源码。

Variant。Android在build的时候,可以指定几个variant,比如,user, userdeubg, eng, tests。通过这些选项,可以编译出来不同的程序,eng是给工程师用的,user是给最终客户用的。

子系统。Android平台里有很多不同的程序。有跑在手机上的,有跑在PC上的。有程序,有库。有动态库,也有静态库。有代码,也有文档。有C,有C++,也有Java。还有键盘/字符映射表。这些都是需要编译的。

继承关系。针对很多产品的角色之间,是有继承关系的。比如,Google自己的产品,其实不是一个产品,只是一个参考设计。但是其他所有厂商的产品呢,又必须是从Google的参考设计继承下来的。如果每个厂商都需要从头定义很多自己的标准,那很费人力,又不好维护,就像人类造通天塔一样,是不可能成功的。Google定义出来了一套标准,就是要鼓励厂商们使用它的这套标准。

天狗吠日

好吧,让我们看一眼代码吧。

build/target/product底下有一些.mk文件,其格式是Makefile文件,其中:

core.mk定义了product_packages,也就是说,基本上所有基于Android的系统,都必须有这几个package。像browser啊,contacts啊,launcher啊,phone啊,都是这里面规定了的,其他厂商版本没有特殊情况,就不需要再自己去定义这几个package了。

generic.mk又定义了几个额外的package,同时继承了core.mk。

说到这儿,您可能会觉得奇怪,继承那不是面向对象的概念吗,怎么Makefile里还能“继承”呢?这样想的话就错了。Makefile一样能继承。即使是汇编语言,你都可以继承。语言只是提供一种方便而已,关键还是要看人怎么用。

C++提供了继承,但是它不是一个专门为build管理设计的语言啊。Makefile语言才是专门为build系统设计的语言。但是我们看到Android这样一个系统,它需要用到继承的概念时,有经验的开发者肯定不会那么死板,因为一种语言没有内在的某种特性就束手无策。他们会考虑两种方案

1。换语言。比如我自己重新写一个build的语言。Java里的ant,还有boost C++库的jam,就是这么来的。

2。自己用已有语言编程实现需要的特性。

一般来说,影响做出最后决定的因素,无疑应该是代价。专门发明一种新语言,代价还是很大的。所以我们看到,Android的开发者选择了后者。

待续。

转:http://blog.csdn.net/flowermonk/archive/2010/04/03/5447813.aspx

分享到:
评论

相关推荐

    理解 Android Build 系统

    理解 Android Build 系统,安卓编译的规则原理分析!详解

    android编译系统分析(很详细)

    Android 编译系统分析 Android 编译系统是 Android 操作系统的核心组件之一,它负责将源代码编译成可执行文件。Android 编译系统的分析对于Android 开发者来说非常重要,因为它可以帮助开发者更好地理解 Android 的...

    Android SDK Build Tools 25.0.0

    Android SDK Build Tools是Android Studio项目构建系统的一部分,用于编译、打包和优化APK。它们处理诸如AAPT(Android Asset Packaging Tool)这样的任务,负责资源的编译和打包,以及 Dex 文件的生成等。 2. **...

    Android SDK build-tools 23

    Lint是Android开发中的静态代码分析工具,用于检测潜在的错误和不推荐的实践。在23.0.2版本中,Lint可能增加了新的检查规则,提升了代码质量。 8. **资源编译** build-tools 23.0.2可能改善了资源编译过程,使得...

    android-sdk-build-tools29.0.0.rar

    随着Android系统的更新,Build-Tools也会定期发布新版本,以适应最新的开发需求和API级别。29.0.0是Build-Tools的一个重要版本,它包含了许多优化和改进,以提升开发效率和应用质量。 二、主要组件及功能 1. AAPT...

    Android编译系统分析-转

    Android编译系统是Android操作系统的核心组成部分,负责将源代码转换为可在设备上运行的二进制文件。它是一个复杂的构建系统,涉及多个层次的配置、编译和打包过程。本文将深入探讨Android编译系统的结构和工作原理...

    Learn Android Studio- Build Android Apps Quickly and Effectively

    随着移动互联网技术的飞速发展,Android操作系统已经成为全球最流行的移动操作系统之一。对于希望进入移动应用开发领域的开发者而言,掌握Android Studio这一官方推荐的集成开发环境(IDE)至关重要。本教材旨在帮助...

    Android Makefile and build system 分析

    ### Android Makefile与Build System深度解析 #### 一、引言 随着移动互联网技术的快速发展,尤其是近十年间,智能手机已成为人们日常生活中不可或缺的一部分。在众多操作系统中,Google推出的Android系统因其开放...

    android studio build-tools 27.0.1

    当遇到"failed to find build tools 27.0.1"的错误时,意味着你的系统缺少这个特定版本的构建工具,这将导致项目无法正常编译。为解决这个问题,你需要下载并安装对应的`build-tools`版本。具体步骤如下: 1. 打开...

    Learn Android Studio Build Android Apps Quickly And Effectively

    综上所述,《Learn Android Studio Build Android Apps Quickly And Effectively》不仅是一本系统介绍Android Studio及其应用开发的教程,还是一本引导读者如何有效利用该工具进行高效开发的手册。通过循序渐进的...

    android build-tools_r19.0.3-windows

    【Android Build-Tools_r19.0.3-Windows】是Android SDK中的一个重要组件,它为开发者提供了构建Android应用程序所需的工具集。这个特定版本(r19.0.3)适用于Windows操作系统,确保了在Windows环境下开发Android...

    Android build.prop生成过程y源码分析

    ### Android build.prop生成过程源码分析 #### 一、概览 `build.prop`是Android系统中的一个关键配置文件,它记录了系统构建时的重要属性信息,如屏幕密度(LCD density)、默认语言设置、编译时间等。这些信息对于...

    android编译系统分析.pdf

    《Android编译系统分析》 Android的编译系统是其核心组成部分之一,它负责将源代码转换为可以在Android设备上运行的应用程序和系统组件。理解这个系统的工作原理对于开发者来说至关重要,因为它涉及到如何构建、...

    Android 编译系统分析.doc

    Android编译系统是Android操作系统开发的关键组成部分,负责将源代码转化为可在不同设备上运行的可执行文件和库。本文将深入解析Android编译系统的结构和工作原理,重点关注四种类型的Make文件及其作用。 首先,...

    sdk build tools 28.0.3

    这个版本针对Windows操作系统设计,包含了构建Android应用所需的各种工具。在本文中,我们将深入探讨这个版本的SDK Build Tools包含的关键知识点,以及它如何在Android开发流程中发挥作用。 首先,SDK Build Tools...

    高清彩版 Learn Android Studio Build Android Apps Quickly And Effectively

    - **书名**:“高清彩版 Learn Android Studio Build Android Apps Quickly And Effectively” - **作者**:Adam Gerber 和 Clifton Craig - **简介**:本书旨在帮助读者快速有效地掌握使用 Android Studio 开发 ...

    com.android.tools.build:gradle:3.2.0

    - **`tools.build`**:强调这是Android构建工具相关的部分,即Android Gradle插件。 - **`gradle`**:通用的Gradle标签,涵盖了所有与Gradle相关的知识点。 5. **压缩包内容**: `gradle-3.2.0`目录通常包含了该...

    Android实现获取SERIAL信息的方法

    android.os.build.serial 在API 9 中引入,如果低于9的系统可以通过这个方法获取这个信息值 java代码如下: public static String getDeviceSerial() { String serial = unknown; try { Class clazz = Class.for...

    android系统源代码分析电子书

    8. **编译与构建系统**:Android使用Build System(如Makefile、Gradle)进行编译和打包,了解这些工具的源码能提高构建效率,实现自动化工作流。 9. **测试框架**:如JUnit、 Espresso等,通过源码分析可以学习...

    android.tools.build:gradle: 2.2.2 源码

    Android.tools.build:gradle:2.2.2版本的源码为我们揭示了Gradle在Android项目中的运作机制,这对于开发者来说是一份宝贵的资源,尤其对于那些希望深入了解Gradle编译过程、Task任务分析以及Hook Task技术的开发者而...

Global site tag (gtag.js) - Google Analytics