版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目1:初识鸿蒙步入万物互联时代,从HarmonyOS发展历程到技术架构,从开发环境搭建到第一个应用的诞生——全面掌握鸿蒙开发的起点。项目1初识鸿蒙项目2ArkTS语言项目3资源管理与应用开发项目4UIAbility应用组件项目5ArkUI项目6线程及HTTP数据请求项目7数据存储项目8卡片及元服务全套可编辑PPT课件导学万物互联时代的新挑战步入万物互联时代,应用支撑平台从数十亿部手机扩展到数百亿台IoT设备,重塑了消费者全方位、多场景的使用体验。开发者面临从单一手机平台向多元化全场景设备平台的迁移,新设备底座虽带来高效便捷体验,但也伴随新挑战:设备种类丰富,需适配多种终端形态需跨设备无缝协同,提供一致体验分布式开发的复杂性显著增加同时,AI时代来临,用户对交互体验和信息获取智能化需求增强,移动设备计算能力提升,开发者需迅速运用AI能力使应用更智能。HarmonyOS:新一代智能终端操作系统HarmonyOS作为新一代智能终端操作系统,为设备智能化、互联互通构建了共通平台,提供简洁、流畅、连贯且安全可靠的交互体验。它顺应移动生态潮流,倡导三大理念:一次开发,多端部署一个工程覆盖多种终端设备可分可合,自由流转功能模块灵活拆分组合统一生态,原生智能构建统一生态系统,AI无处不在学习目标总览知识目标了解HarmonyOS发展历程理解HarmonyOS技术架构了解HarmonyOS技术特征掌握DevEcoStudio开发工具安装及配置掌握工程项目的创建能力目标独立完成DevEcoStudio开发环境的安装、配置与调试,保证其正常运行掌握如何创建简单鸿蒙应用项目,能编译、运行并在设备查看效果具备阅读基础鸿蒙代码,理解逻辑及修改简单代码的能力开发及运行中如遇常见问题,能运用所学初步排查并解决素质目标激发兴趣与创新激发学生对鸿蒙开发的兴趣,培养创新探索精神,鼓励独特想法。在技术学习中保持好奇心,勇于尝试新方案。自主学习意识引导树立自主学习意识,通过多渠道获取知识,提高独立解决问题能力。善于利用官方文档、社区资源和技术论坛。工程规范与严谨态度强调工程规范,培养严谨态度和良好习惯,提升项目可维护与扩展性。代码规范、命名规范、文档规范缺一不可。任务1开发环境安装任务描述:本任务旨在搭建一个完整的HarmonyOS开发环境,包括安装必要的软件和进行相关设置,以确保后续开发工作的顺利进行。1.1HARMONYOS概述1.1.1HarmonyOS发展历程鸿蒙操作系统(HarmonyOS,简称HMOS,开发代号Ark,正式名称为华为终端鸿蒙智能设备操作系统软件)是由华为公司2012年以来开发的分布式操作系统,并于2019年8月正式发布。该系统利用"分布式"技术,将手机、电脑、平板、电视、汽车和智能穿戴等多款设备融合成一个"超级终端",使用户便于操作和共享各种设备的资源。因各设备平台不同,系统架构和内核也会有所不同。1版本1.0~4.2使用Android开源项目(AOSP)并融入OpenHarmony开发的移动端操作系统,在移动设备、手机和平板端支持鸿蒙应用和Android应用。2鸿蒙星河版(5.0)抛弃Linux内核及AOSP代码的系统版本。该系统只支持鸿蒙系统的原生应用,不能运行Android应用与其插件。1.1HARMONYOS概述1.1.2HarmonyOS技术架构HarmonyOS整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照"系统>子系统>功能/模块"逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。图1-1HarmonyOS技术架构内核层详解1内核子系统HarmonyOS采用微内核设计。内核抽象层(KAL,KernelAbstractLayer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。2驱动子系统硬件驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。系统服务层系统服务层是HarmonyOS核心能力集合,经框架层为应用提供服务,包含多个子系统集。这些子系统集可按子系统或功能粒度裁剪。系统基本能力子系统集为分布式应用在多设备上的运行等提供基础能力,含分布式软总线等子系统,为方舟运行时提供多语言运行时等。基础软件服务子系统集提供公共通用软件服务,含事件通知等子系统。增强软件服务子系统集针对不同设备提供差异化能力增强服务,含智慧屏等专业业务子系统。硬件服务子系统集提供硬件服务,含位置服务、生物特征识别等子系统。框架层与应用层框架层框架层为HarmonyOS应用开发提供了ArkTS/C/C++/JS等多语言的用户程序框架和Ability框架,以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,HarmonyOS设备支持的API也会有所不同。应用层应用层包括系统应用和第三方非系统应用。HarmonyOS的应用能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。1.1.3HARMONYOS技术特征万物互联时代的数据预测经过多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。246亿全球物联网终端GSMA预测到2025年全球物联网终端连接数量110亿消费物联网终端其中消费物联网终端连接数量(数据来自GSMA《2020年移动经济》报告)102.7亿中国物联网连接IDC预计到2025年中国物联网总连接量(数据来自IDC报告)HarmonyOS源生于万物互联时代,在万物智联时代重要机遇期,结合移动生态发展的趋势,实现了三大技术理念。技术特征一:一次开发,多端部署一个工程,一次开发上架,多端按需部署,目的是支撑开发者高效地开发多种终端设备上的应用。为了实现这一目的,HarmonyOS提供了几个核心能力:多端开发环境统一的开发工具与框架多端开发能力自适应布局与组件化开发多端分发机制按需分发到不同终端设备技术特征二:可分可合,自由流转HarmonyOS提供的元服务作为一种全新的应用形态,具有独立入口,用户可通过点击、碰一碰、扫一扫等方式直接触发,无须显式安装,由程序框架后台静默安装后即可使用。"可分可合"开发态:开发者通过业务解耦,把不同的业务拆分为多个模块部署态:开发者可以将一个或多个模块自由组合,打包成不同的AppPack独立上架分发运行态:单个HAP作为元服务分发满足单一使用场景,也可多个HAP组合为应用分发满足更复杂的使用场景"自由流转"元服务持续运行在多设备上并按需跨端迁移,或者多个设备协同起来给用户提供良好的体验。例如:手机上未完成的邮件,迁移到平板还可继续编辑手机用作文档翻页和批注,配合智慧屏完成分布式办公在分布式游戏场景,手机可作为手柄,与智慧屏配合玩游戏技术特征三:统一生态,原生智能HarmonyOS通过提供组件化、统一驱动框架、适配多芯片架构等能力,支持开发三类设备:标准设备手机、平板等轻量设备TV、手表等小型设备智能门锁等HarmonyOS提供了统一的分布式组件、模型及互联业务互操作规范等能力和规范,在操作系统层面实现鸿蒙全场景终端设备的统一互联,彻底解决了设备互联的生态难题。HarmonyOS内置强大的AI能力,面向鸿蒙生态应用的开发,通过不同层次的AI能力开放,满足开发者的不同开发场景下的诉求,降低应用的开发门槛,帮助开发者快速实现应用智能化。1.2安装开发环境1.2.1开发工具简介HUAWEIDevEcoStudio(以下简称DevEcoStudio)是基于IntelliJIDEACommunity开源版本打造,为运行在HarmonyOS系统上的应用和服务提供一站式开发平台。高效智能代码编辑支持ArkTS、JS、C/C++等语言的代码高亮、智能补齐、错误检查、自动跳转、格式化、代码查找等功能,提升代码编写效率。多端双向实时预览支持UI界面代码的双向预览、实时预览、动态预览、组件预览以及多端设备预览,便于快速查看代码运行效果。多端设备模拟仿真提供HarmonyOS本地模拟器,支持Phone等设备的模拟仿真,便捷获取测试环境。DevEcoProfiler性能调优提供实时监控能力和场景化调优模板,全方位设备资源监测,采集数据覆盖多个维度,直通代码行的调优体验。CommandLineToolsCommandLineTools集合了HarmonyOS应用开发所用到的系列工具:CodeLinter代码检查工具ohpm三方库包管理hstack命令行解析hvigor编译构建安装说明DevEcoStudio的安装较为简单,只需要按默认选项安装即可。CommandLineTools的安装更为简单,将安装包释放到磁盘某个目录即可。若想在Windows的控制台任意当前目录下使用命令行工具,将其bin目录加入环境变量path。1.2.3模拟器x86模拟器环境要求模拟器是开发调试的重要工具,使用前需确保系统满足以下要求:操作系统Windows10企业版、专业版或教育版及以上,版本不低于10.0.18363处理器具有二级地址转换(SLAT)的64位处理器,CPU支持AES指令集虚拟化CPU支持VM监视器模式扩展(IntelCPU的VT-c技术)系统内存16GB及以上OpenGL版本4.1及以上屏幕分辨率1280像素×800像素以上注意事项不支持在虚拟机系统中运行模拟器模拟器与真机差异✅支持AudioViewPickerWiFi相关能力桥接本地计算机网络通过本地计算机网络直接访问互联网❌不支持UIDesignKitTelephonyCameraKit录像、拍照/扫码和屏幕录制X86版本不支持文件删除浏览器模拟器网络配置模拟器可以通过本地计算机的网络直接访问互联网,支持WiFi相关能力和桥接本地计算机网络。模拟器访问本地网络模拟器可以通过:端口访问本地计算机服务端,其中为模拟器的默认网关。两个模拟器互联互通模拟器A::5557模拟器B::5555Step1:在:5555上监听5:80端口Step2:创建端口转发hdc-t:5555fporttcp:8001tcp:80Step3:从:5557发包给:5555::8001创建模拟器创建模拟器有两种方法:方法1:从DevEcoStudio启动对话框的【MoreAction】下拉菜单的【DeviceManager】创建方法2:创建工程后通过工具条上的【DeviceManager】创建以方法1为例,启动DevEcoStudio,选择【DeviceManager】:图1-2DevEcoStudio选择DeviceManager界面登录华为开发者帐号因为目前HarmonyOSNext版本处于Beta测试阶段,需要登录华为开发者帐号,提交申请,经审核通过后方能创建模拟器。图1-3SignIn界面图1-4注册/登录界面授权与登录成功登录成功后,需要填写相关申请,经审核通过后,再一次重复上述过程,弹出授权界面,单击"允许"按钮。图1-5访问华为账号允许界面图1-6成功登录HUAWEIDevEcoStudio客户端界面选择设备类型与配置回到DevEcoStudio,弹出设备选择界面,选择要创建的设备类型并单击"Next"按钮。图1-7选择要创建的设备类型界面可选设备包括HuaweiPhone(6.82",1260×2720px,520dpi)、HuaweiFoldable(7.85",2224×2496px,426dpi)和HuaweiTablet(10.8",2560×1600px,360dpi)。虚拟设备命名与创建完成接着填写设备名称,配置内存(默认4GBRAM)和存储(默认6GBROM),单击"Finish"按钮。图1-8虚拟设备命名界面创建成功后,弹出确认提示框,单击"OK"按钮。图1-9设备创建成功确定界面设备管理与模拟器启动在设备管理页面将出现刚创建的设备信息。如果还想继续创建设备,单击"NewEmulator"按钮。模拟器默认位置为C:\Users\Administrator\AppData\Local\Huawei\Emulator\deployed目录。图1-10创建新模拟器界面单击设备条目右边的绿色启动按钮,经过一段时间,模拟器创建并启动成功。模拟器运行界面图1-11模拟器界面常见问题排查模拟器若单击启动无反应可能由多种原因引起:HAXM安装问题:检查并确保HAXM正确安装CPU虚拟化未开启:在BIOS中开启VT-x显卡驱动不兼容:更新至最新版本尝试重启计算机检查模拟器配置和系统资源占用情况任务2创建鸿蒙应用任务描述:本任务旨在开发一个简单的鸿蒙HelloWorld应用程序,展示"HelloWorld"文本。通过创建项目的步骤,了解项目的基本结构,包括entry、src/main、resources等目录。编写代码时,掌握如何在布局文件中定义布局,并使用Text组件在界面上展示文本。运行应用时,连接鸿蒙设备或启动模拟器,单击"Run"按钮,部署并运行应用。1.3创建鸿蒙应用创建新工程启动DevEcoStudio,单击"CreateProject",选择"EmptyAbility",单击"Next"按钮。图1-12模板选择界面配置工程信息默认工程信息如下图所示,也可修改工程名称、应用包名、工程文件保存位置等,完成后单击"Finish"按钮。图1-13新建工程对话框"HelloWorld"应用比较简单,工程创建完成,仅在手机屏上显示"HelloWorld"。在模拟器中运行应用点击工具条上的设备管理下拉框,选择"DeviceManager"选项打开设备管理,启动模拟器。目前模拟器启动也需要认证。认证成功并启动模拟器后,单击工具条上的编译按钮,编译、打包、安装应用并在模拟器中显示"HelloWorld"。图1-14设备选择管理下拉菜单图1-15模拟器显示界面1.3.1工程目录结构Stage模型工程目录结构图1-16工程目录结构核心目录说明AppScope>app.json5:应用的全局配置信息,可修改应用图标及标题entry:HarmonyOS工程模块,编译构建生成一个HAP包src>main>ets:存放ArkTS源码src>main>ets>entryability:应用/服务的入口src>main>ets>entrybackupability:应用提供扩展的备份恢复能力src>main>ets>pages:应用/服务包含的页面src>main>resources:存放资源文件(图形、多媒体、字符串、布局文件等)src>main>module.json5:模块配置文件,包含HAP包配置信息工程配置文件详解build-profile.json5当前模块信息、编译信息配置项,包括buildOption、targets配置等hivigorfile.ts模块级编译构建任务脚本obfuscation-rules.txt混淆规则文件。混淆开启后,在Release模式编译时,对代码进行编译、混淆及压缩处理,保护代码资产oh-package.json5描述包名、版本、入口文件(类型声明文件)和依赖项等信息oh_modules存放三方库依赖信息工程级build-profile.json5工程级配置信息,包括签名signingConfigs、产品配置products等。products中可配置当前运行环境,默认为HarmonyOS工程级hvigorfile.ts工程级编译构建任务脚本工程级oh-package.json5描述全局配置,如依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置(parameterFile)等1.3.2创建页面首页Index.etsIndex.ets是应用的第一个显示页面。EntryAbility类是应用的入口,在其生命周期回调方法onWindowStageCreate中,调用WindowStage对象的loadContent()方法加载:onWindowStageCreate(windowStage:window.WindowStage):void{...windowStage.loadContent('pages/Index',(err)=>{...});}创建第二个页面新建第二个页面文件:在"Project"窗口,打开entry>src>main>ets目录,右击"pages"文件夹,在弹出的快捷菜单中选择"New→Page→EmptyPage"选项,命名为"SecondPage",单击"Finish"按钮。图1-17源文件夹结构它将在resources/base/profile/main_pages.json中自动添加如下路由项:{"src":["pages/Index","pages/SecondPage"]}SecondPage代码实现添加一个返回按钮,SecondPage.ets最终代码如下:importrouterfrom'@ohos.router';@Entry@ComponentstructSecondPage{@Statemessage:string='SecondPage';build(){RelativeContainer(){Text(this,message).id('txt_message').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center:{anchor:'__container__',align:VerticalAlign.Center},middle:{anchor:'__container__',align:HorizontalAlign.Center}})Button("Back").fontSize(20).width(200).fontWeight(FontWeight.Bold).alignRules({top:{anchor:'txt_message',align:VerticalAlign.Bottom},middle:{anchor:'txt_message',align:HorizontalAlign.Center}}).offset({y:'20vp'}).onClick(()=>{router.back();//导航到前次页面})}.height('100%').width('100%')}}Index页面添加导航按钮在第一个页面的Index.ets文件添加一个导航按钮,最终代码如下:importrouterfrom'@ohos.router';@Entry@ComponentstructIndex{@Statemessage:string='HelloWorld';build(){RelativeContainer(){Text(this,message).id('HelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center:{anchor:'__container__',align:VerticalAlign.Center},middle:{anchor:'__container__',align:HorizontalAlign.Center}})Button("Next").id('Next').fontSize(20).width(200).fontWeight(FontWeight.Bold).alignRules({top:{anchor:'HelloWorld',align:VerticalAlign.Bottom},middle:{anchor:'HelloWorld',align:HorizontalAlign.Center}}).offset({y:'20vp'}).onClick(()=>{router.pushUrl({url:'pages/SecondPage'});})}.height('100%').width('100%')}}1.3.3界面预览Previewer预览器在编辑窗口右上角的侧边工具栏中点击"Previewer",打开预览器显示页面及页面跳转效果。图1-18预览器显示DevEcoStudio为开发者提供了UI界面预览功能,可以查看UI界面效果,方便开发者随时调整UI布局。预览器支持界面代码的实时预览,只需要将开发的源代码进行保存,即可通过预览器实时查看组件/界面运行效果。预览器功能详解实时预览在开发界面UI代码过程中,如果添加或删除了UI组件,只需按Ctrl+S快捷键保存,预览器就会立即刷新预览结果。如果修改了组件的属性,预览器则会实时(亚秒级)刷新预览结果,达到极速预览的效果。当前版本极速预览仅支持ArkTS组件,支持部分数据绑定场景(如@State装饰的变量)。动态预览在预览器界面,可以在预览器中操作应用/服务的界面交互动作,如单击、跳转、滑动等,与应用/服务运行在真机设备上的界面交互体验一致。打开预览器的方法在菜单栏中单击"View→ToolWindows→Previewer"打开预览器在编辑窗口右边侧边工具栏中单击"Previewer",打开预览器预览器注意事项预览器功能依赖于电脑显卡的OpenGL版本,OpenGL版本要求为3.2及以上。预览时将不会运行Ability生命周期引用了HSP的模块不支持预览,请直接在HSP内预览或模拟HSP预览场景下,不支持通过相对路径及绝对路径的方式访问resources目录下的文件预览不支持组件拖拽部分API不支持预览,如Ability、App、MultiMedia等模块RichText、Web、Video、XComponent等组件不支持预览不支持调用C++库的预览har在被应用/服务使用时的真机效果有区别,真机上实际效果中应用不显示menubar,服务显示menubar,但预览器都以不显示menubar为准1.4代码调试调试准备HarmonyOS应用/服务支持使用真机设备、模拟器、预览器进行调试。准备工作如下,在Index.ets中添加如下代码:importrouterfrom'@ohos.router';functionfuncA(){leta=10;console.log('funcA');}functionfuncB(){letb=20;funcA();}funcB();@Entry@ComponentstructIndex{...1.4.1预览器调试预览器调试使用真机或模拟器进行调试时,修改后的代码需要经过较长时间的编译和安装过程,才能刷新至测试环境。使用预览器进行调试,可快速地修改代码和运行应用,在DevEcoStudio中直接查看修改后的界面显示效果。预览器调试支持基础Debug能力,包括断点、调试执行、变量查看等。预览器调试使用约束一个工程内不支持启动多个预览调试任务一个Previewer只能支持普通预览或预览调试模式,不可同时支持两种模式不支持Attach、跨Ability调试、C++调试不支持极速预览、HotReload不支持多进程和worker/taskpool调试断点设置与调试示例(1)在EntryAbility.ets的第16行处打上断点。光标置于该行上并按Ctrl+F8快捷键下断点,再次按下则取消断点。在设置的断点红点处右击,在Condition中可以设置条件断点。图1-19程序断点设置图1-20在Index.ets程序中设置断点启动调试与Debug视图(3)在设备选择框中选择设备为"Previewer",(4)点击工具条中的调试按钮启动调试。图1-21在设备选择框中选择设备为Previewer(5)启动调试后,Debug视图显示,程序停止在断点处。窗口左栏显示函数调用栈,窗口右栏可以观察变量值。图1-22Debug视图调试调试器工具按钮图1-23调试器工具01执行到下一个断点如果下一个断点存在则执行到该处,否则调试正常结束02单步执行(StepOver)如果是函数调用语句,则执行函数,不进入函数调试03单步进入(StepInto)如果是函数调用语句,则进入函数调试04单步跳出(StepOut)如果是在函数中,则函数执行完毕后跳出函数,返回到函数调用处05执行到光标处程序运行到光标所在行暂停06终止调试调试非正常结束,停止程序运行反向调试(RestartFrame)目前程序中断在函数funcA(),函数调用栈窗口中从下往上形成了一个函数调用栈:Index.ets脚本调用了函数funcB(),函数funcB()又调用了函数funcA()。图1-24函数调用栈窗口在ArkTS调试模式下,程序中断时,在调用栈窗口右击,选择"RestartFrame"选项,可以回退到上一个调用栈。图1-25选择RestartFrame断点返回函数funcB()中:图1-26断点返回函数funcB()1.4.2模拟器调试模拟器调试模拟器调试的场景比预览器调试更为全面,更接近真机设备调试。1设置调试代码类型通过Run→EditConfigurations→Debugger设置调试代码类型。默认为DetectAutomatically。2设置HAP安装方式通过Run→EditConfigurations设置。默认为覆盖安装方式(已勾选"KeepApplicationData"),不卸载应用/服务,该方式会保留应用/服务的缓存数据。3设置LaunchOptions默认为"DefaultAbility",即在module.json5文件中配置指定的mainElement配置项值。也可用"SpecifiedAbility"选项指定工程中的ExtensionAbility。4增量调试启动调试后,修改完代码后点击"ApplyChange"推送增量包安装至设备。DevEcoStudio启动增量构建任务,构建出增量包hqf。注意:暂不支持新建和删除代码文件,暂不支持修改装饰器相关内容,暂不支持使用import新增引用文件。1.4.3真机调试真机调试启用开发者模式在手机上操作:"设置→关于手机/关于平板"中,连续七次单击"版本号",直到提示"开启开发者选项",点击确认开启后输入PIN码(如果已设置),设备将自动重启。启用USB调试用USB线连接手机和计算机,通过设备授权确认。开启并授权后,手机才能连接到计算机进行调试。连接成功后可在设备选择框中看到手机设备。此连接用于复制数据、安装/卸载调试应用、读取日志数据等。选择真机设备调试在设备选择框中选择设备为真机,调试操作参看模拟器调试流程。1.4.4打印日志HiLog日志系统在应用开发过程中,可在关键代码处输出日志信息。在运行应用后,通过查看日志信息来分析应用执行情况。系统提供HiLog与console两个API供开发者调用并输出日志信息。HiLog日志级别HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别,日志最多打印4096字节,超出限制文本将被截断。isLoggable()在打印日志前调用,检查指定领域标识、日志标识和级别的日志是否可以打印debug()输出DEBUG级别日志。仅用于应用/服务调试。需通过命令hdcshellhilogcat设置可打印日志等级为DEBUGinfo()输出INFO级别日志。表示普通的信息warn()输出WARN级别日志。表示存在警告error()输出ERROR级别日志。表示存在错误fatal()输出FATAL级别日志。表示出现致命错误,不可恢复错误HiLog参数说明domain用于指定输出日志所对应的业务领域,取值范围为0x0000~0xFFFF,开发者可以根据需要进行自定义。tag用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。level用于指定日志级别。format格式字符串,用于日志的格式化输出。日志需按照%(privateflag)specifier的格式化参数打印。隐私标识符与格式说明符private日志打印结果不可见public日志打印结果可见,明文显示参数无(缺省)默认为private,日志打印结果不可见d/i支持打印number和bigint类型,示例:123s支持打印string,undefined,boolean和null类型,示例:"123"console调试控制台console提供了一个简单的调试控制台,类似于浏览器提供的JavaScript控制台机制。主要方法如下:debug()以格式化输出方式打印调试信息log()以格式化输出方式打印日志信息info()以格式化输出方式打印日志信息,与log相同warn()以格式化输出方式打印警告信息error()以格式化输出方式打印错误信息assert()断言打印dir()打印对象内容table()以表格形式打印数据time()/timeEnd()启动/关闭计时器并打印经过的时间(单位:ms)timeLog()对于先前通过console.time()启动的计时器,打印经过时间和其他data参数trace()打印当前堆栈traceHybridStack()在主线程/worker线程中可打印当前线程混合堆栈信息查看日志与故障日志查看日志(HiLog窗口)DevEcoStudio提供了Log>HiLog窗口查看当前设备所有应用实时打印的日志信息。支持以下过滤方式:按关键字过滤:在搜索框中输入需要过滤的信息,支持区分大小写和正则表达式匹配使用默认过滤配置:切换相应的过滤项即可快速过滤所需日志按日志级别过滤:Debug、Info、Warn、Error、Fatal按自定义过滤项过滤:点击"Configcustomfilter"配置自定义过滤项并保存以重复使用故障日志(FaultLog)DevEcoStudio提供了Log>FaultLog窗口查看应用运行发生错误时抛出的错误日志。FaultLog由系统自动从设备进行收集,包括以下几类故障信息:AppFreezeCPPCrashJSCrashSystemFreezeASan在ArkTS中,JSCrash是常见的一种故障信息。1.5工程构建1.5.1ArkCompiler简介方舟编译器(ArkCompiler)运行时为HarmonyOS应用提供了运行环境。它是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编译运行时平台。ArkCompiler主要分成两个部分:编译工具链与运行时。ArkCompilereTSRuntime主要由四个子系统组成:CoreSubsystem、ExecutionSubsystem、CompilerSubsystem、RuntimeSubsystem。原生支持类型静态类型检查,ArkTS代码编译成方舟字节码文件并发模型优化Taskpool和Worker支持并发编程,优化启动性能和内存开销安全安全可靠的运行时环境ArkCompiler类型优化与AOTArkCompiler提供对TypeScript(TS)的原生支持。在前端编译TS源码时,会利用TS的显式类型声明,应用类型推导进行类型优化,并且将推导出的类型信息通过字节码文件保留至运行时,由此运行时可以直接利用类型信息执行快速路径。AOTCompilationTypeInferenceTSSource静态的类型分析和推导也使得TSAOT(AheadofTime)Compiler成为可能,静态分析得到的类型信息帮助AOTCompiler直接编译生成高质量的机器码,使得TS源码可以直接以机器码形式运行,进一步提升运行性能。ArkCompiler运行时在HarmonyOS上提供了Taskpool和Worker支持并发编程。在运行时实例内存隔离的基础上,通过共享运行实例中的不可变或者不易变的对象、内建代码块、方法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。1.5.2编译构建Hivigor构建工具HarmonyOS应用/服务的构建工具为Hivigor,对Node版本要求为v14.18.3及以上。构建体系由Hivigor构建工具和构建插件组成。Hivigor构建工具是一款全新基于TS实现的、由Node运行的前端构建任务编排工具,结合npm包管理机制,主要提供任务管理机制、任务注册编排、工程模型管理、配置管理等关键能力,更符合ArkTS/JS开发者的开发习惯。编译构建配置文件DevEcoStudio会自动配置配套版本的编译工具和构建插件依赖,如需修改可修改hivigor目录下的hivigor-config.json5文件:{"modelVersion":"5.0.0","dependencies":{"@ohos/hivigor-ohos-plugin":"5.0.0"},...}与编译、构建相关的配置文件及目录.hvigor目录包含构建配置信息、TS依赖包、npm包等内容hvigor-config.json5设置编译选项、hvigor及插件版本hvigorfile.ts工程级编译构建任务脚本,可创建自定义task和pluginbuild-profile.json5配置App签名信息、SDKAPI版本号、构建模式和多module信息oh-package.json5声明项目名称、版本号、描述、入口和依赖信息obfuscation-rules.txt代码混淆规则文件,release模式编译时自动按规则进行代码混淆签名文件打包签名需要证书文件(.cer)、Profile文件(.p7b)及密钥库文件(.p12)工程构建命令工程构建可以用命令行工具hvigorw脚本,也可用DevEcoStudio的Build菜单项实现。hvigorw脚本命令需要在工程根目录下执行。1清理项目hvigorwclean-mproject清理项目级构建产物build目录对应菜单项:Build>CleanProject2构建HAPhvigorwassembleHap--no-daemon构建HAP应用,禁用hvigordaemon,每次构建使用全新运行时环境对应菜单项:Build>BuildHap(s)/APP(s)3指定模块构建hvigorwassembleHap-mmodule=entry指定需要打包HAP的具体模块,不指定时默认打所有产物为HAP的模块上述命令行参数也可在hvigor/hvigor-config.json5中设置。1.6应用程序包应用程序包概述用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序。HarmonyOS的应用程序包有4种,分别为HAP、HSP、HAR及APP,前3种与模块(Module)相关,而APP包主要用于上架到华为应用市场。通常,在开发态,一个应用包含一个或者多个模块,每个模块实现特定的功能。将不同的功能特性按模块来划分和管理是一种良好的设计方式。模块是HarmonyOS应用/服务的基本功能单元。模块按照使用场景可以分为两种类型:Ability类型模块和Library类型模块。在应用配置文件module.json5中,模块类型为entry、feature、har及shared。Ability类型模块Ability类型的模块用于实现应用的功能和特性,是应用的主模块。每一个Ability类型的模块编译后,会生成一个以.hap为后缀的文件,即HAP(HarmonyAbilityPackage)包。HAP包可以独立安装和运行,是应用安装的基本单位。entry类型模块应用的主模块,包含应用的入口界面、入口图标和主功能特性,编译后生成entry类型的HAP。每一个应用分发到同一类型的设备上的应用程序包,只能包含唯一一个entry类型的HAP。feature类型模块应用的动态特性模块,编译后生成feature类型的HAP。一个应用中可以包含一个或多个feature类型的HAP,也可以不包含。Library类型模块Library类型的模块用于实现代码和资源的共享。同一个Library类型的模块可以被其他模块多次引用,合理使用能够降低开发和维护成本。Library类型的模块分为Static和Shared两种类型。StaticLibrary(HAR)静态共享库,编译后生成.har文件,即静态共享包HAR(HarmonyArchive)。代码和资源跟随使用方编译如果有多个使用方,编译产物中会存在多份相同拷贝除支持应用内引用,还可独立打包发布,供其他应用引用模块依赖都会打包到HAP里SharedLibrary(HSP)动态共享库,编译后生成.hsp文件,即动态共享包HSP(HarmonySharedPackage)。代码和资源可以独立编译,运行时在一个进程中代码只会存在一份一般随应用进行打包,支持应用内和集成态HSP不支持独立打包发布,跟随宿主应用的APP包一起发布与宿主应用同进程,具有相同的包名和生命周期项目2:ArkTS语言HarmonyOS优选的主力应用开发语言——ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行的稳定性和性能。本项目将详细讲解ArkTS语法与ArkUI框架的基础知识。导学课程导学与目标概览ArkTS在UI开发框架(ArkUI)中主要扩展了三大能力:以声明式UI为主体的基本语法、多维度状态管理机制以实现数据和UI的联动、以及UI渲染控制能力。本项目将围绕这三大核心能力展开系统学习。🎯知识目标掌握ArkTS语言和开发特性掌握ArkUI框架的组件分类与声明式开发范式理解状态管理机制(@State/@Prop/@Link)及其在数据驱动UI中的应用熟悉条件渲染(if/else)与循环渲染(ForEach)的实现原理掌握@Extend样式扩展、@Builder构建函数和自定义组件的封装方法理解组件级与应用级状态管理的区别与适用场景掌握组件生命周期的管理与业务逻辑集成💪能力目标能熟练运用ArkTS进行开发调试能运用ArkTS声明式语法构建复杂UI界面能根据业务需求实现条件渲染与循环渲染能合理运用生命周期方法管理资源加载与释放能通过阅读文档实现跨组件状态共享🌟素质目标培养独立分析问题、解决问题的能力培养科学严谨的学习、工作态度养成良好的职业素养任务1ArkTS语言介绍应用的核心驱动是开发语言。HarmonyOS采用自有的ArkTS语言,是开发鸿蒙应用的基本工具。本任务针对ArkTS的关键核心语法进行介绍,利用ArkTS语言构建一个商品数列列表,并打印价格最低的商品信息。2.1ARKTS的简介从TypeScript到ArkTSArkTS兼容TS/JavaScript(简称JS)生态,开发者可以使用TS/JS进行开发或复用已有代码。从TypeScript到ArkTS的适配遵循以下核心规则:1强制使用静态类型程序中变量的类型确定,编译器可以验证代码的正确性,从而减少运行时的类型检查,有助于性能提升。2禁止运行时改变对象布局为实现最大性能,ArkTS要求在程序执行期间不能更改对象布局。3限制运算符语义为获得更好的性能并鼓励开发者编写更清晰的代码,ArkTS限制了一些运算符的语义。例如,一元加法运算符只能作用于数字,不能用于其他类型的变量。4不支持Structuraltyping对Structuraltyping的支持需要在语言、编译器和运行时进行大量的考虑和仔细的实现,当前ArkTS不支持该特性。ArkTS的UI能力ArkTS在UI开发方面提供了三大核心能力,构成了HarmonyOS应用界面开发的完整体系:基本语法能力ArkTS提供声明式UI、组件及扩展能力,构成UI开发核心。开发者可以用接近自然语义的方式描述界面结构。状态管理能力ArkTS支持多层次(组件内、跨组件、全局、跨设备)数据传递(单向/双向),实现数据UI联动。渲染控制能力ArkTS支持条件渲染、循环渲染和数据懒加载,灵活控制UI组件的显示与生成。2.2数据与运算数据类型、变量与运算ArkTS数据的定义和运算是应用的核心结构与语法。本节介绍基于ArkTS语言的数据类型、变量和变量的运算。在学习调试过程中,可以使用console.log日志打印方法查看与调试数据。//日志打印格式console.log(日志字符串)console.log('HelloWorld');类型与变量ArkTS通过声明引入变量、常量、函数和类型。变量声明(let)以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。声明时可以赋初始值,也可以在后续时刻赋值。letbianliang:string='hello';bianliang='hello,world';常量声明(const)以关键字const开头的声明引入只读常量,该常量只能被赋值一次,对常量重新赋值会造成编译时错误。constchangliang:string='hello';//changliang='hello,world';//报错基本数据类型基本数据类型包括number、boolean、string等简单类型,可以准确地表示单一的数据类型。基本类型确保数据在存储和访问时是直接的,比较时直接比较其值。number类型任何整数和浮点数都可以被赋给此类型的变量。数字字面量包括整数字面量和十进制浮点数字面量。整数字面量类别:十进制整数:0、117、-345十六进制整数(0x开头):0x1123、0x00111、-0xF1A7八进制整数(0o开头):0o777二进制整数(0b开头):0b11、0b0011、-0b11浮点字面量:包含十进制整数、小数点、小数部分,以及可选的以"e"或"E"开头的指数部分。letn1=3.14;letn2=.5;letn3=1e2;boolean类型由true和false两个逻辑值组成,通常在条件语句中使用。letisDone:boolean=false;if(isDone){console.log('Done!');}string类型代表字符串序列,可以使用转义字符来表示字符。字符串字面量由单引号(')或双引号(")括起来,还有用反向单引号(`)括起来的模板字面量。lets1='Hello,world!\n';leta="Success";lets3=`Theresultis${a}`;引用数据类型ArkTS中的引用类型(如对象、数组和函数等)是通过引用访问的复杂数据结构。对象和数组可以包含多个值或键值对,函数则可以封装可执行的代码逻辑。引用类型在内存中通过指针访问数据,修改引用会影响原始数据。Object类型所有引用类型的基类型。任何值(包括基本类型的值,会被自动装箱)都可以直接被赋给Object类型的变量。enum类型(枚举)预先定义的一组命名值的值类型。使用枚举常量时必须以枚举类型名称为前缀。常量表达式可以用于显式设置枚举常量的值。enumColorSet{Red,Green,Blue}letc:ColorSet=ColorSet.Red;union类型(联合类型)由多个类型组合成的引用类型,包含了变量可能的所有类型。可以将类型为联合类型的变量赋值为任何组成类型的有效值。typeAnimal=Cat|Dog|number;数组类型(Array)由可赋值给数组声明中指定的元素类型的数据组成的对象。数组中第一个元素的索引为0。letnames:string[]=['Alice','Bob','Carol'];void类型用于指定函数没有返回值。此类型只有一个值,同样是void。由于void是引用类型,可用于泛型类型参数。运算符运算符是数据的基本操作,分为赋值运算符、比较运算符、算数运算符、位运算符和逻辑运算符。赋值运算符赋值运算符为=,使用方式如x=y。复合赋值运算符(以op表示)将赋值与运算符组合在一起,其中x\text{op}=y等于x=x\text{op}y。复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。比较运算符===严格相等,返回true!==严格不相等,返回true==相等,返回true!=不相等,返回true>/>=大于/大于等于</<=小于/小于等于算数运算符一元运算符:-、+、~、!、+++加法-减法*乘法/除法%除法后余数逻辑运算符a&&b逻辑与a||b逻辑或!a逻辑非位运算符位运算符用于对二进制位进行操作,是底层数据处理的重要工具。运算符说明a&b按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0a|b按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0a^b按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0~a按位非:反转操作数的位a<<b左移:将a的二进制表示向左移b位a>>b算术右移:将a的二进制表示向右移b位,带符号扩展a>>>b逻辑右移:将a的二进制表示向右移b位,左边补02.3流程控制条件分支语句流程控制可通过条件分支语句和循环语句完成。条件分支语句包括if语句、switch语句和条件表达式。if语句用于需要根据逻辑条件执行不同语句的场景。当逻辑条件为真时,执行对应的一组语句,否则执行另一组语句(如有)。条件表达式可以是任何类型,对于boolean以外的类型会进行隐式类型转换。if(condition){//语句1}elseif(condition2){//语句2}else{//else语句}switch语句执行与switch表达式值匹配的代码块。如果没有任何label值匹配且有default子句,则执行default代码块。break语句(可选)允许跳出switch语句。switch(expression){caselabel1://语句1break;caselabel2:caselabel3://语句23break;default:}条件表达式由condition的布尔值来决定整体表达式的值为expression1或expression2。//condition?expression1:expression2letmessage=Math.random()>0.5?'Valid':'Failed';循环语句循环语句可以实现代码的重复调用,完成复杂的迭代功能。ArkTS提供了for、for-of、while、do-while四种循环语句。for循环for语句会被重复执行,直到循环退出语句值为false。执行流程:①执行init表达式→②计算condition→③执行循环主体→④执行update表达式→⑤回到步骤②。letsum=0;for(leti=0;i<10;i+=2){sum+=i;}for-of循环使用for-of语句可遍历数组或字符串。for(letchof'astringobject'){/*processch*/}while循环只要condition为真值,while语句就会执行statements语句。letn=0;letx=0;while(n<3){n++;x+=n;}do-while循环如果condition的值为真值,那么statements语句会重复执行。与while不同的是,do-while至少执行一次。leti=0;do{i+=1;}while(i<10)2.4函数函数的定义与使用函数是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用,提高开发效率。函数声明与调用函数声明(又称函数定义)引入一个函数,包含其名称、参数列表、返回类型和函数体。函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问(作用域)。如果函数中定义的变量与外部作用域中已有实例同名,则函数内的局部变量定义将覆盖外部定义。//函数定义functionjoin(x:string,y:string):string{letz:string=`${x}${y}`;returnz;}//函数的调用letx=join('hello','world');console.log(x);参数列表的格式可选参数格式为name?:Type。当参数有可选参数时,参数的形参可以不给入,函数体中可用undefined进行判断。functionhello(name?:string){if(name==undefined){console.log('Hello!');}else{console.log('Hello,$(name)!');}}Rest参数函数的最后一个参数可以是rest参数,格式为...restArgs。rest参数允许函数接收一个由剩余实参组成的数组,用于处理不定数量的参数输入。functionsum(...numbers:number[]):number{letres=0;for(letnofnumbers)res+=n;returnres;}sum(1,2,3);//返回6箭头函数与函数类型函数可以定义为箭头函数。箭头函数是匿名函数,只有参数列表和函数体。箭头函数定义箭头函数的返回类型可以省略,省略时返回类型通过函数体推断。表达式可以指定为箭头函数,使表达更简短。//完整写法(x:number,y:number):number=>{returnx+y;}//省略返回值类型(x:number,y:number)=>{returnx+y;}//简写表达式(x:number,y:number)=>x+y箭头函数调用箭头函数有两种调用方法://定义时直接调用((x:number,y:number)=>{returnx+y;})(1,2)//用变量存储后调用letsum=(x:number,y:number)=>{returnx+y;};sum(1,2);函数的类型用来表达存储匿名函数变量的类型就是函数类型:letsum:(x:number,y:number)=>number=(x:number,y:number)=>{returnx+y;};sum(1,2);2.5类和接口类和接口类与接口是构建可靠、可扩展程序的两大支柱。类是具体实现蓝图,它封装了数据与行为,用于创建对象实例。而接口则是一种纯粹的类型契约,它定义了对象应有的形状(有哪些属性或方法),但不关心具体实现。类和对象类的定义与实例化类声明引入一个新类型,并定义其字段、方法和构造函数。定义类后,可以使用关键字new创建实例,或者用对象字面量创建对象实例。classPerson{name:string='';surname:string='';constructor(n:string,sn:string){=n;this.surname=sn;}fullName():string{return+''+this.surname;}}letp=newPerson('John','Smith');console.log(p.fullName());类的继承一个类可以继承另一个类(称为基类),并使用extends关键字实现。继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。classEmployeeextendsPerson{salary:number=0;calculateTaxes():number{returnthis.salary*0.42;}}接口接口声明引入新类型。接口是定义代码协定的常见方式。任何一个类的实例只要实现了特定接口,就可以通过该接口实现多态。接口通常包含属性和方法的声明。接口定义方法interfaceStyle{color:string;}interfaceAreaSize{calculateAreaSize():number;someMethod():void;}接口作为数据结构接口常用来代替类以表示一个数据结构:interfacePerson{name:string;age:number;weight:number;}letperson:Person={name:"张三",age:18,weight:100}任务1实施:商品列表查询根据任务描述,利用ArkTS语言构建一个商品数列列表,并打印价格最低的商品信息。遍历查最小创建数组定义接口以下为核心实现代码:interfaceProduct{name:string;price:number;imageSrc:string;}letproducts:Product[]=[{name:'HuaweiMate70',price:5999,imageSrc:'https://...'},//...省略其他商品数据]letcheapProduct:Product={name:'',price:99999,imageSrc:''};for(letproductsElementofproducts){if(productsElement.price<cheapProduct.price){cheapProduct=productsElement;}}console.log('价格最低的手机是:${cheapP},价格为:${cheapProduct.price}');运行后日志打印效果:I价格最低的手机是:HuaweiMate70,价格为:5999任务1思考与拓展💡拓展提升本任务学习使用了ArkTS的基本语法,完成了一个商品列表的数据查询功能。针对查询方法,可以尝试封装成函数进一步提升代码的可维护性。🔍思考感悟通过本任务学习,我们深入理解了ArkTS作为HarmonyOS核心开发语言的设计理念与语法特性。ArkTS在TypeScript生态基础上,通过静态类型检查、对象布局约束等规则,显著提升了代码的健壮性与执行效率。任务2认识组件与页面在APP开发中,界面设计直接影响用户体验。本任务通过创建一个包含文本、按钮和输入框的登录界面,利用组件构建直观的UI。任务将从组件的概念、排布、样式和点击事件几个维度展开。2.6页面ArkUI的基本概念方舟开发框架(ArkUI)为鸿蒙应用的UI开发提供了完整的基础设施底座,包括简洁的UI描述、丰富的UI功能,以及实施界面预览工具,并支持开发者进行可视化的界面开发。UI即用户界面,是用户与应用交互的视觉层。组件UI构建与显示的最小单位,如列表、网格、按钮、单选框、进度条、文本等。ArkUI作为一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建应用UI所必需的能力,主要包括:ArkTS、布局、组件、页面路由与导航、图形、动画、交互事件、自定义能力。移动应用开发框架对比系统开发语言开发框架特点HarmonyOSArkTSArkUI声明式、跨设备AndroidKotlin/JavaJetPackCompose声明式UIiOSSwiftSwiftUI声明式UI第三方DartFlutter跨平台ArkUI框架架构ArkUI框架作为HarmonyOS系统的核心基础设施,其整体架构采用分层设计,从上到下依次为应用层、声明式UI前端、语言运行时、声明式UI后端引擎、渲染引擎、平台适配层和OS。应用层声明式UI前端范式语法基础规范、UI组件/布局/动画、状态管理语言运行时统一字节码、类型系统、AOT、GC机制声明式UI后端引擎基础控件、布局、动效、事件、组件状态管理、内存管理、渲染管线渲染引擎→平台适配层→OS开发范式在HarmonyOS中,ArkUI提供了两种开发范式。ArkUI推荐采用声明式开发范式来构建UI,这种范式可以让开发者以接近自然语义的编程方式描述UI,而无须关注底层绘制和渲染细节,且内存占用更少,性能更优。类Web开发范式也称命令式开发范式,采用经典的HTML、CSS、JavaScript三段式开发方式。该范式更符合Web前端开发者的使用习惯,便于快速将已有的Web应用改造。声明式开发范式(推荐)采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。将持续增强功能,为开发者提供更丰富、更强大的能力支持。ArkUI声明式语法结构以下展示了一个典型的声明式开发范式结构,点击按钮后文本从"HelloWorld"变为"HelloArkUI"。案例代码的基本组成包括:自定义组件(@Component装饰的struct)、装饰器(@Entry、@Component、@State)、UI描述(build()方法)、系统组件(Column、Text、Divider、Button)、属性方法(fontSize()、width()、height())、事件方法(onClick())。声明式语法核心要素详解1自定义组件简称"组件",是可复用的UI单元,可组合其他组件。使用@Component装饰的struct结构。它是基本的UI元素,用户看到的所有界面UI元素都由这种struct结构组成。2装饰器用于装饰类、结构、方法以及变量,并赋予其装饰对象特殊的含义。@Component表示自定义组件;@Entry约束为入口组件(页面根节点,一个页面有且只能有一个);@State限定状态变量,状态变量变化会触发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑地基处理桩位偏差控制方法选择
- React天气模块化设计课程设计
- 心理疾病康复训练计划
- 妇科肿瘤手术后恢复护理方案
- 插画设计色彩应用规范
- 设计师软件制作要点解析
- 耳鼻喉科慢性鼻炎患者饮食禁忌
- 肝病肝性脑病综合治疗教程
- 老年住宅室内设计方案
- 设计考察执行规范与实施路径
- 井冈山大学《经济地理学》2025-2026学年期末试卷
- 2026江苏苏州市健康养老产业发展集团有限公司下属子公司招聘15人(第二批)笔试参考试题及答案解析
- 2026贵州黔西南技师学院公开招聘事业单位工作人员14人考试备考试题及答案解析
- 心脏介入护理新进展与分享
- 人物杨振宁介绍
- 历史(四川卷)(考试版)-2026年高考考前预测卷
- 北京保障房中心有限公司法律管理岗笔试参考题库及答案解析
- 大学生创新创业基础(广西师范大学)知到知识点掌握度满分答案题库
- 瑞幸咖啡2025品牌年终报告
- 2026年高考作文备考之一材多用:张雪机车夺冠-二十年铸就“飞驰人生”
- 《物联网设备安装与调试》课程标准
评论
0/150
提交评论