Google的工程与项目
Google的一整个产品线就是一系列可观的A/B测试。最极端的例子是Google的即时通信解决方案。Android上一度曾出现过4款不同的产品:Google Talk、Google+ Messenger、Messaging (Android的短信应用)以及Google Voice。
Google Android的产品线:Android Wear平台(Android手机、平板、手表等可穿戴设备)、Android车载系统、YouTube音乐服务、Google Fit健康数据服务平台、Android TV和Google Glass包括智能手机,平板电脑,手表,汽车,智能电视,OTT游戏盒和机顶盒
> Android系统架构:
android的第一层Application和第二层ApplicationFramework都是用Java编写,第三层Libraries和第四层Linux Kernel都是用C/C++编写。
Android的系统架构采用了分层架构的思想.从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和Linux内核。(Linux Kernel、Android Runtime、Libraries、Application Framework、Applications)
一 应用程序层该层提供一些核心 应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
二 应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动 管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
三 系统库和Android运行时
系统库包括九个子系统,分别是图层管理、媒体 库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.NET、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
四 Linux内核
Android核心系统服务依赖于Linux2.6(不断提升) 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
总结:
1. Android的系统架构采用分层架构的思想,架构清晰,层次分明,协同工作。
2. Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;若是从事Android系统开发,那应该研究Android的系统库和Android运行时;若是从事Android驱动开发,那应该研究Android的Linux内核。总之,找准切入点,实践出真知。
一.Android系统架构各层介绍
1. 应用层:应用是用Java语言编写的运行在虚拟机上的程序,比如Email客户端,SMS短消息程序,日历等。
2. 应用框架层:这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的结构设计,但是必须要遵守其框架的开发原则。
3. 系统运行库(C/C++库以及android运行库)层:当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其更好的为我们服务,比如其中的SQLite(关系数据库),Webkit(Web浏览器引擎)。
4. Linux内核层:Android的核心系统服务给予Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核,比如Binder IPC驱动,android的一个特殊驱动程序,具有单独的设备节点,提供进程间通信的功能。
一.框架提供的功能
Android系统提供给应用开发者的本身就是一个框架,所有的应用开发都必须遵守这个框架的原则。我们在开发应用时就是在这个框架上进行扩展,下面是Android框架提供给我们可用的功能。
1、android.app:提供高层的程序模型和基本的运行环境。
2、 android.content:包括各种设备上的数据进行访问和发布。
3、 android.database:通过内容提供者浏览和操作数据库。
4、 android.graphics:底层的图形库,包括画布、颜色过滤、点、矩阵,可以将他们直接绘制到屏幕上。
5、 android.location:定位和相关服务的类。
6、 android.media:提供一些类管理多种音频、视频的媒体接口。
7、 android.NET:提供帮助网络访问的类,超过通常的java.net.*。
8、 android.os:提供了系统服务、消息传输和IPC机制。
9、 android.opengl:提供OpenGL的工具。
10、 android.provider:提供访问Android内容提供者的类。
11、 android.telephony:提供与拨打电话相关的API交互。
12、 android.view提供基础的用户界面接口框架。
13、 android.util:设计工具性的方法,例如时间日期的操作。
14、 android.webkit:默认浏览器操作接口。
15、 android.widget:包含各种UI元素(大部分是可见的)在应用程序的布局中使用。
二.相关技术说明
关于进程间通信的几种方式
1、 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2、 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
3、 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
4、 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5、 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
6、 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
7、 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
关于linux内核及操作系统加载过程
由于在Linux系统的启动过程中会出现非常多的提示系统的启动过程中会出现非常多的提示信息,而且很多启动信息都是在屏幕上一闪而过, 息,而且很多启动信息都是在屏幕上一闪而过,所以对于LINUX系统的初学者来说,可能会觉得Linux的启动过程非常神秘和复杂。其实 系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段。
1.BIOS加电自检
2.加载主引导加载程序(MBR)
3.加载次引导加载程序(GRUB)
4.Linux内核映像
5.init进程
Android系统架构的详细解析—http://blog.chinaunix.net/uid-25838286-id-3011173.html
Android的系统架构- http://blog.csdn.net/wangloveall/article/details/8033725
----------------------------
2016.12 google网站重回中国
https://developers.google.cn/ https://firebase.google.cn/ https://developer.android.google.cn/Google镜像网站- http://k3k4.vip
程序员-系统分析员-架构师-技术经理-CTO,程序员-项目组长-项目经理-项目总监-CTO,程序员-产品设计师-产品经理-CTO。
产品设计与设计师是两个不一样的工作,产品设计主要会从用户体验、业务需要等层面去设计产品,而设计师更多是从用户的视觉上去做。产品经理应该是最懂业务的人,比如说你在设计一个微博的产品,就要求你对微博这个东西非常熟悉,从用户习惯、用户体验、公司的发展战略上去设计这个产品,还要对比同类产品会有什么优势等等。
------------------------------
Android为什么会选Java作为开发语言?
Java/C++/C#/Go/C是重语言。重语言首先讲究的是运行效率。然后讲究工程化。
Python/Ruby/JavaScript+Html/是轻语言。轻语言讲究开发效率,讲究敏捷性开发。
对。我心目中划分语言的标准基本上是属于这样的,只要在代码中体现我们需要讲效率的。那就是重语言。
C++重运行效率。但是跨平台性较弱。开发难度较高。库多,用的人多。
Python,重开发效率。跨平台性高。开发难度低,库多,用的人多。
Java。重开发效率。不及python,重运行效率,不及C++。开发难度低。库多。用的人多。
Android平台使用Java语言开发,纯粹是Google的商业策略,Google倒是想用自己的(例如Go语言)。一门计算机语言的普及,从编译器、语法、基础库,然后到草根程序员认可,不是短时间能完成得了的。而面对苹果的i系列移动设备在市场上的疯狂程度,Android只有通过捷径展开竞争。Java语言是一个相当成熟的计算机编程语种,除了基础类库完善,各种高效的第三方组件更是不计其数,最最重要的一点是Java虚拟机规范也是开放的,以Google的实力在此规范下做一款虚拟机出来不费吹灰之力(即便是新的硬件架构)。这个策略实在太英明了。市场上,在Android 4.x版本对比iOS就呈现压倒性优势,以致于Oracle都非常嫉妒,以侵犯API版权为名索要好处费。高级开发语言竞争也非常激烈,Java实际上在慢慢失去优势,应该感谢Android为Java语言的兴旺添一把火。
------------------------------
Android Mashup设计的理解
android中的Mashup,是将应用切分成不同类别的组件,通过统一的定位模型和接口标准将它们整合在一起,来共同完成某项任务。而在Android的Mashup模式下,每个组件的功能都可以被充分地复用。来自不同应用的组件可以有机地结合在一起,共同完成任务。开发者无须耗费精力去重新开发一些附属功能,而是可以全身心地投入到核心功能的开发中。这样不但提高了应用开发的效率,也增强了用户体验。
Android的组件管理服务,就是通过配置文件中的信息去了解每个组件(Activity Service等)的特征。
在Mashup的概念下构造Android应用,有三个基本要素:组件(Component)、连接和配置。