![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
harmonyOS
文章平均质量分 93
一行代码一包烟
这个作者很懒,什么都没留下…
展开
-
OpenHarmony中的LLDB高性能调试器
LLDB(Low Lever Debugger)是新一代高性能调试器。详细说明参考 LLDB官方文档 。当前OpenHarmony中的LLDB工具是在 llvm15.0.4 基础上适配演进出来的工具,是HUAWEI DevEco Studio工具中默认的调试器,支持调试C和C++应用。原创 2024-08-25 21:16:02 · 347 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之NetConnection开发
## 场景介绍NetConnection模块提供了常用网络信息查询的能力。## 接口说明NetConnection常用接口如下表所示,| 接口名 | 描述 || --- | --- || OH_NetConn_HasDefaultNet(int32_t *hasDefaultNet) | 检查默认数据网络是否被激活,判断设备是否有网络连接,以便在应用程序中采取相应的措施。 || OH_NetConn_GetDefaultNet(NetConn_NetHandle *netHandle)原创 2024-08-25 20:44:02 · 443 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之NativeBundle开发
开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native Bundle接口获取应用自身相关信息。原创 2024-08-25 20:08:34 · 393 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之USB DDK开发
USB DDK(USB Driver Develop Kit)是为开发者提供的USB驱动程序开发套件,支持开发者基于用户态,在应用层开发USB设备驱动。提供了一系列主机侧访问设备的接口,包括主机侧打开和关闭接口、管道同步异步读写通信、控制传输、中断传输等。原创 2024-08-25 19:46:53 · 310 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之purgeable内存管理机制
OpenHarmony提供Purgeable Memory内存管理机制,开发者可以使用相关接口创建PurgeableMemory对象,从而管理purgeable内存。开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native层相关接口操作purgeable内存。功能包括purgeable内存的申请、释放等。通过该机制提供的NAPI接口申请管理PurgeableMemory对象,并将数据内容写入该对象。使用完毕后释放。原创 2024-08-24 22:09:24 · 708 阅读 · 0 评论 -
鸿蒙HarmonyOS APP开发之FFRT 开发
Function Flow编程模型是一种基于任务和数据驱动的并发编程模型,允许开发者通过任务及其依赖关系描述的方式进行应用开发。FFRT(Function Flow运行时)是支持Function Flow编程模型的软件运行时库,用于调度执行开发者基于Function Flow编程模型开发的应用。通过Function Flow编程模型和FFRT,开发者可专注于应用功能开发,由FFRT在运行时根据任务依赖状态和可用执行资源自动并发调度和执行任务。原创 2024-08-24 21:13:20 · 617 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之Rawfile开发
开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native Rawfile接口操作Rawfile目录和文件。功能包括文件列表遍历、文件打开、搜索、读取和关闭Rawfile。原创 2024-08-24 20:45:00 · 607 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之Node-API常见问题
若JS侧导入模块的形式为: import xxx from ‘@ohos.yyy.zzz’,则该so将在/system/lib/module/yyy中找libzzz.z.so或libzzz_napi.z.so,若so不存在或名称无法对应,则报错日志中会出现dlopen相关日志。发生异常时,可以选择走异常分支, 确保不再走多余的Native逻辑 ,直接返回到ArkTS层。Node-API接口正常执行后,会返回一个napi_ok的状态枚举值,若napi接口返回值不为napi_ok,可从以下几个方面进行排查。原创 2024-08-24 20:08:42 · 264 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用扩展的Node-API接口在异步线程中运行和停止事件循环
开发者在自己创建的ArkTS运行环境中调用异步的ArkTS接口时,可以通过使用Node-API中的扩展接口napi_run_event_loop和napi_stop_event_loop来运行和停止ArkTS实例中的事件循环。原创 2024-08-24 18:53:04 · 615 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用NAPI接口在主线程中进行模块加载
Node-API中的napi_load_module接口的功能是在主线程中进行模块的加载,当模块加载出来之后,可以使用函 napi_get_property获取模块导出的变量,也可以使用napi_get_named_property获取模块导出的函数,目前支持以下场景:原创 2024-08-23 22:02:02 · 448 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用Node-API接口创建ArkTs运行时环境
开发者通过pthread_create创建新线程后,可以通过napi_create_ark_runtime来创建一个新的ArkTs基础运行时环境,并通过该运行时环境加载ArkTs模块,目前仅支持在ArkTs模块中使用console接口打印日志,使用timer定时器功能。当使用结束后,开发者需要通过napi_destroy_ark_runtime来销毁所创建的ArkTs基础运行时环境。原创 2024-08-23 21:31:17 · 713 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之在非ArkTS线程中回调ArkTS接口
ArkTS是单线程语言,通过NAPI接口对ArkTS对象的所有操作都须保证在同一个ArkTS线程上进行。本示例将介绍通过napi_get_uv_event_loop和uv_queue_work实现在非ArkTS线程中通过NAPI接口回调ArkTS函数。原创 2024-08-23 21:03:59 · 364 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之Native与ArkTS对象绑定
通过napi_wrap将ArkTS对象与Native的C++对象绑定,后续操作时再通过napi_unwrap将ArkTS对象绑定的C++对象取出,并对其进行操作。原创 2024-08-23 20:20:31 · 697 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用Node-API接口进行线程
napi_create_threadsafe_function是Node-API接口之一,用于创建一个线程安全的JavaScript函数。主要用于在多个线程之间共享和调用,而不会出现竞争条件或死锁。例如以下场景:原创 2024-08-23 17:39:35 · 495 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用Node-API接口进行异步任务开发
napi_create_async_work是Node-API接口之一,用于创建一个异步工作对象。可以在需要执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应性能。例如以下场景:文件操作:读取大型文件或执行复杂的文件操作时,可以使用异步工作对象来避免阻塞主线程。网络请求:当需要进行网络请求并等待响应时,使用异步工作对象可以确保主线程不被阻塞,从而提高应用程序的响应性能。原创 2024-08-23 17:08:02 · 664 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用Node-API实现跨语言交互开发流程
使用Node-API实现跨语言交互,首先需要按照Node-API的机制实现模块的注册和加载等相关动作。:实现C++方法的调用。代码比较简单,import一个对应的so库后,即可调用C++方法。:.cpp文件,实现模块的注册。需要提供注册lib库的名称,并在注册回调方法中定义接口的映射关系,即Native方法及对应的JS/ArkTS接口名称等。此处以在ArkTS/JS侧实现add()接口、在Native侧实现Add()接口,从而实现跨语言交互为例,呈现使用Node-API进行跨语言交互的流程。原创 2024-08-23 16:21:49 · 477 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之Node-API开发
当传入napi_get_cb_info的argv不为nullptr时,argv的长度必须大于等于传入argc声明的大小。当argv不为nullptr时,napi_get_cb_info会根据argc声明的数量将JS实际传入的参数写入argv。如果argc小于等于实际JS传入参数的数量,该接口仅会将声明的argc数量的参数写入argv;而当argc大于实际参数数量时,该接口会在argv的尾部填充undefined。原创 2024-08-23 15:41:01 · 649 阅读 · 0 评论 -
鸿蒙(HarmonyOS)应用开发之Node-API支持的数据类型和接口
接口功能说明创建一个异步资源上下文环境(暂不支持与async_hook相关能力)。在异步资源上下文环境中回调JS函数(暂不支持与async_hook相关能力)。销毁先前创建的异步资源上下文环境(暂不支持与async_hook相关能力)。创建一个回调作用域(暂不支持与async_hook相关能力)。关闭先前创建的回调作用域(暂不支持与async_hook相关能力)。原创 2024-08-23 15:10:16 · 728 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之Node-API简介
OpenHarmony Node-API是基于Node.js 8.x LTS的 Node-API 规范扩展开发的机制,为开发者提供了ArkTS/JS与C/C++模块之间的交互能力。它提供了一组稳定的、跨平台的API,可以在不同的操作系统上使用。本文中如无特别说明,后续均使用Node-API指代OpenHarmony Node-API能力。OpenHarmony Node-API与Node.js 8.x LTS的Node-API规范的接口异同点,详见 Node-API参考。原创 2024-08-23 14:30:23 · 640 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之C/C++标准库机制
OpenHarmony NDK提供业界标准库 libc标准库、 C++标准库 ,本文用于介绍C/C++标准库在OpenHarmony中的机制,开发者了解这些机制有助于在NDK开发过程中避免相关问题。原创 2024-08-23 14:10:07 · 191 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之在NDK工程中使用预构建库
在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeList.txt编译脚本中声明的预构建库都会被打包。例如在项目中需要使用预构建库libavcodec_ffmpeg.so,其开发态存放路径如下图所示。当在HAR中使用预构建库时,当前编译的库和链接所需预构建库会打包到HAR中的libs目录下,如下图所示。为了解决大家这些学习烦恼。原创 2024-08-22 22:06:25 · 832 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用命令行CMake构建NDK工程
在很多复杂应用工程中,C++代码工程是通过CMake等构建系统以命令行方式来编译构建的,接下来介绍如何把已有的CMake工程切换到OpenHarmony工具链中,从而使用命令行CMake构建该工程。原创 2024-08-22 21:45:51 · 1010 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之使用DevEco Studio模板构建NDK工程
NDK通过CMake和Ninja编译应用的C/C++代码,编译过程如下图所示。核心编译过程如下:根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake。执行Ninja,按照makefile执行编译和链接,将生成的.so以及运行时依赖的.so同步到输出目录,完成构建过程。原创 2024-08-22 21:01:45 · 690 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之NDK工程构建
ohos.toolchain.cmake是OpenHarmony NDK提供给CMake的toolchain脚本,里面预定义了编译OpenHarmony应用需要设置的编译参数,如交叉编译设备的目标、C++运行时库的链接方式等;这些参数在调用CMake命令时,可以从命令行传入,来改变默认编译链接行为。此文件中的常用参数见下表。参数类型说明OHOS_STLlibc++的链接方式。默认为c++_shared。c++_shared表示采用动态链接libc++_shared.so;原创 2024-08-22 20:32:55 · 1012 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发之NDK开发指南
build目录:放置预定义的toolchain脚本文件ohos.toolchain.cmakeCMake编译时需要读取该文件中的默认值,比如编译器架构、C++库链接方式等,因此在编译时会通过CMAKE_TOOLCHAIN_FILE指出该文件的路径,便于CMake在编译时定位到该文件。build-tools文件夹:放置NDK提供的编译工具# 键入下一行命令查看CMake的版本# 结果llvm文件夹:放置NDK提供的编译器。原创 2024-08-22 17:47:11 · 907 阅读 · 0 评论 -
OpenHarmony 内核编程实战
或者说内核在一个操作系统中起到一个什么样的作用?相信初次接触这个词的伙伴们也会有同样的疑问。不过不用担心,笔者会尽可能地通俗地介绍内核的相关知识,以便大家能够更好地去体会内核编程。我们先来看一张图,这是OpenHarmony官网发布的技术架构图我们可以看到最底层叫做内核层,有Linux,LiteOS等。内核在整个架构,或者操作系统中起到一个核心作用,他负责管理计算机系统内的资源和硬件设备,提供给顶层的应用层一个统一规范的接口,从而使得整个系统能够完成应用与硬件的交互。原创 2024-08-22 16:46:33 · 575 阅读 · 0 评论 -
鸿蒙(HarmonyOS)Navigation如何实现多场景UI适配?
在窄屏设备上,联系人和聊天区在多窗口中体现。在宽屏设备上,联系人和聊天区在同一窗口体现。要做好适配,往往需要开发者开发多套代码,以便运行在不同设备上。但是这样耗时耗力,于是ArkUI针对这种场景提供了分栏组件,可以通过一套代码完成不同设别的适配,本例简单介绍下如何使用分栏组件实现上述场景。原创 2024-08-22 15:58:41 · 820 阅读 · 0 评论 -
鸿蒙 HarmonyOS应用开发之API:Context
Context 是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。原创 2024-08-22 15:15:58 · 542 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发——组件级配置
在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。原创 2024-08-22 14:15:09 · 526 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发——跨端迁移
在用户使用设备的过程中,当使用情境发生变化时(例如从室内走到户外或者周围有更适合的设备等),之前使用的设备可能已经不适合继续当前的任务,此时,用户可以选择新的设备来继续当前的任务,原设备可按需决定是否退出任务,这个就是跨端迁移的场景。常见的跨端迁移场景实例:在平板上播放的视频,迁移到智慧屏继续播放,从而获得更佳的观看体验;平板上的视频应用退出。在应用开发层面,跨端迁移指在A端运行的UIAbility迁移到B端上,完成迁移后,B端UIAbility继续任务,而A端UIAbility可按需决定是否退出。原创 2024-08-22 13:46:31 · 773 阅读 · 0 评论 -
鸿蒙HarmonyOS 开发如果实现多端协同?
在发起端设置目标组件参数,调用startAbilityForResult()接口启动目标端UIAbility,异步回调中的data用于接收目标端UIAbility停止自身后返回给调用方UIAbility的信息。在设备A上通过应用提供的启动按钮,启动设备B上指定的UIAbility,当设备B上的UIAbility退出后,会将返回值发回设备A上的发起端应用。在设备A上通过发起端应用提供的启动按钮,启动设备B上指定的UIAbility与ServiceExtensionAbility。原创 2024-08-21 22:25:34 · 731 阅读 · 0 评论 -
鸿蒙HarmonyOS开发-FA模型访问Stage模型DataShareExtensionAbility
无论FA模型还是Stage模型,数据读写功能都包含客户端和服务端两部分。FA模型中,客户端是由DataAbilityHelper提供对外接口,服务端是由DataAbility提供数据库的读写服务。Stage模型中,客户端是由DataShareHelper提供对外接口,服务端是由DataShareExtensionAbility提供数据库的读写服务。服务端由FA模型升级到Stage模型后,会导致FA模型的客户端在API 9(含)之后的版本上无法访问服务端。原创 2024-08-21 22:06:28 · 984 阅读 · 0 评论 -
鸿蒙HarmonyOS应用开发—AbilityStage组件容器
AbilityStage是一个 Module 级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。DevEco Studio默认工程中未自动生成AbilityStage,如需要使用AbilityStage的能力,可以手动新建一个AbilityStage文件,具体步骤如下。原创 2024-08-21 21:23:28 · 973 阅读 · 0 评论 -
一文看懂什么是OpenHarmony流转架构
随着全场景多设备的生活方式不断深入,用户拥有的设备越来越多,不同设备都能在适合的场景下提供良好的体验,例如手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备也有使用场景的局限,例如在电视上输入文本相对移动设备来说是非常糟糕的体验。当多个设备通过分布式操作系统能够相互感知、进而整合成一个超级终端时,设备与设备之间就可以取长补短、相互帮助,为用户提供更加自然流畅的分布式体验。在OpenHarmony中,将跨多设备的分布式操作统称为;原创 2024-08-21 20:55:05 · 1004 阅读 · 0 评论 -
HarmonyOS网格布局:List组件和Grid组件的使用
在我们常用的手机应用中,经常会见到一些数据列表,如设置页面、通讯录、商品列表等。下图中两个页面都包含列表,“首页”页面中包含两个网格布局,“商城”页面中包含一个商品列表。上图中的列表中都包含一系列相同宽度的列表项,连续、多行呈现同类数据,例如图片和文本。常见的列表有线性列表(List列表)和网格布局(Grid列表):为了帮助开发者构建包含列表的应用,ArkUI提供了List组件和Grid组件,开发者使用List和Grid组件能够很轻松的完成一些列表页面。原创 2024-08-21 20:33:38 · 649 阅读 · 0 评论 -
HarmonyOS 实战开发——页面布局方式
一个丰富的页面需要很多组件组成,那么,我们如何才能让这些组件有条不紊地在页面上布局呢?这就需要借助容器组件来实现。容器组件是一种比较特殊的组件,它可以包含其他的组件,而且按照一定的规律布局,帮助开发者生成精美的页面。容器组件除了放置基础组件外,也可以放置容器组件,通过多层布局的嵌套,可以布局出更丰富的页面。ArkTS为我们提供了丰富的容器组件来布局页面,本文将以构建登录页面为例,介绍Column和Row组件的属性与使用。原创 2024-08-21 17:37:48 · 904 阅读 · 0 评论 -
HarmonyOS应用程序框架
UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。每一个UIAbility实例,都对应于一个最近任务列表中的任务。一个应用可以有一个UIAbility,也可以有多个UIAbility,如下图所示。例如浏览器应用可以通过一个UIAbility结合多页面的形式让用户进行的搜索和浏览内容;原创 2024-08-21 16:44:22 · 540 阅读 · 0 评论 -
OpenHarmony 源码解析之SystemUi—Statusbar(TS)
SystemUI应用是OpenHarmony中预置的系统应用,为用户提供系统相关信息展示及交互界面,包括系统状态、系统提示、系统提醒等,例如系统时间、电量信息。导入batteryInfo模块,监听系统电池事件,实时获取电池电量状态导入时间模块,调用JS内置函数,实时获取系统时间、日期、星期信息导入Wifi模块,监听设备Wlan通信与连接事件,实时获取Wifi开关、供电、连接名等信息。原创 2024-08-21 16:01:47 · 693 阅读 · 0 评论 -
鸿蒙(HarmonyOS)实战开发——Stage模型
需要注意的是,在Ability中存在两个与WindowStage相关的生命周期状态onWindowStageCreate和onWindowStageDestroy,这两个生命周期状态的变化仅存在于具有显示能力的设备中。每个Ability实例对应的Mission都留有该Ability实例的快照,Ability实例销毁后,Mission中会继续保留Ability的类的信息和快照,直到用户删除,或者超过存储上限。Stage模型的设计,是为了提供给开发者一个更好的开发方式,更好的适用于多设备、分布式场景。原创 2024-08-21 15:39:20 · 684 阅读 · 0 评论 -
基于ArkUI框架开发-ImageKnife渲染层重构
综上可知,此次重构渲染层,一共新增了6个基础能力,适配了IDE最新版特性自定义组件可链式调用通用属性和方法,并且采用适合的设计模式保留了自定义组件绘制部分的拓展能力。展示了部分常用场景下使用代码的方式,帮助开发者更快上手开发。最后在OpenHarmony不断推陈出新之际,三方库ImageKnife也应该激流勇进,不断地提升组件的实用性和适用性,为开发者创造一个良好的开发体验。原创 2024-08-21 14:27:43 · 970 阅读 · 0 评论