开发一个基于MACOS M1/2芯片的Android 12的模拟器
产品需求:MuMu模拟器Pro_率先适配Apple M系列芯片的安卓模拟器
| |
| |
| |
| |
| |
| |
| |
免费试用:产品提供免费试用,让用户在购买前能够体验产品功能。 |
主要特点
-
高性能优化:
- MEmu 支持多种虚拟化技术(如 Intel VT-x 和 AMD-V),可以有效提高性能,减少延迟。
- 支持 2K、4K 分辨率,确保高质量的画面输出。
- 通过对 Android 游戏的专门优化,提升帧率和运行流畅度,尤其适用于高要求的游戏。
-
多实例支持:
- MEmu 支持多实例功能,用户可以同时运行多个模拟器窗口,适合进行多账号登录或管理多个任务。
- 允许在不同实例之间独立配置系统资源。
-
键盘、鼠标和手柄支持:
- 提供完备的输入设备支持,用户可以通过自定义的键盘映射来替代触摸屏操作,提升游戏体验。
- 支持手柄连接,提供类似主机游戏的操作体验。
-
自定义系统配置:
- 用户可以根据硬件配置调整模拟器的 CPU 和 RAM 使用量,确保资源的最佳分配。
- 支持多种 Android 版本和系统设置,方便开发者进行测试和调试。
-
流畅的用户体验:
- 模拟器界面简洁直观,易于安装和使用。
- 内置 Google Play Store,方便用户安装应用和游戏,也可以直接从 APK 文件安装。
-
兼容性强:
- MEmu 支持大多数 Android 游戏和应用,涵盖了从休闲游戏到大型图形游戏的广泛范围。
- 特别优化了像《王者荣耀》、《和平精英》、《原神》等热门游戏。
开发一个基于 macOS M1/M2 芯片(ARM64 架构)的 Android 12 模拟器,需要充分利用 Apple Silicon 的 ARM 指令集,以及 macOS 的高性能特性(如 Metal 图形 API 和 Hypervisor Framework 虚拟化支持)。以下是详细的开发流程和关键技术实现步骤。
通过 macOS Hypervisor Framework 和 Metal API 的高效实现,可以开发一个专为 M1/M2 芯片优化的 Android 12 模拟器。
- 高性能:利用 Apple Silicon 的 ARM64 架构和 GPU 加速。
- 多实例支持:支持同时运行多个模拟器。
- 开发者友好:通过 ADB 提供与 Android 开发工具链的无缝集成。
如果需要更具体的实现细节,可以从单个模块(如图形、虚拟化)开始开发和优化。
开发总体架构
+-------------------------------------------------------------------------+
| 用户界面层(UI) |
| 模拟器管理、APK 安装界面、多实例管理工具 |
+-------------------------------------------------------------------------+
| 输入与渲染接口层 |
| 键盘/鼠标输入、Metal 图形加速渲染、显示优化 |
+-------------------------------------------------------------------------+
| 虚拟化管理层(核心) |
| macOS Hypervisor Framework:管理 CPU、内存、I/O |
+--------------------------------------------------------------------------+
| 安卓系统运行环境 |
| ARM64 Android 12 镜像、Kernel、虚拟硬件模拟 |
+--------------------------------------------------------------------------+
| macOS 硬件支持(CPU/GPU/内存/IO) |
+--------------------------------------------------------------------------+
系统架构解析
-
用户界面层 (UI):
- 功能: 用户界面层是与用户交互的主要界面,负责呈现模拟器的操作界面。
- 内容:
- 模拟器管理:用户可以通过图形界面来启动、停止模拟器实例、切换不同的虚拟设备。
- APK 安装界面:提供一个界面来安装、卸载 APK 文件。用户可以通过拖拽、点击等方式导入 APK 并运行在模拟器中。
- 多实例管理工具:允许用户创建多个虚拟 Android 实例,实现多个应用或多个游戏账号的同时运行。用户可以在不同的实例中独立管理应用、设置等。
-
输入与渲染接口层:
- 功能: 这一层主要负责将用户的输入(如键盘、鼠标、手柄)传递到模拟器内部,并将 Android 系统的输出渲染到 macOS 屏幕上。
- 内容:
- 键盘/鼠标输入:将用户的键盘和鼠标操作映射到 Android 系统上。例如,键盘按键可以替代触摸屏输入,鼠标可以模拟触摸。
- Metal 图形加速渲染:Metal 是 macOS 和 iOS 的高性能图形渲染框架。在模拟器中,Metal 负责加速 Android 系统的图形渲染,提升视觉效果和流畅度。
- 显示优化:此功能确保模拟器在不同的显示设备上以最优的性能运行,特别是在 Retina 屏幕上的图像渲染。
-
虚拟化管理层(核心):
- 功能: 这一层通过虚拟化技术实现 Android 系统的运行环境,它与 macOS 的硬件资源管理紧密集成,确保模拟器高效运行。
- 内容:
- macOS Hypervisor Framework:该框架提供了一个高效的虚拟化接口,允许模拟器管理虚拟机的资源(如 CPU、内存、I/O),使得模拟器能够在 macOS 上运行 Android 操作系统的虚拟实例。Hypervisor Framework 通过直接与硬件交互,提供高性能的虚拟化支持。
- 管理 CPU、内存、I/O:虚拟化管理层控制虚拟机的各项资源分配,并优化虚拟机内的 Android 系统运行。
-
安卓系统运行环境:
- 功能: 在这一层,实际的 Android 系统(包括 ARM64 架构的 Android 12 镜像)会运行在虚拟机中。
- 内容:
- ARM64 Android 12 镜像:模拟器使用的 Android 操作系统镜像,专为 ARM64 架构编译。该镜像包含 Android 12 的所有功能和服务。
- Kernel:Android 系统的 Linux 内核。内核负责硬件资源管理、进程调度等低层次操作。
- 虚拟硬件模拟:模拟器通过虚拟硬件支持模拟 Android 系统的设备,例如虚拟 GPU、虚拟 CPU 等。模拟器通过软件方式仿真 Android 设备的硬件,保证系统在 macOS 上流畅运行。
-
macOS 硬件支持(CPU/GPU/内存/I/O):
- 功能: 在最底层,硬件支持确保模拟器的所有虚拟资源能够得到物理硬件的支持。
- 内容:
- CPU:基于 macOS 的 M1/M2 芯片(ARM 架构)的高性能处理器,提供强大的计算能力以运行模拟器中的虚拟 Android 系统。
- GPU:利用 M1/M2 芯片的 GPU 支持 Metal 图形渲染,确保 Android 系统的图形能够高效处理。
- 内存:macOS 的内存分配用于支持虚拟机运行所需的资源,同时确保模拟器能够高效地运行多个实例。
- I/O:输入/输出资源,如网络、磁盘操作等,由 macOS 提供硬件支持,确保 Android 系统能够正常进行文件存取、网络连接等操作。
1. 技术栈与工具选型
1.1 系统与框架
- macOS 平台:目标运行在 macOS 11 (Big Sur) 及以上版本。
- 虚拟化支持:利用 macOS 原生的 Hypervisor Framework 提供虚拟机支持。
- 图形加速:使用 Metal API 进行 GPU 渲染和加速。
1.2 开发工具
- 开发语言:
- Swift/Objective-C:用于 UI 和 macOS 原生接口的开发。
- C/C++:用于虚拟机核心实现。
- 交叉编译工具:
- 用于编译 Android Kernel 和 System 镜像。
- 推荐工具链:
aarch64-linux-android-gcc
。
- Android 构建工具:
- 下载和定制 Android 12 源码,使用 AOSP。
- 调整和优化系统镜像。
1.3 开源项目与工具
- Android-x86:
- 提供部分 Android 系统的基础架构,可以移植到 ARM64 环境。
- QEMU:
- 提供虚拟化实现,支持 ARM64 架构硬件模拟。
- Anbox 或 Waydroid(借鉴逻辑):
- Linux 上的容器化 Android 模拟工具。
2. 开发流程
2.1 虚拟化层开发
2.1.1 使用 Hypervisor Framework 初始化虚拟机
- 创建虚拟机实例:
- 调用 Hypervisor Framework API 初始化虚拟机环境。
import Hypervisorfunc createVM() -> HVVM? {guard hv_vm_create(HV_VM_DEFAULT) == HV_SUCCESS else {fatalError("Failed to create VM")}return HVVM() }
2. 分配内存与加载镜像:分配 Android 虚拟机的内存,并加载 Android 内核与系统镜像到虚拟机。
-
let memorySize: size_t = 2 * 1024 * 1024 * 1024 // 2GB RAM let memory = mmap(nil, memorySize, PROT_READ | PROT_WRITE,MAP_ANONYMOUS | MAP_PRIVATE, -1, 0)hv_vm_map(memory, 0x80000000, memorySize, HV_MEMORY_READ | HV_MEMORY_WRITE)
2.1.2 配置虚拟硬件
- CPU 配置:
- 启用 ARM64 虚拟化支持。
- 设置寄存器初始化值。
- 网络配置:
- 使用 TAP/TUN 虚拟网卡实现网络连接。
- 存储配置:
- 模拟 eMMC 存储,通过虚拟块设备与 Android 系统对接。
- 调用 Hypervisor Framework API 初始化虚拟机环境。
2.1.3 启动虚拟机
- 实现虚拟机的运行循环,处理 I/O 和中断。
while true {let result = hv_vcpu_run(vcpu)if result != HV_SUCCESS {fatalError("vCPU failed to run")} }
-
2.2 图形渲染与输入
-
2.2.1 Metal 图形加速
- 实现虚拟屏幕的帧缓冲:
- Android 的 SurfaceFlinger 输出帧缓冲区,将其映射到 Metal 的纹理上。
-
func renderFrame(buffer: UnsafeMutablePointer<Void>) {let texture = device.makeTexture(descriptor: textureDescriptor)texture.replace(region: region, mipmapLevel: 0, withBytes: buffer, bytesPerRow: 1920 * 4) }
实现 GPU 加速渲染:
- 使用 Metal 的计算管线处理帧缓冲更新。
-
2.2.2 键盘/鼠标输入映射
- 将 macOS 的键盘和鼠标事件映射为 Android Input 子系统事件。
func handleKeyEvent(event: NSEvent) {// 转换 macOS 按键事件为 Android KeyEvent }
2.3 Android 系统适配
2.3.1 下载和编译 Android 12
- 获取 AOSP 源码
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r1 repo sync
针对 ARM64 架构优化:
- 修改构建参数,确保兼容 macOS 虚拟机环境。
- 编译内核:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- kernel
2.3.2 移植和优化
- Kernel 调整:
- 开启 VirtIO 支持,用于虚拟设备的 I/O 通信。
- 优化内核启动参数(如屏蔽部分物理硬件驱动)。
- 模拟设备支持:
- 实现虚拟显示、虚拟存储、虚拟音频等设备的 HAL 层适配。
2.4 管理与用户界面
2.4.1 多实例管理
- 支持同时运行多个 Android 模拟器实例。
- 使用 macOS 的多窗口机制展示不同实例。
2.4.2 APK 安装与管理
- 提供一个可视化工具用于快速安装 APK:
-
adb install myapp.apk
- 集成 Android Debug Bridge(ADB),用于与模拟器交互。
3. 性能优化
3.1 启动优化
- 缩短内核和系统的加载时间:
- 提前初始化关键设备(如图形、输入)。
- 优化系统服务的启动顺序。
3.2 图形性能优化
- 使用 Metal API 提升 GPU 渲染效率。
- 优化帧缓冲传输路径,减少延迟。
3.3 内存优化
- 为多实例分配合理的内存资源,避免资源竞争。
- 使用 macOS 的内存压缩技术。
4. 测试与调试
4.1 功能测试
- 验证 Android 系统的基本功能(如桌面、文件管理器)。
- 测试网络连接(如访问网页、安装应用)。
4.2 性能测试
- 测试 FPS(帧率)、I/O 性能和内存占用。
- 对比其他 Android 模拟器的性能(如 Genymotion)。
4.3 调试工具
- 使用 macOS 的调试工具(如 Instruments)检测性能瓶颈。
- 集成 Android Logcat 查看系统日志。
竞品分析
1. BlueStacks
概述:
BlueStacks 是最知名的 Android 游戏模拟器之一,它支持 Windows 和 macOS 系统,并提供流畅的 Android 游戏体验。该模拟器的设计目标是让用户能够在大屏幕上畅玩移动端游戏。
特点:
- 支持多个平台:支持 Windows 和 macOS。
- 多实例管理:可以同时运行多个模拟器实例,适用于游戏玩家同时登录多个账号或进行多任务。
- 键盘映射:通过键盘和鼠标控制,提供了自定义映射方案,使得游戏操作更便捷。
- 图形优化:支持 OpenGL 和 DirectX 图形渲染,能够提高图形性能。
- 兼容性强:支持几乎所有的 Android 应用和游戏。
- 内置 App Store:内置 Google Play 和其他应用商店,方便安装应用。
优势:
- 高度兼容:支持广泛的游戏和应用,能够运行大部分 Android 应用,特别是游戏。
- 性能优化:通过内置的优化工具,游戏体验相对流畅,适合高帧率游戏。
- 用户基础大:有庞大的用户群体,社区支持强大。
局限性:
- 资源占用高:BlueStacks 对计算资源的要求较高,尤其是在多实例运行时,可能会导致高内存和CPU使用。
- 广告和推销:部分用户反映内含广告,影响用户体验。
- 稳定性问题:某些复杂游戏或高负载任务下,可能会出现崩溃或卡顿现象。
2. NoxPlayer (雷电模拟器)
概述:
NoxPlayer 是另一款流行的 Android 模拟器,支持 Windows 和 macOS。它被许多 Android 游戏玩家和开发者推荐,特别是在中国市场,它与 BlueStacks 竞争,目标同样是提供优质的 Android 游戏体验。
特点:
- 自定义控制:提供了键盘、鼠标和游戏手柄的高度自定义功能。
- 多实例支持:允许用户同时运行多个实例,方便处理多个账号或进行多人游戏。
- 性能优化:支持虚拟化技术(VT),优化模拟器的运行效率。
- 脚本录制:提供自动化脚本录制,玩家可以为某些重复任务录制宏。
优势:
- 较低的系统资源消耗:NoxPlayer 在资源消耗上比 BlueStacks 要低,适合配置较低的 PC。
- 稳定性好:经过多次版本更新,稳定性和兼容性得到了较好的提升。
- 支持手柄操作:游戏玩家可以连接手柄,享受更接近原生游戏的体验。
局限性:
- 界面复杂:NoxPlayer 的设置界面较为复杂,新手用户需要一定时间来上手。
- 广告问题:如同 BlueStacks,NoxPlayer 也会在某些版本中出现广告。
3. LDPlayer
概述:
LDPlayer 是一个专注于游戏优化的 Android 模拟器,主要面向游戏玩家,尤其是那些玩大型或高帧率游戏的玩家。LDPlayer 以其稳定性和高性能在市场中占有一席之地。
特点:
- 专为游戏优化:通过优化 Android 系统的各个层次,提供流畅的游戏体验。
- 高帧率支持:支持 60FPS、120FPS 甚至更高帧率的游戏体验,适合需要高帧数的游戏。
- 多实例支持:与 BlueStacks 和 NoxPlayer 类似,支持多个实例同时运行。
- 键盘映射与宏录制:提供了丰富的键盘映射和自动化脚本功能,方便玩家定制操作。
优势:
- 性能表现优越:相比于 BlueStacks 和 NoxPlayer,LDPlayer 在性能方面通常有更优的表现,特别是在高帧率游戏中。
- 优化策略明确:针对游戏优化,提供更平衡的性能和流畅度。
- 更新频繁:开发者经常发布更新,增强功能并修复漏洞。
局限性:
- 不支持 macOS:目前仅支持 Windows 系统,这对苹果用户不友好。
- 配置较高的需求:虽然性能优秀,但较高的系统需求可能会对低配置电脑造成一定压力。
4. Gameloop (前身为 Tencent Gaming Buddy)
概述:
Gameloop 是由腾讯推出的 Android 游戏模拟器,最初是为了支持《绝地求生:刺激战场》和其他腾讯游戏而开发的。如今它支持多款热门 Android 游戏,成为游戏玩家的重要工具。
特点:
- 专为腾讯游戏优化:针对腾讯的手机游戏(如《和平精英》、《王者荣耀》)进行了优化。
- 游戏内优化:内建游戏优化模块,减少游戏卡顿,提升游戏流畅度。
- 自定义键位映射:为玩家提供自定义的键位设置,支持键盘、鼠标和手柄操作。
- 稳定性强:相较于其他模拟器,Gameloop 在高负载游戏下表现更为稳定。
优势:
- 对腾讯游戏优化特别好:由于腾讯出品,模拟器对其自家的游戏兼容性和优化做得很好。
- 支持高质量图形和流畅的游戏体验:即使在较低配置的 PC 上,Gameloop 也能流畅运行。
- 简单易用:安装和设置过程简洁,界面友好,适合新手用户。
局限性:
- 只能运行腾讯相关游戏:尽管后来支持了其他游戏,但其主要面向的是腾讯游戏。
- 广告推送:在部分版本中,存在较多广告干扰。
5. MEmu Play
概述:
MEmu Play 是一个 Android 模拟器,专注于提供高效、稳定的 Android 游戏体验。它支持 Windows 操作系统,并允许用户通过虚拟化技术来提升游戏性能。
特点:
- 多实例管理:支持多个实例的同时运行。
- 高帧率支持:支持 2K 或 4K 游戏分辨率,可以为高要求的游戏提供优质画质。
- 键盘、鼠标和手柄支持:提供便捷的映射和控制支持。
- 性能调优:支持性能调优,用户可以根据系统配置自定义模拟器资源。
优势:
- 高兼容性:MEmu Play 在大部分 Android 游戏和应用上都表现良好,兼容性强。
- 轻量化:相比于 BlueStacks,MEmu Play 对计算资源的占用较低。
- 界面友好:简单直观的用户界面,易于操作。
局限性:
- 不支持 macOS:目前仅支持 Windows。
- 游戏更新滞后:一些新发布的游戏可能需要时间进行适配。
从市场分析来看,2022年中国游戏模拟器市场规模达到了501.50亿元,其中竞技类游戏用模拟器占据了国内主要市场,收入约270.66亿元,占整个游戏模拟器市场的53.97%。角色扮演类游戏占比第二,收入约104.26亿元,占整个游戏模拟器市场的20.79%。中国主要玩家包括腾讯手游助手、MuMu模拟器、雷电模拟器、夜神模拟器、逍遥模拟器和蓝叠模拟器等,2022年top5企业份额占比约为89.88%。
综上所述,MuMu模拟器Pro的主要竞争对手包括网易MuMu模拟器、夜神模拟器、BlueStacks、雷电模拟器和逍遥模拟器等。这些竞品各有特点,MuMu模拟器Pro需要在性能、用户体验、兼容性等方面进行优化和提升,以保持市场竞争力。
相关文章:
开发一个基于MACOS M1/2芯片的Android 12的模拟器
产品需求:MuMu模拟器Pro_率先适配Apple M系列芯片的安卓模拟器 苹果M芯片专属:产品专为苹果M系列芯片设计,意味着它需要能够充分利用M系列芯片的性能优势。 安卓模拟器:产品是一个安卓模拟器,允许用户在Mac设备上运行…...
Flink 中 JDBC Connector 使用详解
1. 背景 在实时计算或离线任务中,往往需要与关系型数据库交互,例如 MySQL、PostgreSQL 等。Apache Flink 提供了 JDBC Connector,可以方便地将流式数据写入或读取数据库。 本文将介绍 Flink JDBC Connector 的基础用法、配置方法以及注意事…...
【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)
🗺️博客地图 📍1、报错发现 📍2、原因分析 📍3、解决办法 📍4、测试结果 1、报错发现 装好了CentOS操作系统,使用ssh远程登陆CentOS,出现如下告警信息: bash: 警告:setlocale…...
未来已来?AI技术革新改变我们的生活
在21世纪的今天,人工智能(AI)不再是一个遥远的概念,而是逐渐渗透到我们生活的方方面面。从智能家居到自动驾驶汽车,从个性化推荐系统到医疗诊断辅助,AI技术正在以惊人的速度发展,并深刻地影响着…...
【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、进程创建 1.fork函数 📚高层封装特性 📚fork返回值 2.写时拷…...
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…...
【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门
在数字图像处理中,形态学操作是一种常用的技术,用于提取图像中的特定形状或特征。其中,腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中…...
道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
道可云元宇宙每日简报(2024年11月27日)讯,今日元宇宙新鲜事有: 工信部等十二部门印发《5G规模化应用“扬帆”行动升级方案》 11月25日,工业和信息化部等十二部门印发《5G规模化应用“扬帆”行动升级方案》。《方案》…...
若依框架部署在网站一个子目录下(/admin)问题(
部署在子目录下首先修改vue.config.js文件: 问题一:登陆之后跳转到了404页面问题,解决办法如下: src/router/index.js 把404页面直接变成了首页(大佬有啥优雅的解决办法求告知) 问题二:退出登录…...
【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)
插件还是老朋友。 节点的content type要打对。 (参照表:MIME 类型(MIME Type)完整对照表 - 免费在线工具) 结果展示:...
对比C++,Rust在内存安全上做的努力
简介 近年来,越来越多的组织表示,如果新项目在技术选型时需要使用系统级开发语言,那么不要选择使用C/C这种内存不安全的系统语言,推荐使用内存安全的Rust作为替代。 谷歌也声称,Android 的安全漏洞,从 20…...
如何利用 Qt 的模块化架构组织大型项目
目录 1. 大型项目的架构设计 1.1 分层架构 1.2 事件驱动与异步架构 2. 模块划分与职责分离 2.1 功能模块划分 2.2 模块之间的依赖管理 3. 跨平台开发与模块复用 在大型软件项目中,随着代码量的增加和功能的扩展,项目的复杂度会显著提升。没有良好…...
探索Python词云库WordCloud的奥秘
文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…...
MySQL根据idb文件恢复数据
首先得有对应表的idb文件以及建表语句 1.首先在新数据库建表 CREATE TABLE sys_menu (id bigint(20) NOT NULL,parent_id bigint(20) NULL DEFAULT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,type int(11) NULL DEFAULT …...
hadoop-mapreduce词频统计
一、Map Reduce主要阶段 二、词频统计示例 0.MapReduce 词频统计(Word Count)示例图 1. Input 阶段(输入阶段) 输入数据是一段文本,如下: Hadoop is a big data framework. Hadoop can store vast data. Hadoop processes big …...
精心修炼Java并发编程(JUC)-volatile与synchronized关键字
volatile volatile 是 JVM 提供的 最轻量级的同步机制,中文意思是不稳定的,易变的,用 volatile 修饰变量是为了保证变量在多线程中的可见性,它表达的含义是:告诉编译器,对这个变量的读写,需要基…...
【ROS2】ROS2 与 ROS1 编码方式对比(Python实现)
目录 一、初始化和关闭节点二、发布者三、订阅者四、服务端五、客户端六、参数管理七、日志记录八、生命周期管理 ROS2 在 Python 编程中引入了一些新的概念和 API,这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制&a…...
ElasticSearch的下载和基本使用(通过apifox)
1.概述 一个开源的高扩展的分布式全文检索引擎,近乎实时的存储,检索数据 2.安装路径 Elasticsearch 7.8.0 | Elastic 安装后启动elasticsearch-7.8.0\bin里的elasticsearch.bat文件, 启动后就可以访问本地的es库http://localhost:9200/ …...
城市轨道交通运营控制指挥中心设计方案
为某城市轨道交通运营控制指挥中心(OCC)的设计提供方案时,我们需要考虑到多个方面的需求,包括系统架构、设备选择、功能实现、数据流与监控、通信管理等。以下是一个综合性的设计方案,涉及系统硬件和软件的选择、布局规划、安全性等方面,以确保指挥中心的高效运作、实时监…...
多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
一、河马优化算法 河马优化算法(Hippopotamus optimization algorithm,HO)由Amiri等人于2024年提出的一种模拟自然界中河马觅食行为的新型群体智能优化算法。该算法由Mohammad Hussein Amiri等人于2024年2月发表在Nature旗下子刊《Scientifi…...
线程与进程的个人理解
进程(Process): 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特…...
vscode的项目给gitlab上传
目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客) 三.Windows电脑安…...
企业微信定位打卡
废话少说:定位修改软件链接奉上 一、定位打卡原理 GPS定位:企业微信可以利用手机的GPS功能进行定位,这是一种基于卫星的定位技术,能够提供相对精确的位置信息,通常精确度在20米以内。这种方式耗电较大,且在…...
libaom 源码分析:码率控制介绍
码率控制 命令行码率控制选项:可以看到码率控制包括丢帧、resize、超分、码控模式、目标码率、目标上限下限(类似 x264、x265 中的 VBV)、码控偏置、GOP 码率等。Rate Control Options:--drop-frame=<arg> Temporal resampling threshold (buf %)--resize-mo…...
RK3568平台开发系列讲解(DMA篇)DMA engine使用
🚀返回专栏总目录 文章目录 一、申请DMA channel二、配置DMA channel的参数三、获取传输描述(tx descriptor)四、启动传输沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DMA子系统下有一个帮助测试的测试驱动(drivers/dma/dmatest.c), 从这个测试驱动入手我们了解…...
C++中的函数对象
C 中函数对象的定义和特点 定义:函数对象(Function Object)也叫仿函数(Functor),是一个类,这个类重载了函数调用运算符()。当创建这个类的对象后,可以像使用函数一样使用这个对象&am…...
Linux指标之平均负载(The Average load of Linux Metrics)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
盛最多水的容器
本节将数组与坐标轴共同组成一个容器,通过改变容器的两个端点使容器装的水最多,容器两个端点不断移动可以通过左右指针算法解决. 问题描述: 给定两个非负整数k1,k2...km每个数代表坐标中的一个点(i,ki).在坐标内绘制m条垂线,垂直线i的两个端点分别为(i,k1)和(i,0)找出其中的两…...
光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式…...
java全栈day10--后端Web基础(基础知识)
引言:只要能通过浏览器访问的网站全是B/S架构,其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址:Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程,建议…...
网站建设维护单选题/福清市百度seo
在4月20日的阿里云栖开发者沙龙PHP技术专场上,云智慧Technical VP高驰涛为大家介绍了微服务的前世今生,分享了微服务架构实践中所面对的诸多挑战以及相应的应对策略。本次直播视频精彩回顾,戳这里!直播回顾:https://yq…...
住房和城乡建设部课题网站/企业网站设计规范
引入新功能之后,用户可以在VR空间打开手机Android App,比如游戏、工具和App。这些App会漂浮在虚拟大屏幕上,可以用标准的Daydream指点控制器控制,这样一来,开发者如果制作App,没有必要开发新UI,…...
电子商务网站建设需求概述/seo线下培训班
原始版本的大数相乘地址:http://www.cnblogs.com/life91/p/3389890.html 在原来的版本中,整数相乘与小数相乘是分开的。其中,在计算小数时,需要将数值与小数点进行分割。在本次版本中,整数和小数在一次计算中进行处理。…...
济南服务器托管/优化方案官方网站
对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列。例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列。那么,对3行2列的二维数组可以初始化如下࿱…...
网站设计建设简历/怎么接游戏推广的业务
本文实例讲述了java删除指定目录下所有空文件夹的方法。分享给大家供大家参考,具体如下:package com.func;import java.io.File;import java.util.ArrayList;import java.util.List;/*** 删除指定目录下的所有空文件夹** author zdw**/public class File…...
浙江省建设厅官方网站信用平台/2019年度最火关键词
开始菜单项的顺序保存在以下注册表中: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder 这个项下面一般有:Favorites、Start Menu、Start Menu2这3个子项,分别对应的是:收藏夹、经典开始菜单、…...