菜鸟学安卓Log.v(“第二篇”)——安卓的体系结构
来源:互联网 发布:unisim 软件价格 编辑:程序博客网 时间:2024/05/22 16:52
安卓的体系结构图:
上面就是一个安卓体系的图,大概要了解一下。
红色部分:安卓体系结构的最底层,驱动层(具体驱动层真正的内容我目前不是很清楚,大概理解就是和电脑的驱动 差不多,要安装具体的驱动才能实现某些功能,而安卓也需要一些驱动才能实现手机的某些功能,后面我再去深入了解,再来真正解释),
绿色部分:用c或者 c++写的类库(我觉得目前知道是用c++和c写的就行)。
蓝色地部分:
APPLICATION FRAMEWORK层:字面理解就是应用程序框架层(作用:当我们去开发一个安卓应用的时候,可以通过去调用这个框架层中的内容来实现安卓程 序)。
APPLICATIONS层:应用程序层(这就是安卓开发人员开发的应用程序,在这些应用程序中包含了安卓系统自带的一些安卓应用,当自己在开 发一个自己的安卓应用时,可以通过一些方法去调用系统自带的应用,比如通过自己的应用程序去调用系统的打电话,发短信等应用)。
黄色部分:
ANDROID RUNTIME(安卓运行时),其中Core libraries就相当于java中的jre,但是对其中的一些jar包进行了重写,Dalvik VM就相当于java中JVM虚拟机的作用——安卓程序的运行环境。
(ps:蓝色部分都是用java编写的)
这里可能会有一个问题,既然安卓程序是用java语言编写的,为什么不直接通过 java虚拟机运行安卓程序,而安卓要自己弄一个自己的运行环境?
我觉得这个问题还是比较值得思考的,我通过一些视频,还有搜索也得到了一些答案,第一点 就是:首先安卓和java我们都知道并不是属于一个公司的东西,安卓是谷歌公司的,而java是sun公司的,但sun公司已经被甲骨文公司收购,谷歌要 是直接使用JVM肯定会有一个版权的问题,从这一点来说就不行,第二点就是我下面要讲的内容:jvm和Dalvik VM的区别。
接下来就是jvm和Dalvik VM的区别:
JVM: .java --> javac --> .class --> jar --> .jar
架构: 堆栈
DVM: .java --> javac --> .class --> dx.bat(批处理) --> .dex->.odex(这个.odex了解就好,就是对dex预处理以后得到的,可以对软件起到加速的)
架构: 寄存器(cpu上一块高速的缓存)
.jar和.apk包的结构图:
上面的图片和内容就是我对JVM和jDalvik VM的对比:
现在来注意一下下面图片中的内容,首先我们应该知道其实一个.APK文件其实也是一个压缩包,就是将很多文件压缩到一个包中,先来看.jar包,可以看到一个.jar中其实是由很多个.class文件构成,去分析其中的一个.class文件可以发现一个重要的地方,就是用红笔圈起来的地方header,就是.class文件的一个头,其中包含的内容就是JDK编译的版本号,因此我们可以知道如果我们将当前这个.jar包导入到并不是这个头对应编译版本JDK下去就可能会抛出一些问题(比如我将1.6版本jdk编译的.jar包导入到1.5版本的jdk下就可能出现问题)。
这里的重点并不是这个导入jar包JDK版本不同的问题,而是我们可以发现每个.class文件都会有个这么一个头,如果有1000个.class文件,那么对应的.class文件中的头就需要写入或者读1000次,感觉就是数据冗余了,可以看出JVM这样运行这样的.jar包效率会很低,而对比右边的.dex文件,一个.dex中只有一个header,这样通过jDalvik VM去运行的效果肯定好于JVM,这样便是上面第二点的最终答案,也是为什么安卓需要通过自己开发的Dalvik VM虚拟机去运行程序二不用JAVA中的JVM去运行,Dalvik VM虚拟机其实是针对手机而对JVM进行了改进的一个安卓自己的虚拟机。
我还用一个大括号扩起来图片中的一些内容,这个目前我也就知道是安卓中一个池(如字符串池)的概念,就是将一些相同的资源放入到一个池子中,然后通过地址(这些地址是放在寄存器中的)的方式来寻找这个资源,暂时知道这些,后面再来了解。
- 菜鸟学安卓Log.v(“第二篇”)——安卓的体系结构
- 菜鸟学安卓Log.v(“第三篇”)——不用搭建下载即可使用的安卓开发环境
- 菜鸟学安卓Log.v(“第五篇”)——安卓工程目录的介绍及打包安卓应用程序及安装过程
- 安卓日志——Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- 菜鸟学安卓Log.v("第一篇")——为何突然想写安卓学习的博客?
- 菜鸟学安卓Log.v(“第四篇”)——第一个安卓程序及DDMS视图和adb常用命令
- 安卓 log 的用法
- 菜鸟的第二篇日志
- NFC的安卓事儿(第二篇)
- 安卓体系结构
- 安卓入门(第二篇 )——四大组件
- 菜鸟的安卓之旅之初始篇之一
- 菜鸟的安卓之旅之阶段篇
- 一个菜鸟的安卓之路——做一个会飞的苹果
- 菜鸟的安卓之囧时刻
- 菜鸟的安卓框架记一
- 来自安卓菜鸟的独白
- 菜鸟学习安卓遇到的问题
- CKEditor结合struts实现图片上传
- JSP页面刷新
- uva 1419 Ugly Windows(暴力求解)
- 多线程编程
- 第九周 项目5 方程也是类
- 菜鸟学安卓Log.v(“第二篇”)——安卓的体系结构
- 关于scrollviwe中的contentOffset的
- 【Matlab学习笔记】【图像滤波去噪】高斯平滑滤波
- 自定义bootstrap标签页
- 今天注册了csdn
- 但行好事 莫问前程(四月)
- 第8周项目3-分数类中的运算符重载(2)
- 第八周项目一 实现复数类中的运算符重载
- Android UI简介