uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步
UTS 插件鸿蒙端开发示例
以上示例已开源
项目地址 请参考 示例代码。
前言
虽然这个 UTS 插件鸿蒙端的示例看起来很简单,但说实话,这一步其实难住了不少开发者。很多人第一次做 UTS 插件,尤其是要跑通鸿蒙端,都会在这里卡壳。希望这份文档能帮你少走弯路,顺利迈过这道坎。
基础知识补充
什么是 UTS 插件?
UTS 插件其实就是 uni-app x 扩展 API 的标准插件形式。你可以把它理解成"写一份 TypeScript 风格的代码,编译后在不同平台都能用"。
说个实话,刚接触 uni-app x 的时候,很多人一看到"插件"两个字就头大,觉得一定很复杂。其实 UTS 插件的本质,就是把你想要的原生能力用 TypeScript 包一层,剩下的交给编译器搞定。
UTS 与 ArkTS 的关系
UTS 和 ArkTS 都是基于 TypeScript 的扩展,但有些细节不同。特别注意:鸿蒙端开发时,所有对象字面量都必须定义类型,不能用 any 类型,否则会直接编译报错。
比如 ArkTS 不允许无类型的对象字面量,UTS 会自动帮你加上类型,但你自己写代码时一定要养成良好习惯:
// 错误写法(鸿蒙端会报错)
const obj = { a: 1 };
// 正确写法
interface Obj { a: number }
const obj: Obj = { a: 1 };
// 或
const obj = { a: 1 } as Obj;
你只需要记住:UTS 写的代码,最终会被编译成 ArkTS(.ets)文件,然后就能愉快地调用鸿蒙的原生 API 了。
配置鸿蒙依赖
鸿蒙的依赖管理工具叫 ohpm,和 npm 很像。三方 SDK 用 .har 文件(有点像 Android 的 .aar)。
配置依赖时,记得在 utssdk/app-harmony/config.json 里写清楚:
{
  "dependencies": {
    "@cashier_alipay/cashiersdk": "15.8.26",
    "local-deps": "./libs/local-deps.har"
  }
}
注意:config.json 不能有注释,本地依赖路径是相对的。
资源文件与权限配置
- 插件资源(图片、字体等)放在 
utssdk/app-harmony/resources。 - 权限、模块信息等写在 
utssdk/app-harmony/module.json5。 
比如你要用定位权限,可以这样写:
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.LOCATION",
        "usedScene": { "when": "inuse" },
        "reason": "$string:permission_location_reason"
      }
    ]
  }
}
context 获取
很多鸿蒙原生 API 需要 context。大多数场景下直接用 getContext() 就行:
import settings from '@ohos.settings';
const context: Context = getContext();
settings.getValue(context, settings.display.SCREEN_BRIGHTNESS_STATUS, (err, value) => {
  if (err) {
    console.error(`Failed to get the setting. ${err.message}`);
    return;
  }
  console.log(`SCREEN_BRIGHTNESS_STATUS: ${JSON.stringify(value)}`)
});
有一次小王同学写插件,死活拿不到 context,结果发现是忘了在页面生命周期里调用,调试了半天才恍然大悟。遇到问题别慌,先查查官方文档和社区经验,很多"坑"其实大家都踩过。
更多细节和常见问题,建议随时查阅官方文档:UTS for HarmonyOS
步骤详解
友情提示:
虽然下面的步骤看起来很基础,但每一步都很关键。尤其是接口定义和鸿蒙端实现,很多人就是在这里卡住的。别嫌简单,能跑通才是王道。
再次强调:鸿蒙端开发时,所有对象字面量都必须定义类型,不能用 any 类型!
第一步:定义插件接口(interface.uts)
目的:
- 明确插件对外暴露的 API 规范,方便多端实现和 IDE 智能提示。
 - 这是 UTS 插件开发的基础,所有端的实现都要遵循这里定义的接口。
 
操作:
- 在 
uni_modules/你的插件名/utssdk/下新建或编辑interface.uts文件。 - 定义你要暴露的类型、方法签名。例如:
 
// uni_modules/tt-ost/utssdk/interface.uts
export type MyApiSync1 = (paramA: string) => string;
第二步:鸿蒙端实现接口(app-harmony/index.uts)
目的:
- 按照接口定义,实现鸿蒙端的具体逻辑。
 - 这是很多开发者卡壳的地方,需注意导入接口类型、调用鸿蒙 API、正确导出方法。
 - 注意:所有对象字面量都要定义类型,不能用 any!
 
操作:
- 在 
uni_modules/你的插件名/utssdk/app-harmony/下新建或编辑index.uts文件。 - 按照接口定义,实现方法。例如:
 
// uni_modules/tt-ost/utssdk/app-harmony/index.uts
import { MyApiSync1 } from '../interface.uts';
import { promptAction } from '@kit.ArkUI';
interface ShowToastOptions {
  message: string;
}
export const myApiSync1: MyApiSync1 = function (paramA: string): string {
  let ddd: ShowToastOptions = { message: paramA };
  promptAction.showToast(ddd);
  return paramA;
}
- 这里以 Toast 弹窗为例,实际可根据业务需求调用鸿蒙原生能力。
 
第三步:在页面中调用插件方法
目的:
- 验证插件功能是否生效。
 - 体验 UTS 跨端调用的便捷性。
 
操作:
- 在页面脚本中引入并调用插件方法。例如:
 
<script>
import { myApiSync1 } from '@/uni_modules/tt-ost';
export default {
  methods: {
    showToast() {
      const msg = 'Hello Harmony!';
      const result = myApiSync1(msg);
      console.log(result); // 输出: Hello Harmony!
    }
  }
}
</script>
说明
- 该插件支持多端,鸿蒙端实现了 
myApiSync1,会调用 ArkUI 的promptAction.showToast。 - 其他端(如 Android/iOS)可根据需要实现对应方法。
 - 适合演示 UTS 跨端插件的基本用法。
 
如需更多信息,请参考 uni-app x 官方 UTS 插件开发文档。
uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步的更多相关文章
- 基于UniApp社区论坛多端开发实战
		
什么是移动端WebApp 移动端WebApp: 泛指手持设备移动端的web 特点: - 类App 应用,运行环境是浏览器 - 可以包一层壳,成为App - 常见的混合应用: ionic, Cordov ...
 - vue2.0做移动端开发用到的相关插件和经验总结1.0
		
最近在用vue2.0做微信公众号相关的前端开发,经过这次开发实践,现将项目中用到的相关比较实用的插件及遇到的相关问题进行整理,希望和大家共同交流...... cssrem:一个CSS值转REM的VSC ...
 - uni-app实现多端开发
		
多端开发,听名字就感觉不一样,一套代码.多端使用,适用于各个平台.市面上很多关于多端开发的框架,比较常用,流行的框架 uni-app,Chameleon(变色龙),taro这些,都可以支持多端,一套代 ...
 - EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码
		
背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...
 - Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
		
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
 - 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
		
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
 - 最全华为鸿蒙 HarmonyOS 开发资料汇总
		
开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...
 - 【译】使用 Flutter 实现跨平台移动端开发
		
作者: Mike Bluestein | 原文地址:[https://www.smashingmagazine.com/2018/06/google-flutter-mobile-developm ...
 - Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
		
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
 - 从架构师视角看是否该用Kotlin做服务端开发?
		
前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...
 
随机推荐
- Python提取pdf文字信息
			
目录 Python提取pdf文字信息 需求 代码 总结 Python提取pdf文字信息 需求 今天教务处导出来我们全年级的成绩,一看吓一跳,我们的名字怎么不在文件名里,只能一个个找吗.事情开始变得离谱 ...
 - 【JVM之内存与垃圾回收篇】本地方法接口
			
本地方法接口 什么是本地方法 简单地讲,一个 Native Method 是一个 Java 调用非 Java 代码的接囗.一个 Native Method 是这样一个 Java 方法:该方法的实现由非 ...
 - 【Python】批量导出word文档中的图片、嵌入式文件
			
Python 批量导出word文档中的图片.嵌入式文件 需求 学生试卷中的题目有要提交截图的,也有要提交文件的,为了方便学生考试,允许单独交或者嵌入Word中提交,那么事后如何整理学生的答案?单独提交 ...
 - 探秘Transformer系列之(28)--- DeepSeek MLA
			
探秘Transformer系列之(28)--- DeepSeek MLA 目录 探秘Transformer系列之(28)--- DeepSeek MLA 0x00 概述 0x01 原理 1.1 问题 ...
 - Java 中有哪些垃圾回收算法?
			
Java 中的垃圾回收算法 Java 中的垃圾回收(Garbage Collection,GC)机制通过多种算法实现对堆内存的管理.以下是常见的垃圾回收算法: 1. 标记-清除算法(Mark-Swee ...
 - symfony Fatal error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Common\Persistence
			
报错: Fatal error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Common\Persistence\Objec ...
 - 在IIS发布.net9 api程序踩坑总结
			
参照:.NET 9.0 WebApi 发布到 IIS 详细步骤_webapi发布到iis-CSDN博客 环境搭建: 注意安装与程序版本对应的Windows Server Hosting,安装完成之后, ...
 - 记一次SQL隐式转换导致精度丢失问题的排查 → 不规范就踩坑
			
开心一刻 刚毕业的侄子给我发消息侄子:叔,人生太难了我:怎么呢?侄子:工作太难了,感情也太难了,怎么什么都这么难我:你还小啊侄子:大了就不难了?我:大了你就习惯了 问题复现 先准备表:数据源( tbl ...
 - 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具
			
PS:本文仅作参考勿跟操作,root需谨慎,本次测试用的N手Pixel,因参考本文将真机刷成板砖造成的损失与本人无关 1 Google Pixel介绍 1.1手机 google Pixel 在手机选择 ...
 - CSharp_core
			
C#核心篇 面向对象的概念 封装(类).继承,多态 类 基本概念 具有相同特征.相同行为.一类事物的抽象 类是对象的模板,可以通过类创建出对象 关键词class 类的申明 申明在nameplace语句 ...