一文了解AOSP是什么?

一文了解AOSP是什么?

在这里插入图片描述

AOSP基本信息

基本定义

AOSP是Android Open Source Project的缩写,这是一个由Google维护的完全免费和开放的操作系统开发项目。它是Android系统的核心基础,提供了构建移动操作系统所需的基本组件。

主要特点

  • 完全开源:源代码可以自由获取和修改
  • 基于Linux内核:使用修改版的Linux内核和其他开源软件
  • 主要面向触屏设备:设计优化适配触摸屏设备

AOSP与商业Android的区别

  • AOSP是纯净版Android系统,不包含Google服务和专有应用
  • 商业版Android包含了额外的Google移动服务(GMS)和各种专有组件
  • 大多数手机制造商会基于AOSP开发自己的定制Android版本

开发相关

  • 支持多种编程语言:包括Java、C++和C语言
  • 提供完整的开发文档和指南
  • 定期发布安全更新和新版

最新发展

截至2024年9月,Android 15已经发布到AOSP,带来了许多新特性:

  • 改进的应用开发工具
  • 增强的排版功能
  • 国际化支持优化
  • 系统性能提升

使用场景

AOSP主要应用于:

  • 定制Android系统开发
  • 设备制造商的系统定制
  • 第三方ROM开发(如LineageOS)
  • 研究和学习Android系统架构

AOSP主要组件

系统层次结构-(从底层到顶层):

A. Linux内核层

  • 设备驱动程序
  • 电源管理
  • 安全系统
  • 内存管理
  • 进程管理

B. 硬件抽象层(HAL)

  • 提供标准接口
  • 连接高层框架与底层硬件
  • 包含各种硬件模块的接口实现

C. 原生系统库

  • libc(C库)
  • SQLite数据库
  • OpenGL ES(图形库)
  • Media Framework(多媒体框架)
  • WebKit(浏览器引擎)

D. Android Runtime

  • ART(Android Runtime)或Dalvik虚拟机
  • 核心库
  • 即时编译器

框架层组件:

A. 系统服务(System Services)

  • ActivityManager
  • WindowManager
  • PackageManager
  • NotificationManager
  • LocationManager

B. Java API框架

  • View System(视图系统)
  • Resource Manager(资源管理器)
  • Content Providers(内容提供者)
  • Notification Manager(通知管理器)

应用层组件:

A. 系统应用

  • 基础应用程序
  • 预装应用
  • 核心功能应用
  1. 模块化组件(Project Mainline):

A. 可更新的系统组件

  • 安全模块
  • 隐私模块
  • 媒体编解码器
  • 网络组件
  • 开发者API

重要目录结构:

AOSP根目录
├── build/          # 编译系统
├── bionic/         # 精简版C库
├── frameworks/     # 框架层代码
├── system/         # 底层文件系统
├── packages/       # 应用程序包
├── vendor/         # 厂商专有文件
└── device/         # 设备相关配置

安全架构组件:

  • SELinux安全策略
  • 权限管理系统
  • 应用沙箱
  • 加密系统
  • 验证启动

核心特性:

  • 模块化设计
  • 开放源代码
  • 可定制性强
  • 支持多种硬件平台
  • 定期安全更新

Android Runtime (ART)

ART是Android操作系统中的应用程序运行时环境,它在Android系统架构中扮演着关键角色。深入了解ART的特性、功能和它与前身Dalvik的区别。

ART的定义和演进:

Android Runtime (ART) 是Android操作系统中用于执行应用程序的运行时环境。它取代了早期版本中使用的Dalvik虚拟机,从Android 5.0 (Lollipop) 开始成为默认的运行时环境。ART负责将应用程序的字节码转换为本地指令,然后由设备的运行时环境执行这些指令。

ART的主要特性:

a) 预先编译(Ahead-of-Time Compilation,AOT):ART在应用安装时就将字节码编译成机器码,而不是在运行时才进行编译。这显著提高了应用的执行速度。

b) 改进的垃圾回收:ART具有更高效的垃圾回收机制,减少了应用暂停时间,提高了性能。

c) 增强的调试支持:ART提供了更好的调试功能,有助于开发者更容易地找出和修复问题。

d) 优化的异常和垃圾回收追踪:这有助于提高应用的性能和稳定性。

ART vs Dalvik:

  • 编译方式:Dalvik使用即时编译(JIT),而ART主要使用预先编译(AOT)。
  • 性能:由于预先编译,ART通常能提供更好的性能和更快的应用启动速度。
  • 存储空间:ART需要更多的存储空间来存储预编译的代码。
  • 兼容性:如果应用在ART上运行良好,它通常也能在Dalvik上运行,但反之则不一定成立。

ART的工作原理:

当安装一个应用时,ART会将Dalvik字节码(.dex文件)编译成本地机器码。这个过程叫做"dex2oat",它取代了Dalvik中的"dexopt"过程。在运行时,应用可以直接执行这些本地指令,而不需要额外的解释或编译步骤。

编译机制:

a) AOT(Ahead-of-Time)预先编译:

  • 在应用安装时,将DEX文件转换为本地机器码
  • 使用dex2oat工具进行编译优化
  • 生成的本地代码存储在/data/dalvik-cache目录中
  • 减少运行时开销,提高执行效率

b) JIT(Just-in-Time)即时编译:

  • 识别频繁执行的代码片段(热点代码)
  • 在运行时动态编译这些代码
  • 结合配置文件导向优化(PGO)
  • 平衡启动时间和性能优化
内存管理:

a) 垃圾回收机制:

  • 采用并发垃圾回收器
  • 支持内存压缩
  • 减少应用暂停时间
  • 更高效的内存分配和回收策略

b) 堆内存优化:

  • 改进的对象分配
  • 更好的内存碎片处理
  • 优化的堆内存布局
  • 支持大对象空间管理
执行优化:

a) 代码优化:

  • 方法内联
  • 循环优化
  • 死代码消除
  • 常量传播和折叠

b) 运行时优化:

  • 改进的异常处理
  • 优化的线程调度
  • 更高效的方法调用
  • 更好的类型检查消除
类加载和执行:

a) 类加载过程:

  • 验证类文件格式
  • 准备类数据结构
  • 解析符号引用
  • 初始化静态字段

b) 执行流程:

  • 直接执行本地机器码
  • 减少解释执行开销
  • 支持动态链接
  • 提供调试和监控能力
  • 性能改进:

a) 启动优化:

  • 减少应用冷启动时间
  • 优化类加载顺序
  • 提前加载关键组件

b) 运行时性能:

  • 更低的内存占用
  • 更好的电池效率
  • 更流畅的用户体验
  • 更稳定的长期性能

ART的架构:

ART的架构包括以下主要组件:

  • 编译器:负责将DEX字节码转换为本地机器码。
  • 垃圾回收器:管理内存分配和回收。
  • 运行时:执行编译后的代码并提供运行时支持。
  • 类加载器:负责加载应用所需的类。

ART的未来发展:

Google持续优化ART,以提供更好的性能、更低的内存使用和更长的电池寿命。未来的版本可能会引入更多的优化技术,如更智能的编译策略和更高效的内存管理。

System Apps(系统应用层)

核心系统应用

a) 设置应用(Settings)

  • 提供系统级配置界面
  • 管理设备各项功能开关
  • 控制应用权限和通知
  • 处理网络、显示、声音等设置
  • 提供系统更新和安全选项

b) 包安装器(Package Installer)

  • 处理应用的安装、更新和卸载
  • 验证应用签名和权限
  • 管理应用版本和兼容性
  • 执行安装前的安全检查

c) 系统界面(SystemUI)

  • 管理状态栏和导航栏
  • 处理系统通知和快速设置
  • 提供系统级UI交互
  • 显示系统状态信息

基础功能应用

a) 电话应用

  • 管理通话功能
  • 维护通话记录
  • 提供紧急呼叫服务
  • 支持通讯录集成

b) 短信应用

  • 处理短信和彩信
  • 管理消息会话
  • 提供垃圾信息过滤
  • 支持消息备份恢复

c) 相机应用

  • 提供拍照和录像功能
  • 支持基本图像处理
  • 管理相机参数设置
  • 集成AR和AI功能

用户服务应用

a) 联系人

  • 管理通讯录信息
  • 支持多账户同步
  • 提供联系人分组
  • 处理联系人导入导出

b) 日历

  • 管理日程和提醒
  • 支持多账户日历同步
  • 提供农历和节假日信息
  • 处理重复事件逻辑

c) 时钟

  • 提供闹钟功能
  • 支持世界时钟显示
  • 包含计时器和秒表
  • 管理系统时间设置
  1. 系统工具

a) 文件管理器

  • 浏览文件系统
  • 管理存储空间
  • 支持文件操作
  • 提供文件分享功能

b) 下载管理器

  • 处理系统下载任务
  • 支持断点续传
  • 管理下载队列
  • 监控下载进度和状态

c) 备份还原

  • 系统设置备份
  • 应用数据备份
  • 用户数据迁移
  • 系统恢复功能

重要特点

a) 系统权限

  • 具有特殊系统权限
  • 可访问底层API
  • 运行在系统进程
  • 享有高优先级

b) 预装特性

  • 出厂预装
  • 难以卸载
  • 自动更新
  • 系统级整合

c) 安全机制

  • 系统签名保护
  • 特权操作控制
  • 安全存储访问
  • 隐私数据保护

Java API Framework(应用框架层)

视图系统(View System)

  • 提供UI构建的基础组件
    • View:所有UI组件的基类
    • ViewGroup:容器类,可包含其他View
    • Layout:各种布局管理器
    • Widget:预制UI控件
  • 处理用户交互
    • 触摸事件处理
    • 手势识别
    • 动画效果
    • 视图切换

资源管理器(Resource Manager)

  • 管理应用资源
    • 布局文件(XML)
    • 字符串资源
    • 图片和多媒体
    • 主题和样式
  • 支持特性
    • 国际化(多语言)
    • 屏幕适配
    • 主题切换
    • 运行时资源访问

活动管理器(Activity Manager)

  • 管理应用组件生命周期
    • onCreate():创建初始化
    • onStart():可见未交互
    • onResume():可见可交互
    • onPause():失去焦点
    • onStop():不可见
    • onDestroy():销毁
  • 处理应用导航和任务
    • 任务栈管理
    • Intent系统
    • 进程管理
    • 应用切换

窗口管理器(Window Manager)

  • 窗口类型管理
    • 应用窗口
    • 系统窗口
    • 子窗口
  • 窗口控制功能
    • 布局参数设置
    • Z轴排序
    • 焦点管理
    • 输入事件分发

内容提供者(Content Provider)

  • 数据操作接口
    • CRUD操作
    • 跨应用数据共享
    • 权限控制
    • URI寻址
  • 系统内容提供者
    • 联系人数据
    • 日历数据
    • 媒体库
    • 通话记录

包管理器(Package Manager)

  • 应用程序管理
    • 安装和卸载
    • 权限管理
    • 版本控制
    • 签名验证
  • 应用信息查询
    • 包信息
    • 组件信息
    • 权限信息
    • 服务信息

通知管理器(Notification Manager)

  • 通知类型支持
    • 标准通知
    • 进度通知
    • 自定义通知
    • 前台服务通知
  • 通知功能特性
    • 通知渠道
    • 重要性级别
    • 用户交互
    • 自定义样式

电话管理器(Telephony Manager)

  • 通讯功能管理
    • 通话控制
    • 短信处理
    • SIM卡管理
    • 网络状态监控
  • 设备信息获取
    • 设备识别码
    • 运营商信息
    • 信号强度
    • 通话状态

位置管理器(Location Manager)

  • 定位方式支持
    • GPS定位
    • 网络定位
    • 被动定位
    • 地理编码
  • 位置服务功能
    • 位置更新
    • 地理围栏
    • 位置权限
    • 省电模式

这些框架组件共同构成了Android应用开发的基础,为开发者提供了丰富的API接口。每个组件都专注于特定的功能领域,通过良好的封装和抽象,使得应用开发更加高效和规范。

Native Libraries(原生库层)

概述

  • Native Libraries 是 Android 系统中的重要组成部分,主要由 C/C++ 编写
  • 它们为上层的 Java API 框架提供必要的底层支持
  • 可以直接与 Linux 内核进行交互,提供高效的系统服务

主要组件

a) Surface Manager(表面管理器)

  • 负责管理显示子系统
  • 处理多个应用窗口的显示合成
  • 确保界面显示的流畅性

b) OpenGL ES

  • 提供 2D 和 3D 图形处理能力
  • 支持硬件加速的图形处理
  • 为游戏和图形应用提供强大支持

c) Media Framework(媒体框架)

  • 处理各种音频和视频格式
  • 提供媒体编解码功能
  • 支持图片处理和转换

d) SQLite

  • 轻量级关系型数据库
  • 为应用提供结构化数据存储
  • 支持复杂的数据查询和管理

e) WebKit

  • 提供网页浏览核心引擎
  • 支持 HTML 内容的解析和渲染
  • 为浏览器和 WebView 提供支持

f) SSL

  • 提供安全通信支持
  • 实现数据加密和解密
  • 保护网络传输安全

g) libc

  • 标准 C 库实现
  • 提供基本的系统调用接口
  • 负责内存管理等基础功能

特点

a) 高性能

  • 可以直接访问硬件资源
  • 执行效率高
  • 适合处理计算密集型任务

b) 跨平台

  • 通过 JNI 接口与 Java 层交互
  • 支持使用 NDK 进行开发
  • 具有良好的可移植性

c) 安全性

  • 实现系统级的权限控制
  • 提供内存保护机制
  • 确保进程间的隔离

Native Libraries 层是 Android 系统性能和功能的重要保障,它通过底层的 C/C++ 实现提供了高效的系统服务,同时通过良好的接口设计,使得上层应用能够方便地使用这些功能。

Hardware Abstraction Layer(硬件抽象层)

基本概念

a) 定义

  • HAL 是 Android 系统中的一个标准接口层
  • 负责封装底层硬件驱动程序的具体实现
  • 作为硬件和高层软件之间的桥梁

b) 作用

  • 有效隔离不同硬件设备的差异性
  • 为上层提供统一的硬件访问接口
  • 简化硬件驱动程序的开发过程

主要模块

a) 显示模块

  • 负责设备屏幕的显示功能
  • 处理图形渲染相关操作
  • 控制显示分辨率和刷新率

b) 音频模块

  • 管理声音的播放和录制
  • 处理音频数据的采集
  • 实现各种音效处理功能

c) 相机模块

  • 控制图像的采集过程
  • 管理视频的录制功能
  • 提供相机参数的调节接口

d) 传感器模块

  • 处理加速度传感器数据
  • 管理陀螺仪信息
  • 控制地磁感应器
  • 处理环境光感应等功能

e) 无线模块

  • 管理 WiFi 连接和控制
  • 处理蓝牙通信功能
  • 控制 NFC 近场通信

f) 存储模块

  • 管理设备内部存储
  • 控制外部存储访问
  • 提供存储空间管理

实现机制

a) 模块化设计

  • 采用独立的模块结构
  • 实现可插拔的架构设计
  • 保持模块间的松耦合

b) 接口规范

  • 定义标准的 HAL 接口
  • 确保版本间的兼容性
  • 维护接口的稳定性

c) 驱动适配

  • 对接具体的硬件驱动
  • 实现设备适配功能
  • 保证硬件兼容性

特点优势

a) 跨平台特性

  • 实现硬件无关性
  • 提供设备兼容能力
  • 支持平台间的移植

b) 可维护性

  • 便于模块化管理
  • 支持独立更新维护
  • 实现错误隔离机制

c) 安全性

  • 实现严格的权限控制
  • 限制直接硬件访问
  • 提供系统保护机制

HAL 层在 Android 系统中扮演着至关重要的角色,它不仅使得 Android 能够运行在各种不同的硬件平台上,还为硬件厂商提供了标准的开发接口。通过 HAL 的抽象,上层应用开发者可以专注于功能实现,而不必过多关注底层硬件的具体细节。同时,HAL 的模块化设计也使得系统的维护和升级变得更加容易和灵活。

Linux Kernel(Linux内核层)

核心组件

a) 进程管理

  • 负责进程的创建、调度和终止
  • 管理进程间通信(IPC)机制
  • 处理线程的创建和管理
  • 实现进程同步和互斥机制

b) 内存管理

  • 管理物理内存的分配和回收
  • 实现虚拟内存机制
  • 处理页面置换算法
  • 管理内存映射和共享内存

c) 文件系统

  • 提供 VFS(虚拟文件系统)抽象层
  • 实现各种文件系统操作接口
  • 管理文件系统缓存
  • 处理磁盘存储管理

d) 网络协议栈

  • 实现 TCP/IP 协议族
  • 管理网络设备驱动程序
  • 提供网络过滤功能
  • 处理网络数据包的收发

e) 设备驱动

  • 管理字符设备(如终端、串口)
  • 控制块设备(如硬盘、USB存储)
  • 处理网络设备
  • 提供统一的设备驱动模型

系统特性

a) 多任务支持

  • 实现抢占式调度机制
  • 支持实时任务调度
  • 管理进程优先级
  • 实现系统负载均衡

b) 内存保护

  • 实现地址空间隔离
  • 控制内存访问权限
  • 提供内存屏障机制
  • 处理缺页异常

c) 安全机制

  • 管理用户权限和访问控制
  • 集成 SELinux 安全框架
  • 控制系统调用访问
  • 实现资源访问限制

内核功能

a) 系统调用

  • 提供进程控制接口
  • 实现文件操作功能
  • 支持设备控制操作
  • 维护系统信息

b) 中断处理

  • 处理硬件中断请求
  • 管理软件中断
  • 维护中断向量表
  • 执行中断处理程序

c) 同步机制

  • 提供信号量机制
  • 实现互斥锁
  • 支持自旋锁
  • 提供读写锁机制

扩展特性

a) 模块化支持

  • 支持动态加载内核模块
  • 管理模块间依赖关系
  • 实现设备热插拔
  • 控制模块版本兼容性

b) 调试功能

  • 提供内核调试工具
  • 支持性能分析功能
  • 实现系统日志机制
  • 提供故障诊断能力

c) 虚拟化支持

  • 集成 KVM 虚拟化
  • 提供容器技术支持
  • 支持硬件虚拟化
  • 实现资源隔离机制

Linux 内核是整个操作系统的核心,它直接管理计算机的硬件资源,为上层应用程序提供了稳定、高效的运行环境。通过模块化设计和丰富的功能特性,Linux 内核能够适应各种不同的应用场景,从嵌入式设备到大型服务器都可以很好地支持。同时,其开源特性也使得它能够持续改进和发展,保持技术的先进性和创新性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts散点图

一、类似散点图折线图不展示折线 option {grid: {left: 10,right: 20,top: 35,bottom: 15,containLabel: true},tooltip: {show: true,trigger: item,backgroundColor: "rgba(0,0,0,0)", // 提示框浮层的背景颜色。formatter: function (params) {var html <d…

基于Python的B站视频数据分析与可视化

基于Python的B站视频数据分析与可视化 爬取视频、UP主信息、视频评论 功能列表 关键词搜索指定帖子ID爬取指定UP主的主页爬取支持评论爬取生成评论词云图支持数据存在数据库支持可视化 部分效果演示 关键词搜索爬取 指定UP主的主页爬取 指定为黑马的了 爬取视频的时爬取评论…

基于大模型的Milvus向量数据库的背景与实战应用,计算与索引机制,Python代码实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下基于大模型的Milvus向量数据库的背景与实战应用&#xff0c;计算与索引机制&#xff0c;Python代码实现。本文详细介绍了milvus向量数据库的原理&#xff0c;并通过具体的数据样例和完整的Python代码实现&#xff0…

NodeJS连接MySQL 8.4报错:code: ‘ER_TABLEACCESS_DENIED_ERROR‘

NodeJS连接MySQL 8.4报错&#xff1a;code: ER_TABLEACCESS_DENIED_ERROR { code: ER_TABLEACCESS_DENIED_ERROR, errno: 1142, sqlMessage: "SELECT command denied to user 用户名localhost for table 表名", sqlState: 42000, index: 0, sql: SELECT …

SCR相对标准偏差、氨氮比、截面速度,多平面计算

SCR截面速度、氨氮比等标准及相对标准偏差计算。 程序用来处理fluent通过xyplot导出的数据&#xff0c;导出可以选择多个平面&#xff0c;可计算标准偏差SD、相对标准偏差RSD&#xff0c;平均速度,适用于求解多个平面 # -*- coding: utf-8 -*- """ Created on …

maven本地打jar包依赖

本地工程的pom文件中引入了mysql依赖&#xff0c;但是在maven库中没有拉下来&#xff0c;可以到mysql官网下载jar包&#xff0c;使用maven手动打包到本地仓库中&#xff1a; 官网地址&#xff1a;MySQL :: Download MySQL Connector/J (Archived Versions) 在jar包所在位置的路…

jupyter界面修改成中文教程

在系统变量里面增加一个变量名&#xff1a;LANG 变量值&#xff1a;zh_ CN.UTF8 成功修改成为中文

什么是JavaBean?

什么是JavaBean&#xff1f;—— Java开发中的数据封装利器 在Java开发中&#xff0c;JavaBean 是一个非常实用且常见的设计模式&#xff0c;它用于简洁、高效地封装和传递数据。随着Java应用的广泛使用&#xff0c;JavaBean成为许多开发者不可或缺的工具。在本文中&#xff0c…

【linux】centos7卸载默认的jdk

查看是否已经安装java java -version 查看java文件 rpm -qa | grep java 卸载相关包 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarchrpm -e --nodeps tzdata-java-2020a-1.el7.noarchrpm…

Labview通讯测试耗时

写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个循环…

【面试经典150】day 7

目录 1.买卖股票的最佳时机 II 2.跳跃游戏 3.跳跃游戏 II 4.H 指数 5.O(1) 时间插入、删除和获取随机元素 6.除自身以外数组的乘积 7.加油站 8.分发糖果 1.买卖股票的最佳时机 II class Solution {public int maxProfit(int[] prices) {//和1相比&#xff0c;这个可以一直买…

【WebSocket实战】——创建项目初始架构

这一篇文章主要是为了介绍如何在visual中创建一个项目并服务于我们要做的websockt项目&#xff0c;所以这里如果已经懂得的人&#xff0c;可以直接跳过。 目录 1&#xff09;创建空白解决方案 2&#xff09;创建asp.NET Core项目 3&#xff09;创建winform项目作为客户端1 …

53页 PPT煤炭行业数字化转型规划方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 53页 PPT煤炭行业数字化转型规划方案 通过对煤企高…

乐维网管平台(一):如何精准掌控 IP 管理

业网络已成为支撑业务运转的关键基础设施&#xff0c;而在企业网络管理中&#xff0c;IP 管理至关重要&#xff0c;它就像是网络秩序的守护者&#xff0c;确保网络的高效运行、安全可靠。 一、为什么企业要进行 IP 管理 1. 优化资源分配 IP 地址作为网络中的重要资源&#xf…

驱动-----向内核新加文件

编译的过程是: 1.先复制一个默认的配置到.config(存放make menuconfig的配置结果)文件。 2.make menuconfig来可视化的选择编译的对象。 3.编译与否保存在.config里面 4.然后就makefile,使用.config中的配置 接下来就是加自己的驱动文件,把自己的文件编译加到内核里面…

探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画

在本文中&#xff0c;我将通过构建一个3D翻卡动画来探索Houdini的功能。这将帮助你了解Houdini的核心概念&#xff0c;并引导你完成实际的代码实现。你不仅能够掌握 Houdini 的核心概念&#xff0c;还可以跟随实际的代码实现&#xff0c;逐步完成这个动画效果。 我们将深入探讨…

SpringBoot基于若依项目工时统计成本核算管理源码带教程

是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 这是一…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类&#xff0c;主要包含Java-jdk8以下版本的Date相关使用方法&#xff0c;可以方便的在工作中灵活的应用&#xff0c;在个人工作期间频繁使用这些时间的格…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04&#xff0c;板端系统为ubuntu20.04 的环境下实现的 描述&#xff1a; 官网地址 RKNN软件栈可以帮助用户快速将AI模型部署到Rockc…

【C++】STL容器-string常用接口

1.string类的优势及重要性&#xff08;部分&#xff09; C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&…