安卓手机APP开发__平台的架构

安卓手机APP开发__平台的架构

 

目录

概述

安卓软件栈

Linux内核

硬件抽象层(HAL)

安卓运行时

原生的C/C++代码库

Java API框架

系统APP


概述

安卓是一个开源的,基于Linux的软件栈,它创建一个设备和形式因素的很宽的矩阵。
下图展示了安卓平台的所有的主要的组件


安卓软件栈


Figure 1. The Android software stack.

Linux内核

安卓平台的基础是Linux内核。例如,安卓的运行时依赖于Linux内核的功能。
例如,线程和底层的内存管理。

使用Linux内核让安卓利用了关键的安全特性,让设备制造商针对一个知名的
Linux内核来开发硬件驱动。

硬件抽象层(HAL)

硬件抽象层(HAL)提供了标准的接口,来向高层的Java API框架提供硬件设备的功能。
硬件抽象层(HAL)由多个库的模块组成,每一个库模块都为一个特定的硬件组件类型
实现了一个接口,例如,照相机或者是蓝牙模块。当框架的API做了一个调用,来读取
硬件设备时,安卓系统加载了那个硬件组件的库模块。


安卓运行时

对于设备运行在安卓版本5.0 (API 级别 21)或者更高时,每一个APP运行在它自己的
进程中,在安卓的运行时中有自己的实例。安卓运行时是被写成在在很少的内存上运行
时多个虚拟机器,方法是执行Dalvik可执行格式的文件(DEX),这是一个字节码的格式
针对安卓进行了特殊的设计,对于很少的内存中运行进行了优化。构建工具是d8,它编译
Java源代码为DEX字节码,这个字节码能运行在安卓的平台上。

安卓运行时的一些主要的特性包括如下的内容:

预先编译和即时编译
优化过的垃圾回收
在安卓版本9以及更高,一个APP软件包的DEX的优化
有更紧揍的机器码的文件
更好的调试支持,包括一个专用的采样检查器,详细的诊断异常和崩溃报告,
为了监视特定的域的检查点的设置能力

在安卓5之前,Dalvik是安卓的运行时。如果你的APP在安卓运行时运行的很好,
那么它也能在Dalvik运行的好,但是相反可能是不行的。

安卓也包括了一些核心的运行时库,它提供了Java编程语言的绝大部分的功能,
包括了java8的特性,这也是Java API 框架所使用的。

原生的C/C++代码库

许多核心的安卓系统组件和服务,例如安卓运行时,和硬件抽象层都从原生的代码构建出来的,
需要由C和C++写的原生的代码库.安卓平台提供Java框架API来提供这些原生库中的功能给APP
例如,你能通过使用安卓框架的Java OpenGL API来读取OpenGL ES,进而支持在你的APP中
绘制和操纵2D和3D的图形.

如果你正在开发一个APP,需要有C或者是C++的代码,你能使用安卓的NDK来直接读取这些原生的
平台代码库中的一些功能.

Java API框架

通过使用Java编写的API,你能利用安卓操作系统的所有的特性集.这些API形成了你需要的
构建代码块,用来创建安卓的APP,通过简化核心代码的重用,模块化系统组件和服务,包括
如下的内容:

一个富于扩展的视图系统,你能用这个系统来构建一个APP的用户界面,包括列表,表格,文本框
按钮,甚至是一个内嵌的网络浏览器.

一个资源管理器,提供对非代码资源的读取,例如本地化的字符串,图形,和布局文件

一个通知管理器,它能在一个状态条中显示所有的APP的定制化的告警信息.

一个活动管理器,它管理APP的生存周期和提供一个常用的导航返回栈.

内容提供器,它允许一个APP从其它的APP那里读取数据,例如通讯录APP,
或者是共享它们自己的数据.


系统APP

安卓带来了一系列的核心的APP,例如,电子邮件,短消息,日历,网络浏览器,通讯录,等.
平台自带的APP与用户选择安装的APP之间没有特殊的状态.所以,第三方APP能成为用户的
默认的浏览器,短消息,甚至是默认的键盘.一些例外是有的,例如,系统设置APP.

系统APP功能都作为用户的APP,与开发者自己的APP一样提供关键的功能.例如,如果你
要你的APP发送短消息,你不需要自己构建这个功能.你能调用任何一个短消息的APP,来
发短消息到你指定的收件人.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes的灵魂核心:kube-scheduler

Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化容器化应用程序的部署、扩展和管理。在Kubernetes集群中,kube-scheduler是一个至关重要的组件,它负责将Pod(Kubernetes中的最小部署单元&#xff0…

2024年电工杯高校数学建模竞赛(A题) 建模解析| 园区微电网风光储协调优化配置 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮200人完成了建模与思路的构建的处理了~ 本篇文章是鹿鹿学长经过深度思考,独辟蹊径,实现综合建模。独创复杂系统视角,帮助你解决电工杯的难关呀。 完整内容可…

Anti Desgin Vue 实现 表格可编辑、新增、删除功能

1、效果图 新增&#xff1a; 删除&#xff1a; 修改&#xff1a; 代码&#xff1a; <template><div><button click"add">添加</button><span style"margin-left: 8px"><template v-if"hasSelected">{…

C++语言基础光速入门笔记

目录 从C到CC和C语言的关系C编译器C面向对象程序设计标准库ANSI 标准C的使用场景标准化 安装 GNU 的 C/C 编译器g 应用说明g 常用命令选项 C 基本语法C 关键字三字符组 C 数据类型基本的内置类型typedef 声明枚举类型类型转换静态转换&#xff08;Static Cast&#xff09;动态转…

沃通国密根证书入根红莲花浏览器,共建国密HTTPS应用生态

近日&#xff0c;沃通CA与海泰方圆红莲花安全浏览器进一步达成合作&#xff0c;沃通新增国密根证书入根红莲花安全浏览器。此次入根合作&#xff0c;标志着沃通国密数字证书产品兼容性再次得到提升&#xff0c;进一步夯实国密应用根基。 沃通CA入根红莲花浏览器&#xff0c;自动…

手机端如何访问本地vue+vite项目,实现实时调试?

一、应用场景 h5&#xff08;vuevite&#xff09;嵌入app后&#xff0c;出现某种问题时&#xff0c;需要每次发布坏境后&#xff0c;才能才看效果&#xff0c;这种来回很耗时间&#xff0c;本文章在于解决手机端直接访问本地启动应用项目&#xff0c;无需重复发布坏境 二、实…

四川易点慧电商抖音小店未来商业新蓝海

在数字经济的浪潮中&#xff0c;电商行业日新月异&#xff0c;不断涌现出新的商业模式和平台。四川易点慧电商抖音小店作为其中的佼佼者&#xff0c;以其独特的商业模式和广阔的市场前景&#xff0c;正成为越来越多创业者和商家的首选。本文将从多个角度探讨四川易点慧电商抖音…

docker 指定jdk11镜像执行jar

dockerfile :下载jdk11 并将上传的jar 放入jdk11容器/root&#xff0c;改名为app.jar vi dockerfile 。。。。内容见下图 # 构建jdk11镜像 docker build -t demo . # 也可以通过jdk11镜像&#xff08;前提有jdk11镜像&#xff09;外挂载目录方式运行jar docker run --name d…

惠普电脑怎么进入bios?图文教程助你轻松上手!

进入BIOS&#xff08;基本输入/输出系统&#xff09;是在电脑启动时进行硬件初始化和设置的重要步骤之一。对于惠普&#xff08;HP&#xff09;电脑用户来说&#xff0c;了解如何进入BIOS是解决一些硬件和系统问题的关键。本文将介绍惠普电脑怎么进入bios的三种方法&#xff0c…

java学习和项目总结

java&#xff1a; JDK/JRE/JVM三者的关系 JVM&#xff1a;JVM是java进行编译的虚拟机&#xff0c;是Java 能够跨平台运行的核心 。 所有的java程序会首先被编译为.class的类文件&#xff0c;这种类文件可以在虚拟机上执行。也就是说class文件并不直接与机器的操作系统交互&a…

React是什么?

一、React简介 1、React是Facebook开发的一款JS库。 2、React一般被用来作为MVC中的V层&#xff0c;它不依赖其他任何的库&#xff0c;因此开发中&#xff0c;可以与任何其他的库集成使用&#xff0c;包括Jquery、Backbone等。 3、它可以在浏览器端运行&#xff0c;也可以通过…

React项目知识积累(二)

1.document.querySelectorAll() document.querySelectorAll() 是 JavaScript 中的一个内置方法&#xff0c;用于选择多个元素并返回一个 NodeList 对象。 const nodeList document.querySelectorAll(selector); selector&#xff1a;一个字符串&#xff0c;用于指定要选择的…

Day24:Leetcode:235. 二叉搜索树的最近公共祖先 + 701.二叉搜索树中的插入操作 + 450.删除二叉搜索树中的节点

LeetCode&#xff1a;235. 二叉搜索树的最近公共祖先 解决方案&#xff1a; 1.思路 对于当前节点x&#xff0c;如果x比p和q的值都大&#xff0c;说明&#xff0c;p和q在x的右子树里面&#xff0c;那么去x的右子树里面去寻找&#xff1b;对于当前节点x&#xff0c;如果x比p和…

Docker 开启 SSL 验证

最近看 OJ 项目的远程开发阶段&#xff0c;然后踩坑踩了 2 天&#x1f602; Docker 版本&#xff1a;在 CentOS 安装 sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io Client: Docker Engine - CommunityVersion: 20.10.9API version: …

ESP-IDF使用Button组件实现按键检测的功能

ESP32使用Button组件实现按键检测的功能 ESP-IDF 组件管理LED 组件简介测试button组件写在最后 ESP-IDF 组件管理 IDF 组件管理器工具用于下载 ESP-IDF CMake 项目的依赖项&#xff0c;该下载在 CMake 运行期间自动完成。IDF 组件管理器可以从自动从组件注册表 或 Git 仓库获取…

vue.js基础组件4--下

1.动态组件 1.定义动态组件 利用动态组件可以动态切换页面中显示的组件。使用<component>标签可以定义动态组件&#xff0c;语法格式如下。 <component is"要渲染的组件"></component>上述语法格式中&#xff0c;<component>标签必须配合i…

Java IO与NIO来Copy文件的四种方法实现以及性能对比

使用Java的IO与NIO来Copy文件的四种方法实现以及性能对比 FileCopyRunner接口&#xff0c;定义了Copy文件的接口&#xff0c;等下在测试类中使用匿名内部类来实现。 package nio.channel;import java.io.File;public interface FileCopyRunner {void copyFile(File source , …

广告投放—常见术语

01 按...计费 英文中文场景CPT按时间计费品牌采买CPM每千人展现成本CPM总消费/曝光量*1000CPC按点击收费竞价CPD按下载收费 CPS 按销售收费佣金&#xff0c;如&#xff1a;销售额1000&#xff0c;CPS3%&#xff0c;广告费30CPA按行为收费&#xff08;行为&#xff1a;下载、注…

【C语言】明析部分C语言内存函数

目录 1.memcpy 2.memmove 3.memset 4.memcmp 以下都是内存函数&#xff0c;作用单位均是字节 1.memcpy memcpy是C/C语言中的一个内存拷贝函数&#xff0c;其原型为&#xff1a; void* memcpy(void* dest, const void* src, size_t n);目标空间&#xff08;字节&#xff09…

C语言习题~day17

1.下面代码关于数组名描述不正确的是&#xff08; &#xff09; int main() {int arr[10] {0};return 0; } A.数组名arr和&arr是一样的 B.sizeof(arr)&#xff0c;arr表示整个数组 C.&arr&#xff0c;arr表示整个数组 D.除了sizeof(arr)和&arr中的数组名&…