带你进走Android一个开源的操作系统

如何将这些模块统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向不同的">硬件设备,不同的编译类型,且还要提供面向各个产商的定制扩展,是非常有难度的。 但 Android Build 系统很好的解决了这些问题,这里面有很多值得我们开发人员学习的地方。对于 Android 平台开发人员来说,本文可以帮助你熟悉你每天接触到的构建环境。对于其他开发人员来说,本文可以作为一个 GNU Make 的使用案例,学习这些成功案例,可以提升我们的开发经验。

Android Build 系统是 Android 源码的一部分。关于如何获取 Android 源码,请参照 Android Source 官方网站:

http://source.android.com/source/downloading.html。

Android Build 系统用来编译 Android 系统,Android SDK 以及相关文档。该系统主要由 Make 文件,Shell 脚本以及 Python 脚本组成,其中最主要的是 Make 文件。

众所周知,Android 是一个开源的操作系统。Android 的源码中包含了大量的开源项目以及许多的模块。不同产商的不同设备对于 Android 系统的定制都是不一样的。

如何将这些项目和模块的编译统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向不同的硬件设备,不同的编译类型,且还要提供面向各个产商的定制扩展,是非常有难度的。

但 Android Build 系统很好的解决了这些问题,这里面有很多值得我们开发人员学习的地方。

对于 Android 平台开发人员来说,本文可以帮助你熟悉你每天接触到的构建环境。

对于其他开发人员来说,本文可以作为一个 GNU Make 的使用案例,学习这些成功案例,可以提升我们的开发经验。

概述

Build 系统中最主要的处理逻辑都在 Make 文件中,而其他的脚本文件只是起到一些辅助作用,由于篇幅所限,本文只探讨 Make 文件中的内容。

整个 Build 系统中的 Make 文件可以分为三类:

第一类是 Build 系统核心文件,此类文件定义了整个 Build 系统的框架,而其他所有 Make 文件都是在这个框架的基础上编写出来的。

图 1 是 Android 源码树的目录结构,Build 系统核心文件全部位于 /build/core(本文所提到的所有路径都是以 Android 源码树作为背景的,“/”指的是源码树的根目录,与文件系统无关)目录下。

图 1. Android 源码树的目录结构

第二类是针对某个产品(一个产品可能是某个型号的手机或者平板电脑)的 Make 文件,这些文件通常位于 device 目录下,该目录下又以公司名以及产品名分为两级目录,图 2 是 device 目录下子目录的结构。对于一个产品的定义通常需要一组文件,这些文件共同构成了对于这个产品的定义。例如,/device/sony/it26 目录下的文件共同构成了对于 Sony LT26 型号手机的定义。

图 2. device 目录下子目录的结构

第三类是针对某个模块(关于模块后文会详细讨论)的 Make 文件。整个系统中,包含了大量的模块,每个模块都有一个专门的 Make 文件,这类文件的名称统一为“Android.mk”,该文件中定义了如何编译当前模块。Build 系统会在整个源码树中扫描名称为“Android.mk”的文件并根据其中的内容执行模块的编译。

时间: 2024-09-20 22:46:24

带你进走Android一个开源的操作系统的相关文章

jamendo_android 一个开源的Android在线音乐播放器实例

一个开源的Android在线音乐播放器实例.整套源码主要实现了专辑浏览,音乐在线播放,下载等等.虽说看起来功能不多,但是绝对十分具有参考价值,考虑的十分严谨.因为里面应用了网络通讯,json解析,全局mediaservice,自定义View组件,自定义 Adapter,application全局缓存,变量等等,所有要在项目中考虑到的优化问题. 项目主页:http://www.open-open.com/lib/view/home/1344734233116

[Android]Google 开源的 Android 排版库:FlexboxLayout

最近Google开源了一个项目叫「FlexboxLayout」. 1.什么是 Flexbox 简单来说 Flexbox 是属于web前端领域CSS的一种布局方案,是2009年W3C提出了一种新的布局方案,可以简便.完整.响应式地实现各种页面布局,并且 React Native 也是使用的 Flex 布局. 你可以简单的理解为 Flexbox 是CSS领域类似 Linearlayout 的一种布局,但是要比 Linearlayout 要强大的多. 2.什么是 FlexboxLayout? 刚才说了

Android Annotations开源框架简介

AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你几乎可以使用在任何地方, 大大的减少了无关痛痒的代码量,让开发者能够抽身其外,有足够的时间精力关注在真正的业务逻辑上面.而且通过简洁你的代码,也提高了代码的稳定性和后期的维护成本.以下AndroidAnnotations简称为AA 可能会有人提出异议了,我们移动设备的性能,不比后台服务器拥有充足的内存和运算能力.当大量的使用注解的时候,会不会对APP的造成什么不良的影响,会不会

visualizer-高手进 关于android音乐频谱Visualizer

问题描述 高手进 关于android音乐频谱Visualizer Visualizer类中onWaveFormDataCapture和onFftDataCapture有什么区别,分别在什么情况下调用,得到的byte数据分别是什么,这些数据能否按一定的规律转换为RGB颜色数据,Visualizer类能否监听音乐的分贝值,本人做一个音乐控制彩灯亮度和颜色,求高手指导

苏州市民带火种进山受阻发生冲突,祭扫陋习还有不少令人头痛

去年4月8日,苏州吴中区旺山公墓门口,因带纸钱进山被拦,8名上海扫墓客与保安发生争执,造成12人被送往医院.时隔一年又到扫墓季,类似事件再次上演,昨天上午近11点,高新区皇冠山公墓门口,因带纸钱.铁桶进山受阻,多名扫墓客与防火队员起纠纷,双方僵持近半个小时后,一度因情绪激动发生肢体冲突,造成2名队员.3名扫墓客受伤. 带火种进山受阻发生冲突 昨天上午11时许,接到市民报料,记者赶到高新区马涧路皇冠山公墓,看到公墓门口停着警车,受伤的扫墓客已被送往医院."在这里卖了好几年花,我还是第一次看到这种事

android的开源电话/通讯/IM聊天项目全集

曾经参与过视频通话相关的项目,了解过一些相关的开源项目.现在总结一下这些资源,方便大家查询. 一.Android的XMPP客户端 Beem Beem 是一个运行于 Android 手机平台的 XMPP (jabber) 的客户端软件,兼容标准的 XMPP 服务器和服务,例如 Ejabberd, Openfire, Facebook, 和 Gmail). 支持 SASL, 代理(Socks4, Socks5, HTTP), DNS SRV, and chatting with a specific

Android自定义控件——开源组件SlidingMenu的项目集成

转载请注明出处:http://blog.csdn.net/allen315410/article/details/39611355        在实际项目开发中,定制一个菜单,能让用户得到更好的用户体验,诚然菜单的样式各种各样,但是有一种菜单--滑动菜单,是被众多应用广泛使用的.关于这种滑动菜单的实现,我在前面的博文中也介绍了如何自定义去实现,请参考Android自定义控件--侧滑菜单,这篇博文描述的是如何从无到有创建一个侧滑菜单的控件,里面的代码不多,但是处理的逻辑和各种效果比较复杂,如果稍

OpenStack一个开源的IaaS(基础设施及服务)云计算平台

这是开源本身的优势!本文会针对 OpenStack 的网络项目:Neutron 进行一个入门级的介绍. OpenStack 是一个开源的 IaaS(基础设施及服务)云计算平台,让任何人都可以自行建立和提供云端运算服务,具体可以从 devstack 脚本开始熟悉它.OpenStack 由一系列相互关联的项目提供云基础设施解决方案的各个组件,核心项目(9 个):计算 (Compute) - Nova,网络和地址管理 - Neutron,对象存储 (Object) - Swift,块存储 (Block

基于环信sdk的陌生人交友android版本开源了

问题描述 基于环信sdk的陌生人交友android版本开源了---在哪(微话聊) 该项目是改编自环信即时通讯云的demo改编,新增了一些功能 环信即时通讯云demo包含了一个接近微信的完整的聊天app的所有功能, 包括发文字,表情,图片,语音,位置,群聊,登录,注册,退出登录等. 新增功能:1.用户个人资料的设置和展现2.最近上线的人和附近的人3.筛选用户功能4.添加用户头像和昵称5.用户相册页面和广场相册6.发表心情和图片7.(......)一些小功能的改编运行截图如下: 解决方案 下载下来怎