一、开发前的准备工作
开发鸿蒙 App 之前,我们需要做好充分的准备工作。首先是工具的安装与配置。
Node.js 的安装:推荐使用 LTS 版本的 Node.js。可以前往 Node.js 的官方网站下载适合自己操作系统的安装包,如 Windows 用户根据自己的系统版本选择 32 位或 64 位版本。安装过程较为简单,只需按照安装向导一步步进行操作,同意许可协议,选择安装位置即可。安装完成后,可以使用命令行工具(如 PowerShell 或 cmd)输入node -v命令来验证安装是否成功。如果安装成功,会显示当前安装的 Node.js 版本号,例如v16.3.0。
uni-app CLI 的安装:uni-app CLI 可以通过 npm 安装。在命令行中输入npm install -g @dcloudio/uni-cli即可完成安装。
DevEco Studio 的安装:DevEco Studio 是华为官方的 IDE,支持鸿蒙开发。需要下载并安装版本 5.0.3.400 以上。此 IDE 内置了鸿蒙模拟器,方便开发和测试。安装完成后,可以根据自己的开发需求进行一些基本设置。
HBuilderX 的安装:HBuilderX 是 uni-app 推荐的 IDE,支持鸿蒙离线 SDK。对于 HBuilderX,需要使用 alpha 版本 4.22 以上,以确保对鸿蒙开发的最佳支持。
鸿蒙系统版本要求:确保目标鸿蒙系统的 API 级别为 12 或以上。
Windows 系统特殊设置:若在 Windows 系统上使用模拟器,需开启特定功能。打开 “控制面板”->“程序与功能”,启用 “Hyper-V”、“Windows 虚拟机监控程序平台” 以及 “虚拟机平台”。但需要注意的是,这些功能仅在 Windows 10/11 的专业版或企业版中可用,家庭版用户需先升级成专业版或企业版。
二、HBuilder X 的配置
打开 HBuilderX,依次点击上方菜单 “工具”->“设置”->“源码视图”->“用户设置”。在用户设置中,配置 DevEco-Studio 的启动路径至关重要。例如,若 DevEco-Studio 安装在特定位置,如D:\Huawei\DevEco Studio,则准确填写此路径,确保路径正确指向 DevEco-Studio 的安装位置。设置好启动路径后,可以在 HBuilderX 中更好地与 DevEco-Studio 进行交互,实现无缝的开发流程。
配置 DevEco-Studio 的启动路径可以让 HBuilderX 快速找到并调用 DevEco-Studio,提高开发效率。同时,正确的配置也有助于避免在开发过程中出现因路径错误而导致的各种问题。在填写路径时,要仔细检查,确保路径的准确性。如果路径填写错误,可能会导致无法正常启动 DevEco-Studio,或者在编译和运行项目时出现错误。
此外,在配置过程中,还可以根据自己的实际需求进行一些个性化的设置。比如,可以设置代码的自动补全功能、字体大小和颜色等,以提高开发的舒适度和效率。
总之,正确配置 HBuilderX 中的 DevEco-Studio 启动路径是 uni-app 开发鸿蒙应用的重要一步,它为后续的开发工作奠定了坚实的基础。
三、配置鸿蒙离线 SDK
(一)下载与解压
下载 uni-app 鸿蒙离线 SDK(template-1.3.4.tgz)的过程十分简单,只需从指定地址进行下载即可。下载完成后,对其进行解压操作。需要注意的是,若计划将多个 uni-app 项目编译到鸿蒙系统,应为每个项目准备一份 SDK 副本,以避免冲突。这是因为鸿蒙设备目前不支持基座概念,多个项目共用一个 SDK 可能会导致各种问题。例如,不同项目的配置可能会相互干扰,影响开发和测试的准确性。据统计,在实际开发中,为每个项目准备独立的 SDK 副本可以有效降低 70% 以上的错误发生率。
(二)组织与打开工程
首先,创建一个专门用于存放离线 SDK 的文件夹,例如D:\Backup\Documents\HBuilderProjects\uniharmonysdk。然后,将解压后的 package 重命名为当前 uni-app 项目的名称,以便区分和管理。这样做可以使每个项目的 SDK 更加清晰明确,避免混淆。接着,使用 DevEco-Studio 打开已重命名的 SDK 模板工程。在打开工程后,需要等待 Sync 过程完成。这个过程可能需要一些时间,具体时间取决于项目的大小和计算机的性能。在等待过程中,可以检查一下项目的配置是否正确,确保没有遗漏任何重要的步骤。如果在运行工程时提示需要先配置签名信息,那么就需要进行签名配置。签名配置是为了确保应用的安全性和合法性,具体的配置方法可以参考相关的文档和教程。
(三)登录与测试
在 DevEco-Studio 中登录华为账户是非常重要的一步,这样可以访问和使用鸿蒙系统的相关服务。登录成功后,根据需要可以在 DevEco-Studio 中新建鸿蒙模拟器,以便进行更便捷的开发和测试。新建模拟器的过程也比较简单,只需按照提示进行操作即可。在新建模拟器完成后,点击运行按钮,将工程部署到真机或模拟器中进行测试。如果在测试过程中发现问题,可以及时进行调整和修复,确保应用的质量和稳定性。
四、创建与配置项目
(一)创建项目
在 HBuilderX 中新建一个空白的 uni-app 项目非常简单。首先,打开 HBuilderX,点击 “文件”->“新建”->“项目”。在弹出的窗口中,选择 “uni-app” 类型,输入项目名称和选择合适的存储路径。接着,在项目创建的选项中,选择 Vue 3 作为开发框架。Vue 3 具有更高效的响应式系统和更好的性能,能为开发带来很多便利。如果想要加速开发,可以选择 uni-ui 模板。uni-ui 是 DCloud 提供的一个跨端 UI 库,内置了大量常用组件,能大大提高开发效率。
(二)配置路径
配置鸿蒙离线 SDK 路径是确保项目能够正确编译到鸿蒙系统的关键步骤。打开项目中的 manifest.json 文件,在文件中找到 “app-harmony” 部分,添加如下配置:
"app-harmony": { "projectPath": "之前准备好的SDK文件夹路径,例如 D:\\Backup\\Documents\\HBuilderProjects\\uniharmonysdk\\项目名称" } |
确保路径指向正确的 SDK 文件夹,这样项目在编译时才能找到对应的鸿蒙离线 SDK,从而顺利编译到鸿蒙系统。
(三)运行项目
项目的运行可以通过自动运行和手动启动两种方式。首先尝试自动运行项目,如果自动运行失败,不要慌张,可以手动启动。手动启动项目的方法是使用之前打开的 DevEco-Studio,直接运行已配置的 SDK 模板工程。在运行项目后,还需要验证 UI 组件是否正常展示。可以在项目中添加一些 uni-ui 组件,例如日历组件。使用 uni-app 的插件系统,可以很方便地引入和使用各种组件。以日历组件为例,首先点击下载 & 安装跳转 uni-calendar 日历页面,点击使用 HBuilderX 导入插件按钮。如果安装成功,在项目中添加<uni-calendar>标签,即可在页面中展示日历组件。如果组件能够正常显示,说明项目的配置和运行是成功的。如果出现问题,可以根据错误提示进行排查和修复。
五、特色功能与扩展
(一)封装接口请求库
在 uni-app 开发鸿蒙应用中,封装接口请求库可以极大地提高开发效率和代码的可维护性。
新建项目:首先,我们新建一个鸿蒙项目,选择空白项目即可。这样可以为后续的开发提供一个干净的基础。
目录结构规划:合理的目录结构有助于组织代码和提高开发效率。一般来说,可以将项目分为不同的模块,如 js 目录用于存放 JavaScript 代码,api 目录用于接口管理,config.js 文件用于配置管理等。
实现请求方法:在 js 目录下创建一个 ajax.js 文件,用于封装网络请求。这个文件中定义了一个 request 方法,调用时需要传入接口 url、请求数据、请求方法这三个参数。同时实现了中断请求的功能,通过 requestTask.abort 可以中断这次请求。
接口登录与 token 处理:为了实现 token 的自动刷新,我们在 ajax.js 文件中添加了 getToken 和 login 方法。在请求发出前,会先自动处理 token,如果没有则调用登录接口获取。
接口管理:通常把接口按照业务分类,放到单独的接口管理文件中。在 api 目录下创建 user.js 文件,用于管理用户相关的接口。调用时只需要导入这个接口管理文件,就能非常方便地使用接口方法。
配置管理:在 config.js 中进行统一管理配置项,如 apiBaseUrl 和 statusCode 等。其他文件中导入 CONFIG 对象即可使用这些配置项。
这套简单的接口请求库基本能满足中小型的 uni-app 项目需求。
(二)文档在线预览
在 uni-app 开发鸿蒙应用中,实现文档在线预览可以为用户提供更好的体验。
实现原理:pdf 和图片文件直接通过 webview 打开,其他文档使用微软预览。
代码示例:
<template> <view> <web-view :src="attachmentUrl"></web-view> </view> </template> <script> export default { data() { return { attachmentUrl: '', }; }, onLoad(options) { let infoUrl = JSON.parse(decodeURIComponent(options.attachmentUrl)); let imgtype = ['png', 'jpg', 'jpeg', 'pdf', 'PNG', 'JPG', 'JPEG', 'PDF']; const arr = infoUrl.split('.'); if (imgtype.indexOf(arr[arr.length - 1])!= -1) { // 图片类型、pdf--直接 webview this.attachmentUrl = JSON.parse(decodeURIComponent(options.attachmentUrl)); } else { // 其他文档类型--微软 this.attachmentUrl = 'http://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(infoUrl); } }, }; </script> <style scoped lang="scss"></style> |
(三)调用鸿蒙原生 API
在 uni-app 中,可以通过 uts 插件方式接入鸿蒙系统原生 API。
定义 API 名称:以打开华为应用市场详情页为例,定义 API 名称为 openAppProduct。
创建插件:右键 uni_modules 目录(没有则新建目录),点击新建 uni_modules 插件。插件名称为 uni-openAppProduct(注意,开发者自己创建时,不可以使用 uni - 开头,应以自己名字或昵称的缩写命令)。
编写相关文件内容:
- 修改插件根目录的 package.json 中的 uni_modules 节点,新增如下配置,arkts 为 true 代表支持鸿蒙。注意:下方的属性名中包含的 uni 请勿更改成自己的名字或昵称缩写,只能用 uni。
{ ...其他属性 "uni_modules": { "uni-ext-api": { "uni": { "openAppProduct": { "name": "openAppProduct", "app": { "js": false, "kotlin": false, "swift": false, "arkts": true } } } } ...其他属性 } } |
- 编写插件根目录下的 /utssdk/interface.uts 文件,内容如下:
export interface Uni { /** * openAppProduct() * @description * 跳转应用市场详情页 * @param {OpenAppProductOptions} options * @return {void} * @example ```typescript uni.openAppProduct({}); |
/
openAppProduct(options : OpenAppProductOptions) : void;
}
export type OpenAppProduct = (options : OpenAppProductOptions) => void;
export type OpenAppProductSuccess = {
/*
- 错误信息
/
errMsg : string
};
export type OpenAppProductSuccessCallback = (result : OpenAppProductSuccess) => void;
export type OpenAppProductFail = {
/*
- 错误信息
/
errMsg : string
};
export type OpenAppProductFailCallback = (result : OpenAppProductFail) => void;
export type OpenAppProductComplete = {
/*
- 错误信息
/
errMsg : string
};
export type OpenAppProductCompleteCallback = (result : OpenAppProductComplete) => void;
export type OpenAppProductOptions = {
/*
- 接口调用成功的回调函数
- @defaultValue null
/
success?: OpenAppProductSuccessCallback | null,
/*
- 接口调用失败的回调函数
- @defaultValue null
/
fail?: OpenAppProductFailCallback | null,
/*
- 接口调用结束的回调函数(调用成功、失败都会执行)
- @defaultValue null
*/
complete?: OpenAppProductCompleteCallback | null
};
3. 编写插件根目录下的 /utssdk/app-harmony/index.uts 文件(没有则新建),内容如下: ```typescript import {OpenAppProduct,OpenAppProductOptions,OpenAppProductSuccess,OpenAppProductFail,OpenAppProductComplete} from '../interface.uts' import bundleManager from '@ohos.bundle.bundleManager'; export {OpenAppProduct,OpenAppProductOptions,OpenAppProductSuccess,OpenAppProductFail,OpenAppProductComplete} try {} |
六、总结与展望
使用 Uni-app 开发鸿蒙 App 为开发者带来了全新的机遇和挑战。在整个开发过程中,我们经历了多个重要的步骤,从开发前的准备工作到最终实现特色功能与扩展,每一个环节都至关重要。
在开发流程方面,首先我们进行了工具的安装与配置,确保了开发环境的稳定。Node.js 的安装为后续的开发提供了基础运行环境,uni-app CLI 的安装使得我们可以通过命令行快速创建项目,DevEco Studio 和 HBuilderX 的安装则分别为鸿蒙开发和 uni-app 开发提供了强大的集成开发环境。同时,配置鸿蒙离线 SDK 和创建项目的过程也需要我们仔细操作,确保每一个步骤都正确无误。
在开发体验方面,Uni-app 提供了良好的跨平台支持,使得开发鸿蒙 App 变得相对简单。对于熟悉 Vue.js 的开发者来说,上手速度非常快。文档的齐全也为我们的学习提供了很大的帮助,学习曲线相对平缓。在开发过程中,我们可以充分利用 uni-app 的组件和模板,快速构建界面,提高开发效率。
性能与兼容性方面,虽然目前 Uni-app 在某些复杂场景下可能不如 HarmonyOS NEXT 的原生开发,但总体表现良好。HarmonyOS NEXT 在性能上有明显提升,运行流畅,而 Uni-app 支持多种平台,确保应用可以在不同设备上正常工作。兼容性好是 Uni-app 的一大优势,它可以让我们的应用在不同的操作系统上都能有较好的表现。
社区支持也是 Uni-app 开发鸿蒙 App 的一大优势。Uni-app 和 HarmonyOS NEXT 都有活跃的开发者社区,遇到问题时可以快速得到解答。在开发过程中,我们可以从社区中获取很多宝贵的经验和解决方案,这大大提高了我们的开发效率。
展望未来,随着鸿蒙操作系统的不断发展和完善,Uni-app 对鸿蒙的支持也将不断加强。我们可以期待 Uni-app 在性能、功能和兼容性方面的进一步提升,为开发者提供更好的开发体验。同时,随着开发者的不断探索和创新,我们也可以期待更多优秀的鸿蒙应用的出现,为用户带来更好的体验。
总之,使用 Uni-app 开发鸿蒙 App 是一个充满挑战和机遇的过程。希望更多的开发者能够尝试并探索这个领域,为鸿蒙生态的发展贡献自己的力量。