Harmony OS NEXT初学笔记

Harmony OS开发知识:工具篇—“codelinter” codelinter同时支持使用命令行执行代码检查与修复 阅读详情

一、熟悉概念

鸿蒙开发相关的一些概念,打开官网,看到的就是这几个套件

二、简单介绍

*   DevEco Studio:类似 Android Studio.
*   ArkTS:ArkTS 是鸿蒙生态的应用开发语言。

全称 TypeScript (简称TS)基本语法风格的基础上,对 TS 的动态类型特性施加更严格的约束,引入静态类型。 提供了声明式 UI、状态管理等相应的能力,可以更简洁、更自然的方式开发高性能应用。

*   ArkUI

ArkUI 是一套构建分布式应用界面的声明式 UI 开发框架。它使用极简的 UI 信息语法、丰富的 UI 组件、以及实时界面预览工具,帮助您提升 HarmonyOS 应用界面开发效率30%。您只需使用一套 ArkTS API,就能在多个 HarmonyOS 设备上提供生动而流畅的用户界面体验。

可以理解为用 TS 实现的一套 UI 组件库,包括常用的组件和布局等。

*   ArkCompiler:ArkCompiler 是华为自研的统一编程平台,包含编译器、工具链、运行时等关键部件,支持高级语言在多种芯片平台的编译与运行,并支撑应用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种设备上的需求。

用于将 TS 代码编译为鸿蒙系统可执行指令,俗称编译打包工具。

初识

准备IDE

按照官方教程,需要下载鸿蒙开发 IDE,也就是 DevEco Studio,和 AndroidStudio 长得差不多,比较容易上手。

首次启动,需要安装 Node.js、ohpm、Harmony OS SDK 等依赖,根据引导一直下一步即可。

完整依赖

*   Node.js:鸿蒙使用 TS 作为开发语言,需要 JS 运行环境。
*   ohpm:ohpm 全称 Open Harmony Package Manager,也就是鸿蒙上使用的包管理工具,类似Maven 仓库。(前端常用的包管理工具 应该叫npm)
*   Harmony OS SDK:相当于 Android 上的 Android SDK。

安装 有一点需要注意,IDE 仅支持特定版本的 Node.js,如果有安装比较高的或者较低的 版本 建议大家先卸载本地安装的 Node.js,通过 IDE 重新安装支持的版本,我自己安装的低版本也会报错

三、创建项目

配置完成后,新建一个项目,比较好的是 把光标放上去还会提示支持哪些设备

Ability 的概念,和 Android 中的 Activity 很像,暂且认为它就是一个页面吧,具体的我还没有学到

除了空页面之外,还支持关于、分类、网格、列表、登录、闪屏等模板。

支持的完整模板

项目配置页面(选择 Empty Ability 下一步)

*   Project name:项目名
*   Bundle name:项目唯一标志,类似于 Android 的 Package name
*   Save location:保存位置
*   Compile SDK:编译使用的 SDK 版本
*   Model:应用模型,有 Stage 和 FA 可选,官网推荐使用 Stage
*   Enable Super Visual:官方的解释是启用低代码开发,先不管它
*   Language:开发语言,Stage 模型只能选 ArkTS,FA 模型还可以选 JS
*   Compatible SDK:字面意思是兼容的的 SDK 版本,暂时不清楚是最低支持版本(minSdk)还是适配的版本(targetSdk)
*   Device type:支持的设备类型

点击 Finish 即可完成创建

创建完的项目结构

鸿蒙中支持多种 Module,常用的有以下两种:

*   Entry:相当于 Android 中的 App Module。
*   Library:相当于 Android 中的 Library Module,仅可被依赖,无法独立运行。

Stage模型简易结构

动手能力有限,只能粗糙的画一画 :-)

*   UIAbility:UIAbility 组件是一种包含 UI 界面的应用组件,主要用于和用户交互。UIAbility 组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个 UIAbility 组件中可以通过多个页面来实现一个功能模块。每一个 UIAbility 组件实例,都对应于一个最近任务列表中的任务。  Android View绘制流程 onLayout onDraw onMesure
*   WindowStage:每个 UIAbility 类实例都会与一个 WindowStage 类实例绑定,提供应用进程内窗口管理器的作用。就是说 UIAbility 通过 WindowStage 持有了一个窗口,为 ArkUI 提供了绘制区域。
*   Context:Context 是应用中对象的上下文。。。其他还没有考虑到
*   Page:Ability 是一个窗口,不包含内容,而 Page 则是真正显示内容的载体,Page 需要依附于 Ability 才能显示。

上手

尝试开发 App 。

UI开发 
(类似Android jectpackCompose)

ArkUI 提供了官方组件和布局(举例栅格布局)

APP登录页面开发展示图片

简单介绍

  • 鸿蒙使用 struct 定义组件

  • 鸿蒙仅支持在 ArkUI 中使用除组件外的特定操作符 if-else、ForEach 、

  • 鸿蒙通过组件对象提供的方法设置属性

    Text("账号密码登录").fontSize(30).fontColor(Color.Black).width("90%").margin({ top: 20 })

页面配置路由跳转

Ability 和 page。

一般来说一个功能只需要一个 Ability  就够了,目前还没有涉及到多个Ability

page 跳转     (Android Activity启动模式)

鸿蒙提供了 Router 模块,通过 url 地址完成 page 之间的路由。

提供了两种跳转模式,分别是 router.pushUrl() 和 router.replaceUrl(),这两种模式决定了目标页是否会替换当前页。

*   router.pushUrl():目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用 router.back() 方法返回到当前页。
*   router.replaceUrl():目标页会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

同时,Router 模块提供了两种实例模式,分别是 Standard 和 Single。这两种模式决定了目标 url 是否会对应多个实例。

*   Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。
*   Single:单实例模式。即如果目标页的url在页面栈中已经存在同 url 页面,则离栈顶最近的同 url 页面会被移动到栈顶,并重新加载;如果目标页的 url 在页面栈中不存在同 url 页面,则按照标准模式跳转。

router.pushUrl({ url:"pages/Main",params:{userName: "name"}})  // 添加params属性,传递参数 }
可以通过调用 router.getParams() 方法来获取传递过来的参数。
获取传递过来的参数对象\
const params: object = router.getParams()
const userName: string = params\["userName"]; // 获取userName的值
重点:变量类型声明  String和string

网络请求

官方提供的 Httpm模块

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
  //添加网络权限
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}


  async httpWork(URL: string) {
    let httpRequest = http.createHttp();
    //添加订阅事件
    httpRequest.on('headersReceive', (header) => {
      console.info('header: ' + JSON.stringify(header));
    });


    let url = URL;
    //GET请求
    let promiseGet = httpRequest.request(// 请求url地址
      url, {
      // 请求方式
      method: http.RequestMethod.GET,
      // 链接超时 时间
      connectTimeout: 60000,
      //读取超时 时间
      readTimeout: 60000,
      // 指定返回数据类型
      expectDataType: http.HttpDataType.STRING,
      // 是否使用缓存
      usingCache: true,
      // 优先级  返回[1,1000] 默认为1
      priority: 1,
      // 使用协议
      usingProtocol: http.HttpProtocol.HTTP1_1,
      // 是否使用代理
      usingProxy: false,
      // 添加请求头
      header: {
        'Content-Type': 'application/json'
      }
    });

promiseGet.then((data) => {
      if (data.responseCode === http.ResponseCode.OK) {
       
      }
    }).catch((err) => {
      
    });
  }

    //POST请求
    let promisePost = httpRequest.request(// 请求url地址
      url, {
      // 请求方式
      method: http.RequestMethod.POST,
      //如果是POST请求 必须要有请求体
      extraData:{
        "userName":"zhoutao"
      },
      // 链接超时 时间
      connectTimeout: 60000,
      //读取超时 时间
      readTimeout: 60000,
      // 指定返回数据类型
      expectDataType: http.HttpDataType.STRING,
      // 是否使用缓存
      usingCache: true,
      // 优先级  返回[1,1000] 默认为1
      priority: 1,
      // 使用协议
      usingProtocol: http.HttpProtocol.HTTP1_1,
      // 是否使用代理
      usingProxy: false,
      // 添加请求头
      header: {
        'Content-Type': 'application/json'
      }
    });
  }
    promisePost.then((data) => {
      if (data.responseCode === http.ResponseCode.OK) {
     
      }
    }).catch((err) => {
     
    });
  }

//销毁
httpRequest.destroy();

 /**
   * 网络请求 简单封装
   * @param path
   * @param method
   * @param extraData
   * @returns
   */
 async requestSync<T>(URL: string, method: http.RequestMethod, extraData?: Object): Promise<Response<T>> {
    return new Promise<Response<T>>((resolve, reject) => {
      let url = "BaseUrl" + URL;
     if (method === http.RequestMethod.POST) {
        //因为POST请求必须要有请求体,所以增加一个判断
        extraData = {};
      }
      let httpRequest = http.createHttp();
      httpRequest.request(
        url, {
        method: method,
        expectDataType: http.HttpDataType.OBJECT,
        header: header,
        extraData: extraData
      },
        (err, data) => {
          let res = new Response<T>()
          if (!err && data.responseCode === 200) {
            Object.assign(res, data.result)
          } else {
            res.errorCode = data?.responseCode ?? -1
            res.errorMsg = err?.message ?? ""
          }
          resolve(res);
        }
      )
    })
  }
}

/**
 * 响应处理
 */
export class Response<T> {
  errorCode: code = 0
  errorMsg: string = ""
  data: T = null

  isSuccess(): boolean {
    return this.errorCode === 0
  }
}

数据持久化

App 的状态保存,主要分为 键值对(key value)、 有 Preference、(KVStore、SQL 数据库 使用方法 暂不介绍了)。

*   首选(Preferences)

通常用于保存应用的配置信息。数据通过文本的形式保存在设备中,应用使用过程中会将文本中的数据全量加载到内存中,所以访问速度快、效率高,但不适合需要存储大量数据的场景。

*   键值型数据库(KV-Store)

一种非关系型数据库,其数据以“键值”对的形式进行组织、索引和存储,其中“键”作为唯一标识符。适合很少数据关系和业务关系的业务数据存储,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。相比于关系型数据库,更容易做到跨设备跨版本兼容。

*   关系型数据库(RelationalStore)

一种关系型数据库,以行和列的形式存储数据,广泛用于应用中的关系型数据的处理,包括一系列的增、删、改、查等接口,开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。

Preferences

接口如下

//初始化
function getPreferences(context: Context, name: string, callback: AsyncCallback<Preferences>): void;
//写入
put(key: string, value: ValueType, callback: AsyncCallback<void>): void;
//检查key和vlue 也就是键值对 key不能为空
has(key: string, callback: AsyncCallback<boolean>): void;
//根据key获取对应的值 如果数据为null 返回默认值
get(key: string, defValue: ValueType, callback: AsyncCallback<ValueType>): void;
//根据对应的key进行删除
delete(key: string, callback: AsyncCallback<void>): void;
//将数据异步存储 持久化
flush(callback: AsyncCallback<void>): void;
//删除初始化数据 持久话数据也会被删除
function deletePreferences(context: Context, name: string, callback: AsyncCallback<void>): void;

//订阅数据,如果相对应key的值发生变化时,会触发 Callback回调
on(type: 'change', callback: Callback<string>): void;
//取消订阅
off(type: 'change', callback?: Callback<string>): void;

用法基本和 Android 中的 SharedPreference 一致,重点是 提供了 on 、 off 来订阅数据变更。 遥遥领先\~\~\~\~

多线程

接口请求、数据存储、埋点上报等等,多线程的性能,直接影响了应用的流畅度。

TaskPool 和 Worker&#x20;

TaskPool 支持在主线程封装任务抛给任务队列,系统选择合适的工作线程,进行任务的分发及执行,再将结果返回给主线程,支持任务的执行、取消,工作线程数量上限为 4。

简单使用

import taskpool from '@ohos.taskpool';


/**
 * 执行多任务
 * @param dataSlice
 * @returns
 */
@Concurrent
function printArgs(args: number): number {

  return args;
}

function achieve(buffer: ArrayBuffer) {

  let number = buffer.byteLength / 3;

  let task1 = new taskpool.Task(printArgs, 100);
  let task2 = new taskpool.Task(printArgs, 200);
  let task3 = new taskpool.Task(printArgs, 300);

  taskpool.execute(task1, taskpool.Priority.LOW).then((value: Object) => {

  });
  taskpool.execute(task2, taskpool.Priority.MEDIUM).then((value: Object) => {

  });
  taskpool.execute(task3, taskpool.Priority.HIGH).then((value: Object) => {

  });

}

Java 中的 ThreadPool 比较类似。

Worker:暂时没有了解

开发体验

优点

*   易上手

*   系统 API 封装性高

系统 API 用起来比较方便。

*   TS 学习

可能对于前段开发来说更容易上手。

*   对于Android 开发

IDE 使用基本一致,其次系统架构和 API 定义也非常相似。

缺点

*   系统不开源:开发的时候看不到源码。
*   配套工具还未完善
*   开源框架较少

有待深入了解

more...

笔记到此结束

笔记比较早,项目开发初期草稿,可能落后华为目前的版本
 

Openwifi 开源项目解读(一) Openwifi wifi 80211 无线网卡 基带 FPGA linux 驱动 开源 阅读详情

相关推荐

MIPI CSI-2 协议解析

CSI-2标准协议前言一、Overview of CSI-2二、CSI-2 layer Definitions三、 Camera Control Interface(CCI)3.1 数据传输协议(Data Transfer Protocol)3.1.1 消息类型(Message Type)3.1.2 读写操作(Read/Write Operations)3.1.2.1 随机位置单次读3.1.2.2 当前位置单次读3.1.2.3 随机位置连续读3.1.2.4 当前位置连续读3.1.2.5 随机位置单次写3.1

Lucky 3万+

一文讲清OpenHarmony、Harmony OS、openEuler、Harmony Next

openEuler是一款面向企业级应用的开源Linux操作系统,基于Linux内核开发,支持多样性计算架构(如x86_64、ARM等),适用于服务器、云计算及虚拟化场景;由开源社区协作维护,华为是主要贡献者之一,专注于提供稳定可靠的企业级解决方案。

m0_67505153的博客 4494

Altium AD20差分对走线设置方法

AD20的PCB差分对走线设置 1、原理图添加差分对 先在原理图中,讲要设置差分对的网络对添加网络标签。 名称前面的内容要相同,后缀用 _P 和 _N 加以区分。 最后使用 放置差分对,将两个网络标记。 2、编译,更改到PCB 编译,更新到PCB,确认差分对网络的出现。 验证更改,执行更改。将改动更新到PCB中。 PCB中,可通过 右下角 Panels - 调出 PCB 显示。来对已添加的差分对进行查看。 这时原本的走线有一点点小问题,需要删掉原来走线,设置差分对规则,并重新布线。

Mark_md的博客 3万+

Harmony OS Next ----页面跳转

开发者也可以根据自己的需求,去定义弹窗。

2401_86222148的博客 1454

通用策略04丨ORB魔改框架+自适应动量过滤模板

1、该策略第一次尝试使用低通滤波器进行行情择时过滤,同样该方法也可以用于主进场逻辑。2、出场逻辑适用于趋势、隔日波段、高低开等行情结构,对于日线级别长度K线一定积极作用,因此大家可以根据该逻辑进行反向品种筛选。3、在资金管理方面,我注意到一个问题,以往都是按照复权价格计算,但是资金却没有复权,所以这里实际上这里应该将价格除权计算,如下图所示:由于各平台差异,回测绩效以TBQ版本为准!!!本策略仅作学习、交流使用,实盘交易盈亏投资者个人负责!!!

松鼠宽客的博客 1176

SuperMap iObjects Java组件开发——环境部署(IntelliJ IDEA)

SuperMap iObjects Java 是面向GIS应用系统开发者的组件式GIS开发平台,具有强大的地理数据管理、编辑、显示、分析等功能,并且其具有极强的易用性和丰富的帮助资源,适宜快速开发大型GIS应用系统。本文将介绍如何在IntelliJ IDEA集成开发环境中进行SuperMap iObjects Java组件的环境部署。

nan620403的博客 1081

harmony OS NEXT-Navagation基本用法

Builder//根据传入的名字区渲染对应的页面@Component//接收主界面传递过来的页面栈build() {Text('这是我从主页跳转的第一个界面')Button('跳转到第二个页面去')})})@Component@Consumebuild() {Text('这是我从主页跳转的第二个界面')Button('跳转到第三个页面去')})})@Component@Consumebuild() {Column() {Text('这是我从主页跳转的第三个界面')

Yihong1833100198的博客 2051

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1139

Harmony OS Next----Ark TS 常用类

async/await是一种用于处理异步操作的Promise语法糖,使得编写异步代码更加简单和易读。async采用声明函数表示该函数为异步函数,await来声明promise的调用过程,使得async配合await就可以不用使用promise的then-catch结构。(2)TaskPool支持开发者在主线程封装任务抛给任务机制,系统选择合适的工作线程,进行任务的分发及执行,再将结果返回给主线程。

2401_86222148的博客 1531

【OpenClaw从入门到精通】第19篇:OpenClaw电商实战:从零搭建比价+库存监控+自动调价全自动化系统(2026实测附完整代码)

2026年OpenClaw成为全球最火开源项目,电商行业因其场景高频、数据标准化成为其核心落地领域。本文针对电商从业者面临的比价繁琐、库存混乱、调价滞后三大痛点,基于OpenClaw的“接入层-执行层-决策层”三层架构,从零拆解智能比价、多平台库存监控、动态自动调价三大核心场景的实现逻辑。文中包含完整的环境配置、技能安装、代码实现(含Python脚本与YAML配置)、执行结果验证,同时补充关键算法原理与避坑指南,兼顾新手入门与进阶提升。读者可直接参考本文实操流程,快速搭建属于自己的电商自动化系统,实现7×2

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2238

倍福EL5101模块连接编码器

1、 EL5101模块简介:EL5101为单通道增量型编码器计数模块,一共有EL5101-0000、EL5101-0010、EL5101-0011、EL5101-0090(尚未供货)四种型号,其中EL5101-0000比较常用,本例使用EL5101-0000连接增量型编码器 2、 硬件外观和接线 在这里插入图片描述 3、 指示灯说明 4、和编码器连接的案例 ......

weixin_41883890的博客 6501

Harmony OS NEXT 事件处理与页面导航篇

在鸿蒙应用开发的广阔天地里,事件处理和页面导航是构建交互流畅、用户体验出色应用的核心要素。精准的事件处理机制能够让应用对用户操作做出及时响应,而高效的页面导航则方便用户在应用内自由穿梭,提升应用的易用性。下面将深入探讨这两个关键方面。

2401_86222148的博客 881

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「前端可视化项目实战:智慧农业监控大屏开发详解」 「农作物可视化监控:用 Vue 和 ECharts 构建大屏应用」 「从零开始开发一个智慧农业数据大屏(代码+图表展示)」 「前端新手也能实现!智慧农业监控大屏开发教程」 「用 Vue 和 ECharts 搭建动态数据大屏:详细图文教程」 「学习前端大屏开发:

sky10100100的博客 1535

Harmony OS NEXT 多端协同开发与分布式能力篇

在鸿蒙生态中,多端协同是其核心特性之一,通过分布式软总线技术实现跨设备无缝协作。本文将深入探讨设备发现、分布式任务调度和数据同步的实现方式,结合实际案例展示如何构建跨设备应用。

2401_86222148的博客 2726

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Harmony OS NEXT 数据存储与权限管理篇

在鸿蒙应用开发的领域中,数据存储和权限管理是保障应用功能完整性、用户数据安全与隐私的关键环节。合理的数据存储机制能确保应用高效地保存和获取数据,而精细的权限管理则为用户数据筑牢安全防线。下面将详细介绍这两方面的知识。

2401_86222148的博客 2220

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Harmony OS NEXT 网络请求与数据交互篇

在鸿蒙应用开发中,网络请求与数据交互是连接前端与后端的桥梁。ArkUI-X框架提供了丰富的网络请求API,支持HTTP/HTTPS协议,并集成了华为云服务生态。本文将深入探讨 @ohos.net.http 模块的使用方法,结合实际案例展示如何实现高效的数据交互。

2401_86222148的博客 958

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Harmony OS NEXT版本@Extend装饰器的解析

') .TextExtend_2() } } @Extend(Text) function TextExtend_1() { .fontSize(20) .fontColor(Color.Blue) } @Extend(Text) function TextExtend_2() { .backgroundColor(Color.Gray) .TextExtend_1() }是作用于单个组件,所以也支持组件的所有属性和事件(包括组件的私有属性),这点和。,它的主要作用是:用于扩展原生组件的样式。

duoduola888的博客 923

harmony OS NEXT-评论功能小demo

我们将整个评论页面拆解为三个组件,分别是头部导航,评论项,回复三个部分,然后统一在index界面导入。

Yihong1833100198的博客 1079

从前端开发转向Harmony OS Next开发:技术栈迁移与API全解析

从前端开发转向Harmony OS Next开发:技术栈迁移与API全解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 3031

Harmony OS Next 开发【HttpRequest 网络请求封装】

主要介绍了对 http 官方库的封装,不需要引入第三方请求库,基本能满足大多数应用的开发,当然也有设计不足的地方,见谅

Osborn_的博客 1630

harmony OS NEXT-沉浸式布局实现笔记

在原子化服务场景中应与enterFullScreen方法结合使用。在API version ≥ 9时优先使用。

Yihong1833100198的博客 570

Harmony OS Next ----Ark TS 容器类

先行容器实现能按顺序访问的数据结构,其底层主要通过数组实现,摆脱ArrayList、Vector (已废弃)、List、LinkedList、Deque、Queue、Stack七种。

2401_86222148的博客 414

鸿蒙Harmony OS Next原生开发原生UI组件图片

鸿蒙Harmony OS Next原生开发原生UI组件图片

在经历了无数个黑夜之后,我决定自己成为太阳 1180

Harmony OS NEXT API 12核心API深度解析与开发实践

Harmony OS NEXT API 12核心API深度解析与开发实践

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1285

鸿蒙Harmony OS Next原生开发声明式UI渲染控制

鸿蒙Harmony OS Next原生开发声明式UI渲染控制

在经历了无数个黑夜之后,我决定自己成为太阳 1170

鸿蒙Harmony OS Next原生开发原生UI组件图片配置

鸿蒙Harmony OS Next原生开发原生UI组件图片配置

在经历了无数个黑夜之后,我决定自己成为太阳 969
下一篇: 华为账号一键登录开发笔记
我喜欢仙女儿
博客等级 码龄10年 7粉丝 3原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值