一、移动APP的几种类型

1、Native APP:基于智能手机操作系统,并使用原生程序编写运行的应用程序,有IOS,Android,Windows Phone8等系统

2、Web APP:运行在智能手机浏览器上的应用程序,主要采用HTML5,CSS和JavaScript开发

3、Hibrid APP:介于Native APP和Web APP之间的混合移动应用,常用开发框架:PhoneGap,AppCan,Rexsee

4、Light APP:在已有手机APP上开发的插件或服务,也叫做微应用或轻应用,例如,百度轻应用,UC网页应用,微信公众号

二、Android平台架构

Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,它采用一种被称为软件叠层(software Stack)的方式进行构建。这种软件叠层结构使得层与层之间相互分离,明确各层的分工。其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建一个java application framework,所有的应用程序都是基于java的application framework之上。

Android平台的架构图如下:

从图中可以看出,Android系统是由五大部分组成的:

1、应用程序层(APPLICATIONS)

Android系统将包含系列的核心应用程序,包括电子邮件客户端,SMS程序,日历,地图,浏览器,联系人等。这些应用程序都是用java编写的。

2、应用程序框架(APPLICATION FRAMEWORK)

当开发应用Android应用程序时,就是面向底层的应用框架进行的。从这个意义上来看,Android系统之上的应用程序时完全平等的,不管Android系统提供的程序,还是普通开发者提供的应用程序,都可以访问Android提供的API框架。

3、函数库(LIBRARIES)

Android包含一套被不同组件所使用的C/C++库的集合。一般来说,android应用开发者不能直接调用这套C/C++库,但可以通过上面的应用程序框架来调用这些库。

4、Android运行时(ANDROIDRUNTIME)

Android运行时由两部分组成:Android核心库集合(Core Libraries)和Dalvik虚拟机(Dalvik Virtual Machine)。其中核心库集提供了java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行Android应用程序。每个Android应用程序都运行在单独的dalvik虚拟机内(即每个Android应用程序对应一条Dalvik进程),Dalvik专门针对同事高效运行多个虚拟机进行优化,因此Android系统很方便实现对应用程序进行隔阂。

由于Android应用程序的编程语言是java,因此有些人会把Dalvik虚拟机和JVM搞混,但实际上二者存在区别:Dalvik并不完全遵守JVM规范,两者也不兼容。实际上,JVM虚拟机运行的是Java字节码(通常是.class文件),但dalvik运行的是其专有的dex(Dalvik Executable)文件。JVM直接从.class文件或者JAR包中加载字节码然后运行;而Dalvik则无法直接从.class文件或JAR包中加载字节码,它需要通过DX工具将应用程序的所有.class文件编译成.dex文件,Dalvik则运行的是该.dex文件

Dalvik虚拟机非常适合在移动终端上使用,相对在PC或者服务器上运行的虚拟机而言,Dalvik虚拟机不需要很快的CPU计算速度和大量的内存空间,它主要有如下两个特点:

(1)运行专有的.dex文件。专有的.dex文件减少了.class文件中冗余信息,而且会把所有.class文件整合到一个文件中,从而提高运行性能;而且DX工具还会对.dex文件进行一些性能优化。

(2)基于寄存器实现。大多数虚拟机(包括JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的。一般来说,基于寄存器的虚拟机具有更好的性能表现,但硬件通用性上略差。

5、Linux内核(Linux kernel)

Android系统建立在Linux 2.6之上的,Linux内核提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务。除此之外,Linux内核也是系统硬件和软件叠层之间的抽象层。

原生android(一)的更多相关文章

  1. Unity3D 原生Android结合UnityPlayerActivity开发遇到的问题

    需求是原生Android 的Activity启动UnityPlayerActivity,按Back键后返回原来的Activity 1.在AndroidManifest.xml中的UnityPlayer ...

  2. React Native移植原生Android

    (一)前言 之前已经写过了有关React Native移植原生Android项目的文章,不过因为RN版本更新的原因吧,跟着以前的文章可能会出现一些问题,对于初学者来讲还是会有很多疑难的困惑的,而且官方 ...

  3. 如何消除原生Android网络状态上的惊叹号

    喜欢使用原生Android系统的朋友可能会发现自己的状态栏信号图标上经常有一个惊叹号标志. 这是怎么回事呢?原因是Android为了对网络状态进行检测,采用了一种叫做captive detection ...

  4. Android 原生 Android ActionBar

    本文内容 关于 ActionBar 必要条件 项目结构 环境 演示一:Action Bar 显示隐藏 演示二:Action Item 显示菜单选项 演示三:Action Home 启用"返回 ...

  5. 前端写一个月的原生 Android 是如何一种体验?

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/j01G58UC80251/article/details/79017706 一个前端程序猿的一个月原 ...

  6. 【React Native开发】React Native移植原生Android项目(4)

    ),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...

  7. Android H5混合开发(3):原生Android项目里嵌入Cordova

    前言 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cordova项目并添加Android平台,把我们的安卓项目导入Android平 ...

  8. 原生Android项目里嵌入Cordova

    Android H5混合开发():原生Android项目里嵌入Cordova 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cord ...

  9. 腾讯x5Webview取代原生android Webview

    一.官方地址: https://x5.tencent.com/tbs/ 二.不需要申请开发者,QQ直接登录,下载即可集成到项目中. 三.与原生的webview对比优势 1) 速度快:相比系统webvi ...

  10. 使用Chrome开发者工具远程调试原生Android上的H5页面

    Android4.4(KitKat)开始,使用Chrome开发者工具可以帮助我们在原生的Android应用中远程调试WebView网页内容.具体步骤如下: (1)设置Webview调试模式 可以在Ac ...

随机推荐

  1. ios的图片解压

    YYKit SDWebImage FLAnimatedImage YYKit YYCGImageCreateDecodedCopy YYImageCoder 1 2 3 4 5 6 7 8 9 10 ...

  2. 2018 - 2019 CTU Open Contest E. Locker Room 【后缀数组】

    任意门:http://codeforces.com/gym/101954/problem/E E. Locker Room time limit per test 2.0 s memory limit ...

  3. linq to sql 分页技术

    昨天在用LINQ写分页的时候碰到一个很奇怪的问题:翻页的时候,有的数据会莫名其妙地消失,查了半个多小时才发现问题所在,其实是一个很细节的地方. 数据表如下: LINQ分页的实现是: var artic ...

  4. P1446 [HNOI2008]Cards

    题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案. 进一步,小春要求染出Sr张红色,Sb张蓝 ...

  5. SICP 习题 (1.35)解题总结

    SICP 习题 1.35要求我们证明黄金切割率φ 是变换函数 x => 1+ 1/x 的不动点,然后利用这一事实通过过程fixed-point 计算出φ的值. 首先是有关函数的不动点,这个概念须 ...

  6. VMware Tools安装方法及解决无法全屏显示问题

    环境:VMware8.0虚拟机        ubuntu:12.04 在刚安装完ubuntu后,屏幕不能全屏显示,此时: 1.安装VMware Tools 步骤: 1.1     进入ubuntu系 ...

  7. 实现Redis Cluster并实现Python链接集群

    目录 一.Redis Cluster简单介绍 二.背景 三.环境准备 3.1 主机环境 3.2 主机规划 四.部署Redis 4.1 安装Redis软件 4.2 编辑Redis配置文件 4.3 启动R ...

  8. iOS:WKWebView(19-01-31更)

    以前用得不多,先开一篇,以后有遇到再补充. 1.返回 2.JS 调用 OC 3.获取.修改.添加网页信息 1.返回 if (self.mWebView.canGoBack == YES) { [sel ...

  9. 蓝牙开发<coreBluetooth/CoreBluetooth.h>

    /* 建立中心设备 扫描外设(Discover Peripheral) 连接外设(Connect Peripheral) 扫描外设中的服务和特征(Discover Services And Chara ...

  10. 跨域(Cross-Domain) AJAX for IE8 and IE9

    1.有过这样一段代码,是ajax $.ajax({ url: "http://127.0.0.1:9001", type: "POST", data: JSON ...