安卓学习 --- 安卓的架构

安卓的架构---整体梳理

安卓学习 --- 安卓的架构_第1张图片
安卓架构图

虽然这个图已经满大街都是,但是还是要拿出来,一般的初学者在看到这个图的时候,很难看下去,我在刚开始学安卓的时候也不愿意看,现在才发现,这个图是真正最重要的东西,网上已经有很多大牛写过相关的文章,但是不同的人,不同的水平有不同的见解,我现在水平有限,就以自己的角度去解读这幅图,一是希望能多少帮助安卓开发新手,而是如果有什么错误或者误解的地方,希望大家能指出来,让我自己也能得到提升。

application层

首先看application层,这一层直观看其实就是我们手机里面安卓系统的页面,类似于电脑的windows系统,自带日历,时间,相册等app,需要注意的是,这些东西也是用java语言编写的app,和你自己写的app是同级别的关系,我们常说要看android的源码,说的也是这个系统和这些app的代码,在开发的时候经常说调用系统相机,调用打电话功能,其实就是调用这些系统自带的app,一般我在开始很难理解这些系统调用,这样从实例的角度去理解,会清晰很多。

application framework层

接着是application framework层,这一层从开发的角度就是api和视图(view view其实也是一个类)框架,就是我们平时使用的一些类和方法,这一层是用java语言编写,封装好的可以直接调用的api,类比平时我们开发的内容,就相当于你自己写的一些封装好的工具类,只不过这是谷歌提供的工具类,能够帮你更加快速方便的进行开发,并且封装的非常好,也就是说,作为开发者,使用的就是这一层的东西,一般初级开发者向高级开发者进阶,就是要去理解这一层比较重要的一些api的机制和流程,(曾经我非常的困惑学习这些东西有什么用,不就是api么,就算是封装的,也是调用api,看看会用,不会了直接百度就行,这样的思想也会导致你成为一个只会复制粘贴的码农,而不是程序员,为什么要深入研究这一层,而且有一部分代码需要熟练,需要牢牢地记住,一是学习对方怎么封装怎么给代码分层,而是大部分的基础是需要熟练,只有熟练才能灵活的运用,这就是说和做的区别)

libraries层

这一层我已经很不熟悉了,但是希望能说出自己的理解,从图中可以看出libraries层涉及到了java的虚拟机Dalvik,暂时不管虚拟机Dalvik,先说这一层的开发语言,就是c\c++(其实一直不明白为什么c和c++总是一起出现,以后有了结论再补充),这一层是c/c++写的封装库,和application framework层用java写的api封装库是一个意思,只不过是用c语言写的,通过JNI调用,让application framework层可以使用对应的api,那么再进一步,具体什么是JNI,这个以后再说,目前就理解成一个类,这个类可以调用.c文件就行。说白了这一层提供的也是库,也就是api或者说类,这些类可以帮助app实现功能,和底层的操作系统进行交互。

linux层

首先说一下什么是系统,在我看来,系统就是一个用变成语言编写的软件,这个软件直接和程序硬件沟通,并且在这个软件上,还可以安装别的软件,这也是为什么我们常说装系统,就是把一个叫做系统的软件安装到硬件设备上,再想的长远一些,你甚至可以把一个app做成系统,自己定义语言语法,解析语言语法并显示,微信的小程序就是这么来的。所以这一层的功能往简单了说,就是提供了一个系统内核,安卓的系统安装在这个系统上。

Dalvik虚拟机

这里再理解一下这个Dalvik虚拟机和linux内核的关系,应该说这个虚拟机和linux内核共同组成了安卓的操作系统,我们在用ide编译程序的时候,这里还可以延伸到app编译和运行的过程,这里暂时不细说。

附注:通过以上架构来对android的一些常见概念的深入理解

  • 什么是android?
    是一种操作系统,类似于windows操作系统

  • android和app是什么关系?
    android是操作系统,app是运行的程序,就和window是操作系统.exe是软件一样

  • android和java有什么关系
    android操作系统上的软件app的使用java语言编写的

  • android manifest是什么?
    介于app和androidsystem的通信接口,以后深入讲解

  • app解析
    1、一个app都包含什么?
    直接把apk包改成压缩包后缀解析以后,就能看到这个apk里面都包含什么内容


    安卓学习 --- 安卓的架构_第2张图片
    apk包解压缩以后的文件

    其中assets和res文件都是资源文件,原封不动,resources.arsc文件是app里面R文件生成的数据,.dex是.java文件编译成.class文件,再编译成.dex文件最终形成的东西,app运行的时候虚拟机会读取这个.dex。

2、build打包时,都发生了什么?
这个问题暂时没有整理,所以先引用一篇别人的文章
http://www.jb51.net/article/32798.htm

你可能感兴趣的:(安卓学习 --- 安卓的架构)