0.0.1 Android开发系列——什么是Android

0.0.1 Android开发系列——Android系统架构

Android是什么

Android是一个移动操作平台,它包含了操作系统及很多的组件。遵循一套软硬件开发标准,可以运行第三方开发的APP。

Android如何产生的

Android 公司最初是由Andy Rubin 等于2003年在加州注册。按Andy Rubin的说法,当时想开发一种更了解用户位置和使用习惯的操作系统。

“smarter mobile devices that are more aware of its owner’s location and preferences”
—— Andy Rubin

从这段历史可以知道,Android最初的设计思想即是为移动设备设计,重点关注的是交互和位置。在后来的版本开发中,由于移动操作系统的不断完善,这个目标已经变得更为宏大。Google是想要把它开发成一个不光知道用户地理位置,而是要理解使用者的操作系统。
除了为移动设备服务的思想,开源和开放也一直是Android系统一直坚持的原则。Android有一个开源版本成为AOSP(Android Open Source Project),与正式版Android的代码是完全同步的,区别仅仅是AOSP中移除了需要商业授权的代码,包括Google服务、一些第三方扩展包等等,虽然AOSP里面的开源代码越来越少(日历、音乐、搜索等都相继停止更新,被闭源代码取代),但是一直在坚持更新。

Q: 既然Android有开源版本,为何会有Android授权费?直接使用开源代码不就好了。
A: Android授权费其实叫Google服务授权费更合理一些,手机厂商给Google的授权费是为了在Android手机中预装Google服务。(其实还是很重要的,比如早期很多的应用使用Google推送,而Google推送就是Google服务之一)。
Q: 什么是Google服务,为啥我的Android手机里面没有。
A: 使用AOSP进行二次开发的手机系统确实是没有Google服务的,比如小米。但是国内也是买不着带Google服务的手机的,这个是因为bi~bi~bi~~的原因啦。

任何操作系统都是要有底层、驱动以及上层的应用组成。Andy Rubin在开发的时候选择了Linux作为基础的操作系统,并在此之上构建自己的移动操作系统。

tips: 关于Linux底层和开源读者可以了解相关的资料,以便更好地了解Android系统。

在2005年的七月,也即Android公司成立两年后,Google以5000万美元的价格收购Android公司,Andy Rubin也成为Google Android部门的老大。当然后来Android换带头人都是后话了。苹果iOS系统并不遵循开源协议,主要原因是苹果的全线系统均来自于自己多年维护的一个Unix分支,再开源出去的意义已经不大。

Android系统架构

Android系统架构”Android-System-Architecture” by Smieh - Anatomy Physiology of an Android. Licensed under CC BY-SA 3.0 via Commons - https://commons.wikimedia.org/wiki/File:Android-System-Architecture.svg#/media/File:Android-System-Architecture.svg

上图就是Android系统的架构,整个架构分为四层,从下到上分别是底层到高层。

1. Linux Kernel 系统内核

这一层是Android的最底层,是直接与硬件进行对话的层次。我们看到该层的主要组件都是各种不同的驱动,这些驱动都是以c/c++或其他比较低级的语言编写并编译为二进制文件,通过硬件通讯方式与显示器、摄像头、触摸屏等进行通信。

除了各种驱动,系统内核当然还包含了操作系统常用的功能,如文件管理、命令行、线程管理等等。出于安全性考虑,内核层级一般情况只对上层的系统服务开放,因此这个层次普通用户是基本看不到的,但是我们技术人员还是可以通过很多的方式去访问这个层次。如adb-shell、jni等方式,我们后面将详细阐述。
其实有了Linux底层和相应的驱动,开发者已经可以开发自己的应用了。只需要自己在Linux上编译相应的软件,调用相关系统API就可以操作手机的硬件了,通过自己驱动显示屏来显示图形,处理好触摸屏的输入,就可以完成APP的功能了。在Android出现之前的时代,移动应用开发者就是淹没在这些琐碎的处理中,而忽略了更好地服务用户的思想。现在也有一些APP需要root权限,就是因为它们可能直接操作了系统的底层,从而获得更强大的功能。这里root权限就是指的Linux的root权限,这样的APP在获得高级功能的同时也承担着安全风险,所以手机root还是得慎重。

2. Libraries 依赖包

依赖包层次有两个作用,一个是为了方便应用的开发;另一个是为系统提供更多功能的封装,如SQLite等。该层次运行了很多对性能要求比较高的服务。如webkit,是一个HTML渲染内核,为在手机端获得更好的网页浏览速度,将webkit封装为一个服务直接运行在底层之上是很好的方案。当然还有操作3D的OpenGL ES,用于多媒体展示的media framework等。

其中最重要的是Dalvik Virtual Machine。我们知道Android是使用Java开发的,不只是开发应用是Java,其实包括启动器、默认应用都是使用Java开发的,Java代码必须运行与Java虚拟机中。Dalvik就是运行这些应用的虚拟机。Dalvik虚拟机也经过了多次的变迁和更新,性能逐渐提升。

tips: Java虚拟机与我们常用的虚拟机是一样的,都是在软件的层次上模拟出一套计算机硬件出来。区别是Java虚拟机模拟的是一个统一的Java机器,而一般虚拟机可以模拟多种硬件环境,安装不同系统。

tips: 启动器,也就是Android启动后的主屏幕,显示很多应用的界面。它本身也是一个Android程序,因此是可以被替换的。

Android的核心库,也就是我们开发Android经常会用到的Android.jar包,是运行在Dalvik之上,并提供与依赖包和底层系统核心通信功能的依赖包,我们开发APP的入口基本就是这个依赖包了。

3. 应用框架层

在依赖包之上,Android再次被封装,成为一个一个的框架。这些框架对于Google来说主要是用来规范开发者的行为的,比如窗口的管理、权限管理等等都被封装为一个一个的框架。从而将底层的c接口、java接口全部屏蔽掉,成为我们开发Android时常用的各种父类、框架类。

Android前台展示的设计比较复杂,一般开发者如果不遵循Google官方的开发手册,很容易造成应用占用过多内存,拖慢系统的整体速度。因此Google也在这个层次提供了很多编写好的一般性功能,比如recycleList之类,以提高Android平台整体APP的质量。

4. 应用层

这一层就是我们开发者的舞台了,我们在应用框架层的基础上开发Android应用。

Google的原生应用,如电话、图片、Google搜索等都是构建在这一层。当然由于Google的技术实力,很多的应用并不完全限制在这一层,可能是和系统深度集成的,如Google语音助手就需要从硬件到顶层展示的一系列接口,这些并没有开发给一般开发者。

tips: 关于Java虚拟机读者可以阅读Java相关资料来进一步了解。

Android系统之所以这么设计就是为了降低在移动设备上开发应用的难度。在此之前,在移动设备上开发应用需要使用C/C++语言,需要对操作系统,文件系统,硬件协议等有深入了解。而且需要专门的设备,使用专用开发板才能完成。也就是在上文的系统层进行开发。而通过多个层次的封装,Android做到了一台电脑一个手机相连就能开发移动应用,使用adb接口,就能方便地完成所有的需要专业设备才能完成的操作。在这点上,Android是绝对的先行者。

tips: adb是Android与PC/Mac通信的基础方式。通过adb可以向Android系统发送很多的指令,或者连接到Android系统层,从系统层发送指令。adb是一个非常强大的工具,eclipse和Android studio工具都是基于adb与Android交互。

Android生态系统

随着Android的发展,它已经不单单是一个移动操作系统。Android目前正向着全方位智能平台的方向发展,Android Auto面向汽车、Android Wear面向穿戴设备、Android TV面向电视等等。这些平台的操作方式、操作习惯、UI设计千差万别,不过从上面的介绍我们已经清楚,这些变化只是Android启动器、底层驱动等实现方式的不同,根本的设计理念和模型都是以上面的架构为基础的。开发者了解了其中一种应用的开发方式后,就能很方便地开发不同的应用版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值