安卓手机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…

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 , …

【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…

【Linux系统化学习】应用层——HTTPS协议

目录 什么是加密、解密 为什么要加密 臭名昭著的”运营商劫持“ 常见的加密方式 对称加密 非对称加密 数据摘要&&数据指纹 两个用途 HTTPS的工作过程探究 方案1——只是用对称加密 方案2——只使用非对称加密 方案3——双方都是用非对称加密 方案4——对称…

科技引领乡村振兴新潮流:运用现代信息技术手段,提升农业生产和乡村管理效率,打造智慧化、现代化的美丽乡村

一、引言 随着科技的不断进步&#xff0c;现代信息技术已经渗透到社会的各个领域&#xff0c;成为推动社会发展的重要力量。在乡村振兴战略的背景下&#xff0c;科技的力量同样不容忽视。本文旨在探讨如何运用现代信息技术手段&#xff0c;提升农业生产和乡村管理效率&#xf…

java自学阶段二:JavaWeb开发--day04(Maven学习)

day04学习笔记 一、学习目标 1.了解maven的基础概念&#xff1b; 2.学会maven的部署&#xff1b; 3.maven的作用&#xff1a;标准化&#xff1b;方便找依赖 maven就是一个开源项目&#xff0c;专门用来管理和构建Java项目的&#xff1b;我们自己写的项目结构可能会千奇百怪&am…

每日一题《leetcode--116.填充每个结点的下一个右侧结点》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/ 题目要求给每个结点的next指针进行填充&#xff0c;使每个结点的next指针指向其下一个右侧结点。如果右侧没有结点&#xff0c;则将next指针设置为空。 struct Node* connect(struct Node* root) {…