UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍
PPT下载地址:https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e=2h7RaL
在2025年4月12日的Unity User Group杭州站中,Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新Feature介绍》。
今天带来关于我们在OpenHarmony平台上的一些更新,我会着重介绍团结引擎从1.4.X到1.5.0,在OpenHarmony上做了哪些东西。
OpenHarmony平台基本介绍
首先用一张图简单地表达OpenHarmony、HarmonyOS以及HarmonyOS NEXT的关系。
其实从很早期开始,OpenHarmonyOS就已经是基于OpenHarmony系统内核打造的,当然它本身还与一部分AOSP(安卓)捆绑在一起,这是以前的鸿蒙系统。
OpenHarmony是鸿蒙系统的底座和内核,在新的HarmonyOS NEXT版本里把安卓部分剔除了。我们从2023年就已经开始在适配OpenHarmony系统,到今天为止已经经过了一年多的开发。我们基本上把系统的能力已经全面适配,而且也一直持续地跟进OpenHarmony SDK的适配。
同时,我们在无缝迁移方面做了很多努力,希望能够让很多原有项目快速触达到这个新平台。
我们在OpenHarmony平台上支持直接读取安卓平台的AssetBundle,同时在切换平台时,我们的OpenHarmony平台会无缝将贴图压缩格式读取过来。所以大家如果已经有针对安卓和iOS的成熟项目,现在要切到OpenHarmony的话,只要打开团结引擎这个项目,再切换一下平台去构建,就能直接迁移到这个平台上了。而且,我们还提供了特有的Package的支持。
目前,我们已经有30多款多个品类的游戏移植到了开源鸿蒙平台。不管是MMO、RPG,还是三国杀、捕鱼、跑酷这类轻量级、中重度,或大型游戏,都能够通过团结引擎无缝迁移到开源鸿蒙平台。
因为这一平台的发展速度实在太快了,它的SDK更新迭代也非常快,所以开发者通常都会问我,到底选用哪个团结引擎的版本,或者选用哪个SDK的版本,能够更好地适配这个平台?
我简单地通过这一张图展示了我们整个SDK的对应关系。
从1.0.0开始,我们每一个大版本都在更新SDK。1.5.0版本支持最新的SDK 5.0.2,也就是API 14版本。如果你准备进入或者马上要有项目进入这个平台,推荐大家都选用我们最新的版本,因为这适配了最新的SDK。
从1.4.X到1.5.0
在SDK 5.0之前的版本,可以像安卓一样直接点build得到一个API,并且装在任意一台手机上。但在最新的SDK中,在没有任何证书的情况下,没有办法直接把它build and run到这个设备上。
这就意味着在OpenHarmony平台上,整体发展趋势会越来越趋向于iOS,系统的开放程度可能会与苹果更相近。在这次SDK版本中,大家如果想要把构建后的应用装到手机上,必须要先申请证书,在Editor里我们也提供了这样的配置项,与安卓基本上是一样的keystore的配置界面,大家把从网站上申请的证书配置到这个界面里,就可以直接一键build出安装包,然后装到你的设备上。
在新SDK版本中还有很多变更,一个最重要的变更是它会要求更多地使用ETS。
之前在OpenHarmony上主要的胶水代码语言与安卓不一样,安卓是Java,但在OpenHarmony上是TypeScript(TS)。TS是一种动态语言,它为了提升性能和安全性推出了ETS,ETS做的是把一些动态语言的特性进行了改进,例如把它改成强类型,把很多动态语言本来很灵活的特性固化,通过编译器的优化达到更好的性能。
所以在新的SDK版本里,OpenHarmony会要求胶水层的代码尽可能全部用ETS。上图左边是之前老的适配平台的胶水代码,都是“.ts”后缀,但新的版本里已经从“.ts”后缀全部切换成“.ets”后缀,更加安全,运行效率更加高。
另外还有一点是,OpenHarmony SDK 5.0.2的SDK本身可能有一些问题,导致现在无法直接Build And Run。这个问题我们也已经反馈给厂商,他们会在后续版本快速修复。同时,大家可以在这个新版本里使用Commnadline Tools里的SDK来避免这个问题。
这都是SDK5.0.2之后变更的影响,接下来我们介绍团结引擎在这些部分的主要更新。
第一,贴图压缩格式继承。在老项目迁移时有很多问题,例如从安卓平台切换到OpenHarmony平台,原来在安卓平台里所有的setting到OpenHarmony里都变成了default setting。
这不利于我们将一个老的安卓应用快速迁移到新平台,所以我们做了改进,在导入这些老项目的时候,当你切换OpenHarmony平台,它会自动把安卓平台这些texture settings全部写到OpenHarmony平台上。
其次,在这个版本里我们还做了很多系统接口的调用优化。因为在OpenHarmony早期版本里,很多系统接口并没有在Native层开放,更多在TS层。跨语言调用一直以来都是一个性能开销的大头,在后面的这些版本里,OpenHarmony的SDK开放了更多Native接口,所以我们的引擎可以直接在C++层直接调用到它的Native接口。
这里列举了其中的一些例子,例如DisplayInfo、Sensor、DeviceInfo等,频繁地获取一些与设备、系统交互的接口,然后从TS接口转到原生接口,能够大大地提升整体的调用效率。
最后,我们为了方便大家在打包项目的时候进行配置或者自定义,我们在这个版本中推出自定义支持Ability文件,这个ability就相当于安卓层面的activity。
以前如果你要去改一个UnityPlayerActivity,可能只能export project到安卓studio里改。但现在如果你已经有一个自己写好的UnityPlayerActivity或者团结PlayerActivity,可以直接通过我们的Editor工具进行替换。
我们也支持了Module.json5,Module.json5也是OpenHarmony的一个配置文件,类似于安卓的Manifest,但是它没有配置文件与配置文件中的合并功能,我们在Editor里把这部分功能进行了完善。大家可以通过我们的Editor方便地自定义这些平台相关模板。
最后,我们在这个版本里也做了一个原来没有的功能,就是支持命令行的传参。
在这个版本里,我们可以通过hdc的命令,去hdc shell,然后aa start。这个命令行与安卓有点像,但hdc就像安卓的adb,命令其实都一样。如果通过他们的DevEco Studio,即IDE工具,大家可以通过配置面板将这个启动的命令行参数配置进去。
另外,在这个版本里,我们还针对VSync做了优化。
在早期的系统版里,VSync的支持比较弱,而引擎帧与帧之间的计算基本上还是依赖引擎,根据系统获取的时间进行帧之间的时间运算。在新系统版本里,他们开放了更多VSync接口回调,我们把这一部分系统能力对接到了引擎里。所以我们能够非常好地对齐系统的VSync信号。
这样游戏在OpenHarmony平台上帧率会更加平滑。从这张图可以看到,30帧的时候,基本上每隔一个VSync就可以对应一个引擎的上频。
此外,在之前的版本里,我们的游戏最多支持60帧,但是在1.5.0的版本上已经支持高刷了。
我们在新的版本里,可以支持高达90FPS或120FPS。开启自定义绘制帧率很简单,只要关闭垂直同步,设置targetFrameRate为90或者120,就能达到高刷帧率。如果targetFrameRate<0的话,它将使用跟安卓一样的设置,默认是30FPS。
除此以外,我们在OpenHarmony平台上对new input system进行了更加完善的支持,补全了之前部分缺失逻辑,特别在平板或者其他设备的输入上。
最后,我们还有一个非常重要的更新,在OpenHarmony平台上支持像安卓一样的UAAL的模式,也就是Used As A Library。
这对于所有的应用开发者都是非常重要的功能,意味着我们可以很容易把一个3D引擎通过模块化放到一些原生的应用上。
在OpenHarmony底下左边有一个开发的tad视图,右边是一个编译后的包视图。我们在早期适配时,更多是直接粗暴地把我们所有代码塞到一个Entry Module里,它基本上和所有的应用业务或逻辑都是混淆在一起的,这不利于原生应用的直接接入。
所以在1.5.0版本里,我们把这一块单独全部拎出来做了一个新的Module,叫TuanjieLib。
可以看到左边是原有的结构,它基本上在entry module下,把所有东西都塞在里面。但现在我们除了entry module外,还有一个TuanjieLib module。有了这个Module,我们就可以直接把这一整块Module拷到其他一些原生的3D应用里面去。
而且,我们已经把所有的控件都做了封装和改进。对于所有的开发者来讲,只需要把Module拷到原生的ability project里,并且在这个配置文件里把这个依赖加上,就可以在页面index的ETS上直接把TuanjiePlayer View加上。这样你就完成了一个3D player的接入,就能够让原生应用得到一个3D的能力。
最后,我们对ETS胶水代码做了大量的重构,提供了更加便利的Module注册方式。我们也有了更加统一的C#/ETS的跨语言调用。特别是我们在做ETS时,需要关注线程间的调用能力,因为我们的引擎是跑在另一条线程上的,它本身的UI又在一条UI线程上。从UI线程到我们引擎的主线程,中间会有非常多线程间的调用能力。
我们提供了一个叫POST_MESSAGE_TO_HOST和POST_MESSAGE_TO_WORKER。POST_MESSAGE_TO_HOST就是send message to host,host就是我们的UI或者main线程,指应用本身的主线程;send message to worker,这个worker就是我们的tuanjie main的线程。
接下来再介绍一下OpenHarmony专有的两个Package。
第一个Package叫OpenHarmony SDK Kit Package,早期的SDK Kit的Package基本上只涵盖登录和游戏服务,涵盖了API和推送。在最新版本的SDK Kit Package里,我们把包括消息通知、ADS的能力都完整地放到了SDK Kit Package里。所以大家如果想到这个平台,但是TS、ETS对大家来讲有一定的学习成本,可以下载这个Package,里面有我们封装好的一系列C# API,也有一些内置的Demo Scene,可以通过这个Demo Scene快速完成这个平台SDK的接入工作。
下面我们可以通过一个视频来看一下,这是真机实录的视频。
看到的这些demo和样例,都可以通过SDK Kit Package来提供,所以把SDK Kit Package装到你的项目里,就可以把这些Demo Scene build出来,看到里面怎么样使用C#接口,完成平台的账号登录、内购、广告、推送、消息提示等等能力。
另外一个专有的Package叫OpenHarmony Hilog Package。这个Package更多是针对开发者的,能够通过Editor直连真机,在真机里面实时看log。
另外,如果出现闪退,我们可以提供一个工具帮你还原堆栈,同时还支持显示实时内存占用,还可以抓取ArkUI的Dump。这个工具可以把整个应用UI的Layout都Dump下来,然后看到里面的Layout层级到底是什么样的。
白色的都是我们最早的版本提供的能力,在新的版本里面,我们提供了Native Performance Tools的支持。我们把一系列这个平台特有的真机profiling工具都集成在Editor里,可以拿到真实CPU的用量、电池的用量、GPU的用量等数据。
下面我们通过两个视频,来看一下OpenHarmony Hilog Package能做的事情。
第一个是直接连接真机,查看log,还支持筛选Bug level,支持自定义查询。这里还有Stacktrace Utility,可以快速把一个闪退的堆栈进行还原,最后还有一个实时内存占用的工具,查看这一部分的内存状况,而这些都是基于真机获取的一些信息。
最后,这里面是dump出来的ArkUI的一个Dump,可以看到整个layout到底是怎么样的。
下面一个视频,展示了Hilog Package里面关于Native Performance的一些功能,它也需要连接真机,可以拿到Device name、电量、温度、网络等信息。同时还新增了一个Performance界面,可以将GPU Usage、GPU Frequency这些信息都抓取到,这意味着大家不用使用原生工具,就可以获得同样的体验,而这些东西都在这个Package里可以使用。包括一些特定时刻的详细数据,都能够很详细地展开。大家只需要在Package Manager里面搜索Hilog,即可下载体验。
你们的声音都很重要
对于OpenHarmony这个新平台而言,或者说对于团结引擎而言,你们的声音都非常重要,我们非常需要听到你们的反馈。有了开发者的反馈,我们才能把我们的引擎、我们的工具做得更好。
所以这里我也把反馈的渠道告诉大家。
首先在官方社区里可以直接提问,上图有网址链接,只要贴上OpenHarmony的标签,我本人都会亲自去看。
https://developer.unity.cn/plate/tuanjie-engine
另外,在团结的Editor里面选择Help - Report a Bug也可以进行反馈。通过Report a Bug,可以把大家遇到的任何关于团结引擎的问题提给我们,我们会有相关的Q&A同学尝试复现Bug。一旦能复现,我们就会在未来版本上快速把这些BUG修复掉。
我今天关于OpenHarmony平台的分享就到这里,谢谢大家!
相关文章:
UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍
PPT下载地址:https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中,Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新…...
OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试
本文介绍RISC-V架构海思Hi3861开发板,通过Linux开发环境运行OpenHarmony轻量化系统,下载测试网络例程的过程与步骤。 OpenHarmony操作系统分类 轻量系统(mini system) 面向MCU类处理器例如Arm Cortex-M、RISC-V 32位的设备&#x…...
k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
背景 针对一个服务如下NetworkPolicy, 表示只有n9e命名空间的POD才能访问 k8s-man 服务 kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata:name: k8s-mannamespace: n9elabels:app: k8s-manversion: v1 spec:podSelector:matchLabels:app: k8s-manversion: v1…...
2025 AI如何重构网络安全产品
威胁检测与防御 利用机器学习算法提升威胁检测能力 :AI能够分析大量的网络数据和行为模式,通过机器学习算法自动识别出潜在的威胁和异常行为。例如,Darktrace的Cyber AI Analyst基于真实SOC数据训练,可推进威胁调查,提…...
ARM杂谈——临界段保护恢复的中断状态可靠吗
0 前言 在MCU中,临界段保护是指在多任务或多线程环境中,确保某段代码在执行时不会被其他任务或中断打断,从而避免数据竞争或不一致的问题。临界段保护通常用于共享资源的访问,如全局变量、硬件寄存器等。 我们有一些常用的临界段…...
数据库MySQL学习——day10()
文章目录 1. 什么是子查询(Subquery)?2. 创建样例表:商品表 products3. 插入示例数据4. 子查询的三种常用位置4.1 子查询在 WHERE 子句中(最常见)4.2 子查询在 FROM 子句中(可以当成临时表&…...
YashanDB V23.4 LTS 正式发布|两地三中心、库级闪回重磅特性上线,生产级可用性再升级
近日,YashanDB V23.4 LTS(Long-Term Support Release)版本正式发布,新版本深度契合关键行业数字化转型对数据库“业务永续、风险可控”的核心诉求,打造两地三中心秒级容灾、库级闪回秒级恢复、MySQL全面兼容等重磅特性…...
AI规则引擎:解锁SQL数据分析新姿势
一、AI 规则引擎与 SQL 的奇妙邂逅 在当今数字化时代,数据如同石油,是企业发展和创新的核心驱动力。而如何从海量的数据中提取有价值的信息,成为了企业面临的关键挑战。人工智能规则引擎和 SQL,作为数据分析领域的两大重要工具&a…...
Kotlin Multiplatform与Flutter、Compose共存:构建高效跨平台应用的完整指南
简介 在移动开发领域,跨平台技术正在重塑开发范式。Kotlin Multiplatform (KMP) 作为 JetBrains 推出的多平台开发框架,结合了 Kotlin 的简洁性与原生性能优势,使开发者能够高效共享业务逻辑。而 Flutter 凭借其高性能渲染引擎(Skia)和丰富的组件库,成为混合开发的首选方…...
FunASR:语音识别与合成一体化,企业级开发实战详解
简介 FunASR是由阿里巴巴达摩院开源的高性能语音识别工具包,它不仅提供语音识别(ASR)功能,还集成了语音端点检测(VAD)、标点恢复、说话人分离等工业级模块,形成了完整的语音处理解决方案。 FunASR支持离线和实时两种模式,能够高效处理多语言音频,并提供高精度的识别结果。…...
【Spark分析HBase数据】Spark读取并分析HBase数据
Spark读取并分析HBase数据 一、摘要二、实现过程三、小结 一、摘要 Apache Spark 是一个快速、通用的大数据处理引擎,提供了丰富的 API 用于数据处理和分析。HBase 是一个分布式、可扩展的 NoSQL 数据库,适合存储海量结构化和半结构化数据。Spark 与 HB…...
探索直播美颜SDK的核心算法:图像增强与AI美颜技术详解
一款优秀的直播美颜SDK不仅能让主播拥有完美的在线形象,还能帮助平台吸引更多用户。然而,这背后的关键在于其核心算法——从基本的图像增强到前沿的AI美颜技术,每一步都至关重要。今天,我们就来深入探讨这些技术背后的秘密。 一、…...
全新linux网络配置工具nmcli:
1.Linux全新网络管理工具nmcli的使用 ,网络管理命令行工具nmcli 在nmcli中有2个命令最为常用: (1)nmcli connection 表示连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c (2)nmcl…...
LeetCode100.5 盛最多水的容器
对于这题,首先明确的是:盛水的体积取决于两垂线间的距离与两垂线中最短的长度。 那么使用双指针,在每次移动时,只移动其中最短的那个,因为若移动最长的那个,体积不会变大。 class Solution { public:int …...
AI开发者的算力革命:GpuGeek平台全景实战指南(大模型训练/推理/微调全解析)
目录 背景一、AI工业化时代的算力困局与破局之道1.1 中小企业AI落地的三大障碍1.2 GpuGeek的破局创新1.3 核心价值 二、GpuGeek技术全景剖析2.1 核心架构设计 三、核心优势详解3.1 优势1:工业级显卡舰队3.2 优势2:开箱即用生态3.2.1 预置镜像库…...
Java元注解
Java 元注解(Meta-Annotations) 元注解是指用于注解其他注解的注解,Java 提供了5个内置的元注解: 1. Target 指定注解可以应用的目标元素类型。 Target(ElementType.TYPE) // 只能用于类、接口或枚举 public interface MyAnno…...
FPGA:Xilinx Kintex 7实现DDR3 SDRAM读写
在Xilinx Kintex 7系列FPGA上实现对DDR3 SDRAM的读写,主要依赖Xilinx提供的Memory Interface Generator (MIG) IP核,结合Vivado设计流程。以下是详细步骤和关键点: 1. 准备工作 硬件需求: Kintex-7 FPGA(如XC7K325T&…...
深度剖析 GpuGeek 实例:GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察
深度剖析 GpuGeek 实例:GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察 前言 GpuGeek专注于人工智能与高性能计算领域的云计算平台,致力于为开发者、科研机构及企业提供灵活、高效、低成本的GPU算力资源。平台通过整合全球分布式数据中心资源&#…...
散列表(1)
散列表概念 键通过散列函数后转换为数组的下标,在对应的下标位置上存储相应的信息 键------>散列函数-------->数组下标------->存储信息 散列函数 散列函数就是一个函数,能够将给定的key转换为特定散列值。hashValuehash(key&…...
E. 23 Kingdom【Codeforces Round 1024 (Div. 2)】
E. 23 Kingdom 思路: 这道题的核心在于如何构造一个数组b,使得每个数的最远两个出现位置之差总和最大。通过分析,我们发现要最大化总美丽值,应尽可能让每个数的首次出现尽可能靠左、末次出现尽可能靠右。这样每个数的距离贡献j-i…...
TTS-Web-Vue系列:Vue3实现侧边栏与顶部导航的双向联动
🔄 本文是TTS-Web-Vue系列的最新文章,重点介绍如何在Vue3项目中实现侧边栏与顶部导航栏的双向联动功能。通过Vue3的响应式系统和组件通信机制,我们构建了一套高效、流畅的导航联动方案,让用户在不同入口都能获得一致的导航体验。 …...
【C++】模板(初阶)
一、模板与泛型编程 我们先来思考一下:如何实现一个通用的交换函数? void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right te…...
大模型微调实战:基于GpuGeek平台的低成本高效训练方案
文章目录 引言一、GpuGeek平台使用入门1. 注册与账号设置2. 控制台功能概览3. 快速创建GPU实例3. 预置镜像与自定义环境 二、GpuGeek平台核心优势解析1. 显卡资源充足:多卡并行加速训练2. 镜像超多:开箱即用的开发环境3. 计费灵活:按需付费降…...
黑马k8s(六)
1.Deployment(Pod控制器) Selector runnginx 标签选择:会找pod打的标签 执行删除之后,pod也会删除,Terminating正在删除 如果想要访问其中的一个pod借助:IP地址端口号访问 假设在某一个瞬间,…...
WEB安全--Java安全--CC1利用链
一、梳理基本逻辑 WEB后端JVM通过readObject()的反序列化方式接收用户输入的数据 用户编写恶意代码并将其序列化为原始数据流 WEB后端JVM接收到序列化后恶意的原始数据并进行反序列化 当调用: ObjectInputStream.readObject() JVM 内部逻辑: → 反…...
16S18S_OTU分析(3)
OTU的定义 OTU:操作分类单元是在系统发生学研究或群体遗传学研究中,为了便于进行分析,人为给某一个分类单元(如品系、种、属、分组等)设置的同一标志。目的:OTU用于将相似的序列归为一类,以便于…...
嵌入式开发学习日志(数据结构--单链表)Day20
一、gdb调试 (一)一般调试步骤与命令 1、gcc -g (调试版本,内含调试信息与源码;eg:gcc -g main.c linklist.c) 2、gdb a.out(调试可执行文件,eg:gdb …...
nginx报错-[emerg] getpwnam(“nginx“) failed in /etc/nginx/nginx.conf:2
报错 - nginx: [emerg] getpwnam(“nginx”) failed in /etc/nginx/nginx.conf:2 问题描述: nginx: [emerg] getpwnam(“nginx”) failed in /etc/nginx/nginx.conf:2 问题原因: 是因为配制文件中使用的启动账户在系统中并没有找到 解决方法&#x…...
Linux系统编程——fork函数的使用方法
在 Linux 系统编程 中,fork() 函数是创建新进程的关键系统调用。fork() 在当前进程(父进程)中创建一个几乎完全相同的子进程。子进程和父进程从调用 fork() 的位置继续执行,但它们是两个独立的进程,每个进程都有自己的…...
Linux进程信号处理(26)
文章目录 前言一、信号的处理时机处理情况“合适”的时机 二、用户态与内核态概念重谈进程地址空间信号的处理过程 三、信号的捕捉内核如何实现信号的捕捉?sigaction 四、信号部分小结五、可重入函数六、volatile七、SIGCHLD 信号总结 前言 这篇就是我们关于信号的最…...
黑马Java跟学.最新AI+若依框架项目开发(一)
黑马Java跟学.最新AI若依框架项目开发.一 前瞻为什么学习若依?AI局限性若依是什么?创新项目开发新方案课程安排前置知识 一、若依搭建若依版本官方非官方 RuoYi-Vue运行后端项目初始化项目Git下载Maven构建 MySQL相关导入sql配置信息 Redis相关启动配置信息 项目运…...
【自学30天掌握AI开发】第1天 - 人工智能与大语言模型基础
自学30天掌握AI开发 - 第1天 📆 日期和主题 日期:第1天 主题:人工智能与大语言模型基础 🎯 学习目标 了解人工智能的发展历史和基本概念掌握大语言模型的基本原理和工作机制区分不同类型的AI模型及其特点理解AI在当前社会中的…...
(十六)Java String类全面解析
一、String类概述 1.1 String的本质 在Java中,String类可能是使用最频繁的类之一,但它也是最容易被误解的类之一。从本质上讲,String代表的是一个不可变的Unicode字符序列。这种不可变性(immutability)是String类设计的核心特性。 java S…...
Android架构之自定义native进程
在Android五层架构中,native层基本上全是c的世界,这些c进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c子进程,也是这众多的c进程,构建了整个android世界的native层。 …...
#跟着若城学鸿蒙# HarmonyOS NEXT学习之AlphabetIndexer组件详解
一、组件介绍 AlphabetIndexer(字母索引条)是HarmonyOS NEXT中一个非常实用的UI组件,它主要用于在列表视图中提供快速的字母导航功能。当应用中有大量按字母顺序排列的数据(如联系人列表、城市列表等)时,A…...
React百日学习计划——Deepseek版
阶段一:基础巩固(1-20天) 目标:掌握HTML/CSS/JavaScript核心语法和开发环境搭建。 每日学习内容: HTML/CSS(1-10天) 标签语义化、盒模型、Flex布局、Grid布局、响应式设计(媒体查询…...
Room持久化库:从零到一的全面解析与实战
简介 在Android开发中,Room作为官方推荐的数据库持久化库,提供了对SQLite的抽象层,使得数据库操作更加安全、高效且易于维护。 Room通过注解处理器和编译时验证,显著降低了数据库操作的复杂度,同时支持响应式编程模式,使开发者能够轻松实现数据变化的实时监听。对于企业…...
Linux云计算训练营笔记day07(MySQL数据库)
数据库 DataBase 保存数据的仓库 数据库管理系统 DBMS 这是一个可以独立运行,用于维护磁盘上的数据的一套软件 特点: 维护性高,灵活度高,效率高,可扩展性强 常见的DBMS Mysql Mariadb Oracle DB2 SQLServer MySQL是一个关系型…...
C语言之旅5---分支与循环【2】
💫只有认知的突破💫才来带来真正的成长💫编程技术的学习💫没有捷径💫一起加油💫 🍁感谢各位的观看🍁欢迎大家留言🍁咱们一起加油🍁努力成为更好的自己&#x…...
K230 ISP:一种新的白平衡标定方法
第一次遇见需要利用光谱响应曲线进行白平衡标定的方法。很好奇是如何利用光谱响应曲线进行白平衡标定的。 参考资料参考:K230 ISP图像调优指南 K230 介绍 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核异构单元加速计算架构&a…...
【Web应用】Vue 项目前端项目文件夹和文件介绍
文章目录 ⭐前言⭐一、文件夹介绍🌟1、.idea🌟2、bin🌟3、build🌟4、node_modules🌟5、public🌟6、src ⭐二、文件介绍🌟1、.editorconfig🌟2、.env.development、.env.production、…...
Leetcode 3544. Subtree Inversion Sum
Leetcode 3544. Subtree Inversion Sum 1. 解题思路2. 代码实现 题目链接:3544. Subtree Inversion Sum 1. 解题思路 这一题我的思路上就是一个动态规划的思路,因为原则上我们只需要遍历一下所有的状态即可,但是这样显然时间复杂度过高&am…...
分别在windows和linux上使用curl,有啥区别?
作为开发者常用的网络工具,curl 在 Windows 和 Linux 上的使用看似相似,但实际存在不少细节差异。以下从 命令语法、环境特性、功能支持 和 开发体验 四个角度展开对比,帮助读者避免跨平台开发时的常见“坑”。 一、命令语法差异:…...
微服务八股(自用)
微服务 SpringCloud 注册中心:Eureka 负载均衡:Ribbon 远程调用:Feign 服务熔断:Hystrix 网关:Gateway/Zuul Alibaba 配置中心:Nacos 负载均衡:Ribbon 服务调用:Feign 服务…...
TCP首部格式及三次握手四次挥手
TCP协议详解:首部格式与连接管理 一、TCP首部格式 TCP首部最小20字节,最大60字节,包含以下字段: | 源端口号(16bit) | 目的端口号(16bit) | | 序列号(32bit) | | 确认号(32bit) | | 数据偏移(4bit)| 保留(6bit) |U|A|P|R|S|…...
Python查询ES错误ApiError(406, ‘Content-Type ...is not supported
现象 使用python查询es数据时出现下面错误 Traceback (most recent call last):File "getUsers.py", line 26, in <module>response es.search(index"lizz_users", bodyquery)File "/usr/local/lib/python3.6/site-packages/elasticsearch/_…...
下周,Coinbase将被纳入标普500指数
Coinbase加入标普500指数紧随比特币突破10万美元大关之后。加密资产正在日益成为美国金融体系的一部分。大型机构已获得监管批准创建现货比特币交易所交易基金,进一步推动了加密货币的主流化进程。 加密货币行业迎来里程碑时刻,Coinbase即将加入标普500…...
物理:由基本粒子组成的个体能否提炼和重组?
个体差异源于基本粒子组合的复杂性与随机性,这一假设若成立,确实可能为生物医学带来革命性突破——但需要突破技术、理论与系统层级的多重壁垒。以下从科学逻辑与技术路径展开分析: 一、随机组合中的共性与稳定结构 1. 自然界的自组织规律 涌现性(Emergence):尽管粒子组…...
Python Day 24 学习
讲义Day16内容的精进 NumPy数组 Q. 什么是NumPy数组? NumPy数组是Python中由NumPy库提供的一种多维数组对象,它称为N-dimensional array,简称ndarray。它是用于数值计算的核心数据结构,能够高效地存储和操作大量的同类型数据。 Q. NumPy数…...
ppy/osu构建
下载 .NET (Linux、macOS 和 Windows) | .NET dotnet还行 构建:f5 运行:dotnet run --project osu.Desktop -c Debug...