菜鸟学安卓Log.v(“第二篇”)——安卓的体系结构

来源:互联网 发布:unisim 软件价格 编辑:程序博客网 时间:2024/05/22 16:52

          安卓的体系结构图:

          图

         

         上面就是一个安卓体系的图,大概要了解一下

 红色部分:安卓体系结构的最底层,驱动层(具体驱动层真正的内容我目前不是很清楚,大概理解就是和电脑的驱动 差不多,要安装具体的驱动才能实现某些功能,而安卓也需要一些驱动才能实现手机的某些功能,后面我再去深入了解,再来真正解释)

 

绿色部分:用c或者 c++写的类库(我觉得目前知道是用c++c写的就行)

 

蓝色地部分:

APPLICATION FRAMEWORK:字面理解就是应用程序框架层(作用:当我们去开发一个安卓应用的时候,可以通过去调用这个框架层中的内容来实现安卓程 序)。

 

APPLICATIONS:应用程序层(这就是安卓开发人员开发的应用程序,在这些应用程序中包含了安卓系统自带的一些安卓应用,当自己在开 发一个自己的安卓应用时,可以通过一些方法去调用系统自带的应用,比如通过自己的应用程序去调用系统的打电话,发短信等应用)。

 

黄色部分:

ANDROID RUNTIME(安卓运行时),其中Core libraries就相当于java中的jre,但是对其中的一些jar包进行了重写,Dalvik VM就相当于javaJVM虚拟机的作用——安卓程序的运行环境


(ps:蓝色部分都是用java编写的

 

        这里可能会有一个问题,既然安卓程序是用java语言编写的,为什么不直接通过 java虚拟机运行安卓程序,而安卓要自己弄一个自己的运行环境?

 

        我觉得这个问题还是比较值得思考的,我通过一些视频,还有搜索也得到了一些答案,第一点 就是:首先安卓和java我们都知道并不是属于一个公司的东西,安卓是谷歌公司的,而javasun公司的,但sun公司已经被甲骨文公司收购,谷歌要 是直接使用JVM肯定会有一个版权的问题,从这一点来说就不行,第二点就是我下面要讲的内容:jvmDalvik 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进行了改进的一个安卓自己的虚拟机。

          我还用一个大括号扩起来图片中的一些内容,这个目前我也就知道是安卓中一个池(如字符串池)的概念,就是将一些相同的资源放入到一个池子中,然后通过地址(这些地址是放在寄存器中的)的方式来寻找这个资源,暂时知道这些,后面再来了解。


        



0 0
原创粉丝点击