`
kongweile
  • 浏览: 508111 次
  • 性别: 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实现获取SERIAL信息的方法

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

    Android12系统资源目录分析树状图pdf(使用xmind思维导图软件绘画,导出pdf文件,此是压缩包文件,需解压)

    自己整理的Android12版本的系统资源目录分析,包括各个目录对应的分支 art: Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性.PDF bionic:系统C库源代码,Android改造的C...

    Android 2.1 源码结构分析

    |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) 。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。(略)

    [14本经典Android开发教程]-11-Android系统移植技术详解

    [14本经典Android开发教程]-11-Android系统移植技术详解 -------------------------------------------------- (1)安装如下软件包 sudo apt-get install git-core sudo apt-get install gnupg sudo apt-get install...

    Android 代码分析

    1 Android build system 4 1.1 Basic 4 1.2 Executable 6 1.3 Shared Library 9 2 Android Initialization Process 11 3 Android JAVA AIDL Analysis 15 4 Android JAVA Binder IPC System 20 5 Android Media ...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Android源代码编译命令m/mm/mmm/make分析

    在前文中,我们分析了Android编译环境的初始化过程。Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令...从前面Android编译系统环境初始化过程分析这篇文章可以知道,lunch命令其实是定义在build/envset

    android群雄传

    9.1.1 android.os.Build 206 9.1.2 System Property 207 9.1.3 Android系统信息实例 208 9.2 Android Apk应用信息获取之Package Manager 209 9.2.1 Package Manager 210 9.3 Android Apk应用信息获取之Activity...

    Android应用程序可分析WiFi信号。-Android开发

    使用WiFi Analyzer来优化您的WiFi网络新闻:WiFi Authority被Android Authority评为Android上15个最有用的应用程序之一Gizmodo将WiFi Analyzer评为修复《 WiFi》 WiFi分析器的最佳应用之一,在《纽约时报》的《断线...

    刷机原理02 Android升级包update.zip的生成过程分析.wps

    Android升级包update.zip的生成过程分析1) 对于update.zip包的制作有两种方式,即手动制作和命令生成。 第一种手动制作:即按照update.zip的目录结构手动创建我们需要的目录。然后将对应的文件拷贝到相应的目录下,...

    android生态之系统篇

    学习源码可以从系统角度分析问题,并且能借鉴系统源码的框架模式等作用。1至11小节皆为解析系统源码目录,12至13小节则为拓展方面。后面将逐渐完善。如有疑问,欢迎在下方评论指出。码字不易,如需转载,请注明出处...

    pro_android_cpp_with_the_ndk.pdf

    第1章 Android平台上的C++入门 1.1 Microsoft Windows 1.1.1 在Windows平台上下载并安装JDK开发包 1.1.2 在Windows平台上下载并安装ApacheANT 1.1.3 在Windows平台上下载并安装Android...第14章 程序概要分析和NEON优化

    丢失Android系统库或者Conversion to Dalvik format failed with error 1错误的解决方法

    本文分析了丢失Android系统库或者Conversion to Dalvik format failed with error 1错误的解决方法。分享给大家供大家参考,具体如下: 在eclipse开发Android项目时出现的很多问题都可以使用Project———>clean来...

    CS4227_Project:系统分析与设计

    系统分析与设计 运行应用程序 整个系统托管在Amazon Web Services(AWS)上,因此,如果可以进行必要的更改以运行Spring Boot和在其他机器上的数据库,这将在其他部分中介绍。 代码文件夹-Android Studio GUI 使用...

    解决Android屏幕四周闪现红框的问题

    如果你是在做系统移植的话,可以在android/build编译成usr版本,当然usr在开发的过程中权限问题比较多,编译出来的系统和eng权限上区别有点大,在开发其他应用软件时需要注意下。 方法二、修改framework层 注释掉...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: fakeroot libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libfakeroot Use 'apt-...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    2.5 使用NDK-Build脚本 54 2.6 排除构建系统故障 55 2.7 小结 56 第3章 用JNI实现与原生代码通信 57 3.1 什么是JNI 57 3.2 以一个示例开始 57 3.2.1 原生方法的声明 58 3.2.2 加载共享库 58 3.2.3 实现原生...

    详解Android(共享元素)转场动画开发实践

    最近零碎时间一直在研究OpenGL,所以没怎么进行分享,以后可能大部分时间会学习系统底层\NDK\VR\AR等领域,话不多少,今天来分享个小的动画效果. 效果如下 基本知识 其实Android的转场动画由来已久,比如平常开发安卓的...

Global site tag (gtag.js) - Google Analytics