精华内容
下载资源
问答
  • 安卓系统架构

    2020-07-03 21:29:54
    安卓系统架构 Android从面世以来到现在已经发布了二十几个版本了。在这几年的发展过程中,谷歌为Android王国建立了一一个完整的生态系统。手机厂商、开发者、用户之间相互依存,共同推进着Android的蓬勃发展。开发者...

    安卓系统架构

    Android从面世以来到现在已经发布了二十几个版本了。在这几年的发展过程中,谷歌为Android王国建立了一一个完整的生态系统。手机厂商、开发者、用户之间相互依存,共同推进着Android的蓬勃发展。开发者在其中扮演着不可或缺的角色,因为如果没有开发者来制作丰富的应用程序,那么不管多么优秀的操作系统,也是难以得到大众用户喜爱的,相信没有多少人能够忍受没有QQ、微信的手机吧。而且,谷歌推出的Google Play更是给开发者带来了大量的机遇,只要你能制作出优秀的产品,在Google Play上获得了用户的认可,你就完全可以得到不错的经济回报,从而成为一名独立开发者,甚至是成功创业!
    为了让你能够更好地理解Android 系统是怎么工作的,我们先来看一下它的 系统架构。Andrid大致可以分为四层架构: Linux 内核层、系统运行库层、应用框架层和应用层。

    1.Linux内核层

    Android系统是基于Linux 内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi 驱动、电源管理等。

    2.系统运行库层

    这一层通过一些C库来为Android 系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit提供了浏览器内核的支持等。
    同样在这一层还有Android运行时库,它主要提供了一些核心库, 能够允许开发者使用Java语言来编写Android应用。另外,Android 运行时库中还包含了Dalvik 虚拟机( 5.0系统之后改出ART运行环境),它使得每一个Android应用都能运行在独立的进程当中,并且拥有一 个自己的Dalvik虚拟机实例。相较于Java 虚拟机,Dalvik 是专门为移动设备定制的,它针对手机内存CPU性能有限等情况做了优化处理。

    3.应用框架层

    这一层主要提供了构建应用程序时可能用到的各种API,Android 自带的些核心应用就使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序。

    4.应用层

    所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的应用程序。

    Android 系统架构

    展开全文
  • 安卓架构分析

    千次阅读 2018-04-14 21:40:10
    安卓生态圈简介.2003年Android公司成立.2005年被谷歌收购.2008年,HTC G1-第一部安卓手机发步。制作一个移动版的操作系统是谷歌最原始的初衷,后来的发展也是这样子进行的。有趣的是安卓的英文的意思是机器人。这也...


    安卓生态圈简介

    .2003年Android公司成立

    .2005年被谷歌收购

    .2008年,HTC G1-第一部安卓手机发步。


    制作一个移动版的操作系统是谷歌最原始的初衷,后来的发展也是这样子进行的。有趣的是安卓的英文的意思是机器人。这也是为什么安卓的图标是个机器人的样子。


    Android碎片化问题

    · 24,093 Distinct Android devices seen this year

    · 18,796 Distinct Android devices seen last year

    · 682,000 Devices surveyed for this report.

    设备分布图


    安卓版本分布图


    厂商


    https://opensignal.com/reports/2015/08/android-fragmentation/

    Android碎片化带来的思考

    .难以通用攻击

    .难以完全防御

    对于安卓测试工程师的会怎么样呢?

    恐怕会是这个场景

     

    可以想象安卓测试工程师不停的在点点点的情景。所以,在安卓上使用APP通常会出现闪退的情况,就是由于安卓碎片化所带来的兼容性测试难题。据玄武实验室透露,安卓版微信闪退的概率达到百分之一已经不错了。相比之下IOS系统便轻松的多,所以,企业推出APP,通常优先推出IOS版的。

    Android跟Java有什么关系?

    第一个要思考的就是只用Java便可以进行安卓开发吗?

    答案当然是肯定的。作为一个应用开发者仅用java开发安卓是可以,在写这篇文章之前,我跟我们教过安卓开发的老师交流过,她就是一个地地道道的纯java开发者。

    那么用java开发的好处是什么?这个问题和谷歌为什么用Linux Kernel而不自己写一个Kernel的答案是一样的。大家都想偷点懒,就像平时写代码总是不自觉的百度一下,有的话,便自己修改一下就用了。毕竟谁都不想35之前就脱发啊!使用java的好处就是可以解决安卓碎片化问题,避免了成堆的BUG,因为使用Java只需要管Java VM以下的针对硬件的API的问题,对于java VM之上的地方基本都是一样的。所以跨平台性很好。

    为什么还要使用NDK开发?

    ● NDK

    Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java一起打包成apk。

    ● JNI

    Java Native Interface(JNI)标准是java平台的一部分,JNI是Java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用C/C++代码,C/C++的代码也可以调用java代码。

    ● JNI与NDK的关系

    NDK可以为我们生成了C/C++的动态链接库,JNI是java和C/C++沟通的接口,两者与android没有半毛钱关系,只因为安卓是java程序语言开发,然后通过JNI又能与C/C++沟通,所以我们可以使用NDK+JNI来实现“Java+C”的开发方式。

    NDK开发具有以下优点: 
    1. 项目需要调用底层的一些C/C++的一些东西(java无法直接访问到操作系统底层(如系统硬件等)),或者已经在C/C++环境下实现了功能代码(大部分现存的开源库都是用C/C++代码编写的。),直接使用即可。NDK开发常用于驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。 
    2. 为了效率更加高效些。将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率。但是C/C++代码虽然是高效的,在java与C/C++相互调用时却增大了开销; 
    3. 基于安全性的考虑。防止代码被反编译,为了安全起见,使用C/C++语言来编写重要的部分以增大系统的安全性,最后生成so库(用过第三方库的应该都不陌生)便于给人提供方便。(任何有效的代码混淆对于会smail语法反编译你apk是分分钟的事,即使你加壳也不能幸免高手的攻击) 
    4. 便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

    总结的来说,使用C++开发的原因可以归结为两点,一是程序运行速度,一般热衷于ndk开发的,游戏公司居多。这就不用解释了。二是为了安全性考虑,腾讯肯定不会想王者明天成为别人的王者荣耀!

    安卓架构分析

     

    首先需要从整体上了解Android系统的架构。Android系统大致可以划分为五个层次,它们分别是Linux内核层、硬件抽象层、运行时库层、应用程序框架层和应用程序层。其中,硬件抽象层从实现到使用上涉及了这五个层次

    那么为什么要设置硬件抽象层HAL,其实这是谷歌的一个邪恶的计划。我们都知道Linux的原生的Kelnel是开源的,它是遵循GPL协议的,这个协议是非常严格的,如果你作为厂商对Linux源码进行了修改了的话,就必须公布出去,这显然会损害硬件厂商的利益,所以,谷歌自己加了个HAL层,在上面做一些闭源的开发。所以,严格的说,安卓系统并不是完全的开源,各大厂商都有自己的独特安卓系统,像小米,华为等等

    下面是引用了《进击的程序员》中对HAL层的描述:


     

       Android系统的硬件抽象层(Hardware Abstract Layer,HAL)运行在用户空间中,它向下屏蔽硬件驱动模块的实现细节,向上提供硬件访问服务。通过硬件抽象层,Android系统分两层来支持硬件设备,其中一层实现在用户空间中,另一层实现在内核空间中。传统的Linux系统把对硬件的支持完全实现在内核空间中,即把对硬件的支持完全实现在硬件驱动模块中。

    Android系统为什么要把对硬件的支持划分为两层来实现呢?我们知道,一方面,Linux内核源代码是遵循GPL协议的,即如果我们在Android系统所使用的Linux内核中添加或者修改了代码,那么就必须将它们公开。因此,如果Android系统像其他的Linux系统一样,把对硬件的支持完全实现在硬件驱动模块中,那么就必须将这些硬件驱动模块源代码公开,这样就可能会损害移动设备厂商的利益,因为这相当于暴露了硬件的实现细节和参数。另一方面,Android系统源代码是遵循Apache License协议的,它允许移动设备厂商添加或者修改Android系统源代码,而又不必公开这些代码。因此,如果把对硬件的支持完全实现在Android系统的用户空间中,那么就可以隐藏硬件的实现细节和参数。然而,这是无法做到的,因为只有内核空间才有特权操作硬件设备。一个折中的解决方案便是将对硬件的支持分别实现在内核空间和用户空间中,其中,内核空间仍然是以硬件驱动模块的形式来支持,不过它只提供简单的硬件访问通道;而用户空间以硬件抽象层模块的形式来支持,它封装了硬件的实现细节和参数。这样就可以保护移动设备厂商的利益了。

    介绍Android系统的硬件抽象层的目的在于认识Android系统的体系结构,因为它的实现和使用依次涉及Android系统的硬件驱动模块、硬件抽象层、外部库和运行时库层、应用程序框架层和应用程序层等

     

      我们还要着重分析一个层是运行时库层,因为Dalvik虚拟机在这个层,接下来我们将围绕运行时库层Dalvik虚拟机,JVM虚拟机,ART,三者的机制和区别。


    2014年6月25日,Android L 正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。

     Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。这里要分析的是ART是如何无缝替换掉原来的Dalvik虚拟机的。毕竟在原来的系统中,大量的代码都是运行在Dalvik虚拟机里面的。

    Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。一个dex文件可以包含若干个类,而一个class文件只包括一个类。由于一个dex文件可以包含若干个类,因此它就可以将各个类中重复的字符串和其它常数只保存一次,从而节省了空间,这样就适合在内存和处理器速度有限的手机系统中使用。一般来说,包含有相同类的未压缩dex文件稍小于一个已经压缩的jar文件。

     我们知道,Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。因此,ART运行时最理想的方式也是实现为一个Java虚拟机的形式,这样就可以很容易地将Dalvik虚拟机替换掉。注意,我们这里说实现为Java虚拟机的形式,实际上是指提供一套完全与Java虚拟机兼容的接口。例如,Dalvik虚拟机在接口上与Java虚拟机是一致的,但是它的内部可以是完全不一样的东西。

    实际上,ART运行时就是真的和Dalvik虚拟机一样,实现了一套完全兼容Java虚拟机的接口。为了方便描述,接下来我们就将ART运行时称为ART虚拟机,它和Dalvik虚拟机、Java虚拟机关系如图:

     

     

     从图可以知道,Dalvik虚拟机和ART虚拟机都实现了三个用来抽象Java虚拟机的接口:

    1. JNI_GetDefaultJavaVMInitArgs -- 获取虚拟机的默认初始化参数

    2.JNI_CreateJavaVM -- 在进程中创建虚拟机实例

    3. JNI_GetCreatedJavaVMs -- 获取进程中创建的虚拟机实例

    Android系统中,Davik虚拟机实现在libdvm.so中,ART虚拟机实现在libart.so中。也就是说,libdvm.so和libart.so导出了JNI_GetDefaultJavaVMInitArgs、JNI_CreateJavaVM和JNI_GetCreatedJavaVMs这三个接口,供外界调用。

    此外,Android系统还提供了一个系统属性persist.sys.dalvik.vm.lib,它的值要么等于libdvm.so,要么等于libart.so。当等于libdvm.so时,就表示当前用的是Dalvik虚拟机,而当等于libart.so时,就表示当前用的是ART虚拟机。

    以上描述的Dalvik虚拟机和ART虚拟机的共同之处,当然它们之间最显著还是不同之处。不同的地方就在于,Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器码。这意味着Dalvik虚拟机包含有一个解释器,用来执行dex字节码。当然,Android从2.2开始,也包含有JIT(Just-In-Time),用来在运行时动态地将执行频率很高的dex字节码翻译成本地机器码,然后再执行。通过JIT,就可以有效地提高Dalvik虚拟机的执行效率。但是,将dex字节码翻译成本地机器码是发生在应用程序的运行过程中的,并且应用程序每一次重新运行的时候,都要做重做这个翻译工作的。因此,即使用采用了JIT,Dalvik虚拟机的总体性能还是不能与直接执行本地机器码的ART虚拟机相比。

      那么,ART虚拟机执行的本地机器码是从哪里来的呢?Android的运行时从Dalvik虚拟机替换成ART虚拟机,并不要求开发者要将重新将自己的应用直接编译成目标机器码。也就是说,开发者开发出的应用程序经过编译和打包之后,仍然是一个包含dex字节码的APK文件。既然应用程序包含的仍然是dex字节码,而ART虚拟机需要的是本地机器码,这就必然要有一个翻译的过程。这个翻译的过程当然不能发生应用程序运行的时候,否则的话就和Dalvik虚拟机的JIT一样了。在计算机的世界里,与JIT相对的是AOT。AOT进Ahead-Of-Time的简称,它发生在程序运行之前。我们用静态语言(例如C/C++)来开发应用程序的时候,编译器直接就把它们翻译成目标机器码。这种静态语言的编译方式也是AOT的一种。但是前面我们提到,ART虚拟机并不要求开发者将自己的应用直接编译成目标机器码。这样,将应用的dex字节码翻译成本地机器码的最恰当AOT时机就发生在应用安装的时候。

    总结

    Dalvik和JVM有啥关系?

    主要区别:
    Dalvik是基于寄存器的,而JVM是基于栈的。
    Dalvik运行dex文件,而JVM运行java字节码
    Android 2.2开始,Dalvik支持JIT(just-in-time,即时编译技术)。
    优化后的Dalvik较其他标准虚拟机存在一些不同特性: 
    1.占用更少空间 
    2.为简化翻译,常量池只使用32位索引(存放字符串常量和基本类型常量(public static final)。 常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。) 
    3.标准Java字节码实行8位堆栈指令,Dalvik使用16位指令集直接作用于局部变量。局部变量通常来自4位的“虚拟寄存器”区。这样减少了Dalvik的指令计数,提高了翻译速度。 
     当Android启动时,Dalvik VM 监视所有的程序(APK),并且创建依存关系树,为每个程序优化代码并存储在Dalvik缓存中。Dalvik第一次加载后会生成Cache文件,以提供下次快速加载,所以第一次会很慢。
    Dalvik解释器采用预先算好的Goto地址,每个指令对内存的访问都在64字节边界上对齐。这样可以节省一个指令后进行查表的时间。为了强化功能, Dalvik还提供了快速翻译器(Fast Interpreter)。

    一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。

    Dalvik虚拟机既不支持Java SE 也不支持Java ME类库(如:Java类,AWT和Swing都不支持)。 相反,它使用自己建立的类库(Apache Harmony Java的一个子集)。

    什么是ART?

    Android Runtime
    ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。

    ART有什么优缺点呢?

     优点:

    1、系统性能的显著提升。
    2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
    3、更长的电池续航能力。
    4、支持更低的硬件。
    缺点:
    1.机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%(不过在应用包中,可执行的代码常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代码只有 6.9 MB。)
    2.应用的安装时间会变长。

    其实我日后安卓研究最多的是Dalvik虚拟机和ART虚拟机,对于ART其实就是采用了空间换时间大法而已。当我们开机时遇见程序正在优化中很慢的那种。那么你的手机很可能正在使用的就是ART虚拟机。

    tips:现在智能手机大部分都可以让用户选择使用Dalvik还是ART模式。当然默认还是使用Dalvik模式。

    用法:设置-辅助功能-开发者选项(开发人员工具)-选择运行环境(不同的手机设置的步骤可能不一样),事实证明很可能就找不到大笑。不过还是贴别人的图。


    下面这个图是我导出的手机的本地配置文件,并且在ART的地方做了批注:



    参考链接

    参考链接2


     

    展开全文
  • 安卓系统架构以及虚拟机

    千次阅读 2017-06-05 17:33:43
    1、android是基于linux内核的开源操作系统,可用于智能手机,平板电脑和智能电视Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的...

    这里写图片描述
    1、android是基于linux内核的开源操作系统,可用于智能手机,平板电脑和智能电视

    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。

    Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。

    android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

    蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C++语言编写的程序库,红色的代码内核(linux内核+driver)。在Application Framework之下,由C/C++的程序库组成,通过JNI完成从JAVA到C的调用。

    1) 应用程序

    所有的应用程序都是使用JAVA语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动在多种状态之间进行切换。
    利用JAVA的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这点正是Android的精髓所在。

    2) 应用程序框架

    应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件。
    隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
    a.丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
    b.内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
    c.资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layout files)。
    d.通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
    e.活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

    3) 系统运行库

    a)程序库
    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
    以下是一些核心库:
    主要包括基本的C库、以及多媒体库以支持各种多媒体格式、位图和矢量字体、2D和3D图形引擎、浏览器、数据库支持。
    1.Bionic系统C库。
    2.媒体库,基于PacketVideo OpenCORE。
    3.Surface Manager 顾名思义,用于管理Surface。
    4.Webkit,LibWebCore 浏览器,基于Webkit引擎。
    5.SGL 底层的2D图形引擎
    6.3D libraries 基于OpenGL ES 1.0 APIs实现。
    7.FreeType 位图(bitmap)和矢量(vector)字体显示。
    8.SQLite 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

    另外这里还有一个硬件抽象层。其实Android并非所有的设备驱动都放在linux内核里面,有一部分实现在用户空间,
    这么做的主要原因是可以避开Linux所遵循的GPL协议,一般情况下如果要将Android移植到其他硬件去运行,
    只需要实现这部分代码即可。包括:显示器驱动,声音,相机,GPS,GSM等等。

    b)Android 运行库
    Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
    每一个 Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
    Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。
    Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。
    同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的 “dx” 工具转化成.dex格式由虚拟机执行。
    Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

    4) Linux 内核
    Android 的核心系统服务依赖于 Linux 2.6 内核 ,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。
    Linux 内核也同时作为硬件和软件栈之间的抽象层。其外还对其做了部分修改,主要涉及两部分修改:
    a)Binder
    (IPC):提供有效的进程间通信,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因
    其实现了自己的一套。
    b)电源管理:为手持设备节省能耗。

    2、最后在谈谈Android所采用的语言,其应用开发采用java语言,我们所说的java一般包含三个部分:
    a) java语言:即其语法,其写代码的程式
    b) java虚拟机:为了实现一次编译到处可以运行的原则,java在编译连接以后并没有产生目标机器语言,而是采用了Java bytecode
    这种Java共用指令,这时就需要一个虚拟机来执行改指令。
    c) 库:跟我们常用的C语言一样提供一些常用的库
    后两者结合就是Java Runtime Environment。

    3、虚拟机

    jvm和DVM

    安卓所用的是dalvik
    dalvik 基于寄存器(cpu里面的),编译更快一些,所有的class文件压缩成一个 .dex字节码文件 ,运行到一个单独的虚拟机在一个单独的进程里面。

    jvm基于内存的栈 编译且运行 .class字节码文件,慢一些。所有应用运行在一个jvm里面。

    展开全文
  • Android的五层架构: 从上到下一共5层: 一、| 应用层(APP)| 二、| 应用框架层(framework) | 三、| 系统运行库层 | 四、| 硬件抽象层HAL | 五、| Linux内核层 | 接下来大致解释一下各个层是干什么的,自己学习...

    Android的五层架构:

    从上到下一共5层:
    一、| 应用层(APP)|
    二、| 应用框架层(framework) |
    三、| 系统运行库层 |
    四、| 硬件抽象层HAL |
    五、| Linux内核层 |

    接下来大致解释一下各个层是干什么的,自己学习心得,逻辑有些杂乱。

    1.应用层(APP层):简单点说就是手机上面的app软件,你能直接使用的手机功能,就是负责和用户直接交互的东西。


    2.应用框架层(framework)
    项应用开发者提供统一的API(Application Programming Interface,应用程序编程接口),主要是面向JAVA开发程序员。有一些资源管理器(ResourceManager)[以前老版本安卓手机获取ROOT权限后用RE文件管理器可以换一些开机动画等等],位置管理器(LocationManger),通知管理器(NotificationManager)等等。


    3.系统运行库层
    Android的系统运行库层由两部分组成:系统库Android运行时名字就是:Android运行时!)。
    系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。
    Android运行时:因为Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

    系统库
    1、 Libc。系统c库,一个从BSD继承来的标准C系统函数库,专门为基于EmbeddedLinux的设备定制。
    2、 Media Framework。多媒体库,Android系统多媒体库,基于PacketVideoOpen、CORE。该库支持录放.并且可以录制许多流行的音频视频格式.还有静态映像文件,包括MPEG4、H.264、MP3、AAC、JPG、PNG等。
    3、 Surface Manager。主要负责管理针对显示系统的访问,并且为多个应用程序提供2D和3D图层的无缝融合。
    4、 Webkit浏览器。一个最新的web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。
    5、 SGL。一个内置的2D图形引擎。
    6、 SSL。位于TCP/IP与各种应用层协议之间.为数据通信提供支持。
    7、 OpenGL ES。3D效果的支持。基于OpenGLES 1.0 APIs实现;该库可以使用硬件3D加速或者使用高度优化的3D软加速。
    8、greeType。提供位图bitmap和向量vector的字体描述与显示。
    9、SQLite。一个对于所有应用程序可用、功能强劲的轻型关系型数据库引擎。

    Android运行时
    1、核心库。核心库提供了Java语言API中的大多数功能,同时也包含Android的一些核心API.如android.OS、android.net、android.media等。
    2、Dalvik虚拟机。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。


    4.硬件抽象层HAL
    硬件抽象层是位于操作系统 内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。
    (换句话说就是做软件开发的可以不用看电路图,不用懂硬件,通过这一层的一些驱动程序可以实现软件和硬件的正确对接,软件正确操作硬件,软件通过更改一小部分代码就能移植到其它硬件平台)


    5.Linux内核层
    (会在另外文章详解Linux内核结构)
    Android是在Linux内核的基础上构建的,Android的内核属于Linux内核的一个分支,它并不GNU/Linux,因为一般在GNU/Linux中被支持的功能,在Android大多没有被支持。众所周知,Linux是一个开源的操作系统,由非营利的组织——Linux基金会所管理。虽然Linux是开源的,但是Android必须在GNU GPL(用于保护开源软件的一个授权规范)的许可下使用Linux的源码,才可以商用。所以为了达到商业应用的目的,Android必须去除被GNU GPL所约束的部分。Android去除了CairoX11AlsaFFmpegGTKPangoGlibc等,并以Bionic取代Glibc、以Skia取代Cairo、以Opencore取代FFmpeg等。Android并没有用户空间驱动,而是将所有的驱动都放在内核空间中,并以HAL隔开版权问题。

    Linux内核层提供了几乎所有手机、平板电脑相关设备的驱动程序,实现系统与各种硬件的通信,如显示屏、摄像头、内存、键盘、无线网络、音频设备、电源等组件。

    主要的驱动如下所示:
    1、显示驱动(DisplayDriver):基于Linux的帧缓冲(FrameBuffer)驱动。
    2、键盘驱动(KeyBoardDriver):作为输入设备的键盘驱动。
    3、Flash内存驱动(FlashMemoryDriver):基于MTD的Flash驱动程序。
    4、照相机驱动(CameraDriver):常用的基于Linux的v4l2(VideoforLinux)驱动。
    5、音频驱动(AudioDriver):常用的基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动。
    6、蓝牙驱动(BluetoothDriver):基于IEEE802.15.1标准的无线传输技术。
    7、WiFi驱动:基于IEEE802.11标准的驱动程序。
    8、Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
    9、PowerManagement(电源管理):比如电池电量等。

    展开全文
  • 安卓系统架构图(大概)

    千次阅读 2016-11-11 10:56:10
    这些应用程序都是 用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个 性化。 2)应用程序框架层 应用程序框架层...
  • python脚本控制安卓手机架构想法使用方法安装PyAndroidControl APP按照个人需求修改代码 有的时候想写写安卓的脚本,不过用 java 或者 kotlin 写图像处理什么的太麻烦了,按键精灵的脚本我也懒得学。adb 倒是可以,...
  • 前言 九月裸辞从长沙跑到上海,... 如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,升职加薪。
  • 前言 之前我有个学弟,应届毕业生,秋招拿了一些 offer,这几天非常纠结。...作为好的安卓开发,首先明确Android是前端,重点是UI,掌握自定义view。 2.建立知识体系 很多人对Android属于一知半解的状态,鼓励去Stackov
  • x86架构手机安卓好吗?

    千次阅读 2016-03-24 16:10:08
    华硕低价位手机ZenFone一推出就掀起市场话题,许多人也对ZenFone所采用的Intel Atom处理器有所意见,深怕其相容性问题无法正确执行应用程式App,这究竟是怎么回事呢? Intel近几年一直很想进军手机或是平板的移动...
  • 给文章留个小赞,就可以免费领取啦~ 戳我领取:3000页Android开发者架构师核心知识笔记 《960全网最全Android开发笔记》 《379页Android开发面试宝典》 包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、...
  • 鲁宾团队开发想用在数码相机上,后面发现数码相机市场需求不够大,加上智能手机快速发展,就被改造为一款面向智能手机的操作系统。2005.8被google收购(谷歌历史上最伟大的收购 5000w美金...
  • 到了各大厂商手里,改源码、自定义系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。 APP进行...
  • 安卓开发,首先要了解一下安卓的系统架构吧! 蛋不闲扯,上干货了;安卓系统一般分为四大部分,包括上端的应用层,应用层的框架层,安卓系统运行层及Linux内核;如图所示: 一、上端的应用层 通俗点说就是我们平常...
  • rtx安卓手机

    2013-10-29 12:48:17
    腾讯通RTX对接,实现RTX手机版的功能,可与RTX收发信息、查看RTX组织架构、... 如果客户端平时没有打开,有新消息来了之后会在安卓系统桌面顶端的消息栏提示
  • 安卓架构及开发技术

    2015-10-23 14:42:37
     Android是谷歌宣布的基于Linux平台的手机操作系统,通过开发改良逐渐扩展到平板电脑及其他领域上。Android使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。目前很...
  • 最近看到群里看到一个女生,讲述了她从开始选择Android,经过非常努力的学习和挣扎,然而最后面对当前的环境却...在安卓系统中: 当系统内存不足时,Android系统将根据进程的优先级选择杀死一 些不太重要的进程,优先.
  • 前言 春招已经接近尾声了,不知道各位小伙伴有没有收获自己心仪的offer呢。笔者疫情被裁后在家LeetCode狂刷了800多题,加之自己以为工作总结的知识、经验,系统化的整理了一下。在五一期间已经收获了字节的offer。...
  • 安卓手机配置

    2017-04-22 00:45:00
    为什么80%的码农都做不了架构师?>>> ...
  • 安卓手机投屏电视怎么没声音

    千次阅读 2019-10-25 16:44:20
    安卓手机投屏电视怎么没声音 昨天有一个深圳本地的经销商特地来我们视察,在交谈过程中,我们有谈到安卓手机投屏没有声音问题。 安卓手机投屏电视为什么没声音 Android安全架构的核心设计思想,就是在默认设置下...
  • 华硕低价位手机ZenFone一推出就掀起市场话题,许多人也对ZenFone所采用的Intel Atom处理器有所意见,深怕其相容性问题无法正确执行应用程式App,这究竟是怎么回事呢? Intel近几年一直很想进军手机或是平板的移动...
  • 关于安卓手机 的调试

    2017-09-06 14:31:49
    adb管理手机1 当前设备手机开发者模式,在cmd下 输入adb devices2 当前手机架构adb shell cat /proc/cpuinfo3 手机时间获取以下部分为引用 原址为 引用原网页 在x86架构中,我们对Time Stamp Counter (TSC) ...
  • 安卓手机运行WINDOWS

    2017-01-27 14:40:00
    我的ZenFone 2手机可以跑Windows啦! 就在台风来袭,有人正准备去泛舟的那天,国外的XDA论坛神人则是选择让自己的ZenFone 2来跑Windows 7/8.1,由于ZenFone 2本身就是采用Intel的Atom (代号Moorefield) CPU ,为...
  • 安卓手机安装busybox使用linux命令

    千次阅读 2016-01-22 13:31:31
    1、安卓手机已root 2、下载安卓终端模拟器 下载地址:http://www.coolapk.com/apk/jackpal.androidterm?v=1.0.54 3、安装RE文件浏览器,可以去对应应用商店下载 2、下载对应安卓busybox版本: a、在终端模拟器中输入...
  • 2、AsyncTask 随着安卓版本的变迁 … 八、关于Android 事件分发机制面试那些问题 1、onTouch 和 onTouchEvent 区别,调用顺序 2、dispatchTouchEvent , onTouchEvent , onInterceptTouchEvent 方法顺序以及使用...
  • 统信UOS安装安卓手机软件 APK软件包

    千次阅读 2021-05-07 22:12:07
    统信UOS系统现在做的真是越来越好用,个人也是非常的喜欢,在平时的工作中也经常使用UOS系统,万万使用的是鲲鹏920处理器的机器,arm架构,和大部分手机架构一样,所以按理来说是可以直接在UOS系统上运行手机软件的...
  • 下面是小编收集整理的,希望对大家有帮助~~查看手机设备架构的方法工具/原料安卓手机一台超级终端软件准备步骤1在某些情况下,我们必须要对手机的设备架构进行了解,这对于开发或者软件的安装选择是必须的。...
  • Android用命令行查看手机架构

    千次阅读 2019-05-30 09:50:56
    用命令行查看安卓手机架构: adb shell cat /proc/cpuinfo 结果实例: processor : 0 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 517
精华内容 206
关键字:

安卓手机架构