uniapp使用uts插件调用原生API

uniapp使用uts插件调用原生API

背景

在APP平台,某些功能由于uniapp限制,或者性能问题需要使用原生API来实现。uniapp很早就提供了原生语言插件功能,后台随着uniapp-x的推出,又提供了uts插件的方式来调用原生平台API。相比原生语言插件,uts插件可以直接使用更为熟悉的ts语法,不用在原生IEDA(android studio或xcode)中进行繁琐的配置。之前写过一篇uniapp原生插件开发(Android),今天我们用uts来实现一个类似调用原生安卓Toast功能的插件。

思路

1、使用HbuilderX新建一个uniapp项目,名字随意取就行。
2、在项目根目录下新建uni_modules目录,这个目录是用来存放我们uts插件的。
3、新建一个插件文件夹,我这里插件名称是my-toast,然后按照下面图片层级依次建好相关目录和文件。
在这里插入图片描述
注:uts插件除了插件名可以自定义,其他都需要按照上图中的命名,不要随意更改。两个.md文件非必须,可以不用。

代码实现

首先是package.json是插件相关的配置文件,可以参考下我的

{
  "id": "my-toast",
  "displayName": "my-toast",
  "version": "1.0.0",
  "description": "my-toast",
  "keywords": [
    "my-toast"
],
  "repository": "",
  "engines": {
    "HBuilderX": "^3.6.8"
  },
  "dcloudext": {
    "type": "uts",
    "sale": {
      "regular": {
        "price": "0.00"
      },
      "sourcecode": {
        "price": "0.00"
      }
    },
    "contact": {
      "qq": ""
    },
    "declaration": {
      "ads": "",
      "data": "",
      "permissions": ""
    },
    "npmurl": ""
  },
  "uni_modules": {
    "dependencies": [],
    "encrypt": [],
    "platforms": {
      "cloud": {
        "tcb": "u",
        "aliyun": "u",
        "alipay": "u"
      },
      "client": {
        "Vue": {
          "vue2": "u",
          "vue3": "u"
        },
        "App": {
          "app-android": "u",
          "app-ios": "u"
        },
        "H5-mobile": {
          "Safari": "u",
          "Android Browser": "u",
          "微信浏览器(Android)": "u",
          "QQ浏览器(Android)": "u"
        },
        "H5-pc": {
          "Chrome": "u",
          "IE": "u",
          "Edge": "u",
          "Firefox": "u",
          "Safari": "u"
        },
        "小程序": {
          "微信": "u",
          "阿里": "u",
          "百度": "u",
          "字节跳动": "u",
          "QQ": "u",
          "钉钉": "u",
          "快手": "u",
          "飞书": "u",
          "京东": "u"
        },
        "快应用": {
          "华为": "u",
          "联盟": "u"
        }
      }
    }
  }
}

然后是config.json,这里只配置了android的minSdkVersion。

{
  "minSdkVersion": "21"
}

接下来是index.uts,是插件默认入口。

//这里要导入原生的包
import Context from 'android.content.Context';
import Toast from 'android.widget.Toast';
export function showToast(msg: String) : void {
	const context = UTSAndroid.getAppContext() as Context
	Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
}

AndroidManifest.xml暂时没用到。
最后新建一个vue页面,然后导入插件的showToast,然后点击调用。

<template>
	<view class="content">
		<image class="logo" 
			src="/static/logo.png"
			@click="handleToast"></image>
	</view>
</template>

<script>
	//导入插件中的函数
	import { 
		showToast
	} from "@/uni_modules/my-toast"
	export default {
		data() {
			return {
			}
		},
		onLoad() {
		},
		methods: {
			//调用插件中的原生API
			handleToast(){
				showToast('test uts plugin 1234')
			}
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

看下效果:
在这里插入图片描述

尾巴

到这里一个最简单的uts插件就完成了。不仅是安卓,还有ios,小程序等都可以使用uts插件来调用原生平台的API,前提是要按官方的写法来,具体可以参考官方文档。下次我们使用uts来实现一个稍微复杂点的插件。

有问题可以给我留言,希望能帮助到有需要的人。如果你喜欢我的文章欢迎给我点赞,谢谢!

### UniApp UTS 使用教程和文档 #### 什么是UTSUTS (Uni-app TypeScript) 是 DCloud 推出的一种用于增强 UniApp 开发体验的技术,允许开发者在 UniApp使用更接近于原生开发的方式编写代码。这不仅提升了代码的可读性和维护性,还使得调用原生模块变得更加简单[^1]。 #### 安装与配置 为了开始使用 UTS,在项目根目录下的 `manifest.json` 文件中启用 UTS 支持: ```json { "app-plus": { ... "uts": true, ... } } ``` 接着可以在项目的 `src/utssdk` 目录下创建或引入所需的 `.ts` 文件来定义 UTS 插件逻辑[^2]。 #### 声明变量 在 UTS 中声明变量类似于其他现代编程语言中的做法。可以使用 `let` 或者 `const` 关键字来进行声明: - `let`: 类似于 JavaScript 的 `var`,但是具有块级作用域。 - `const`: 表示常量,一旦赋值不可更改。 例如: ```typescript // 使用 let 进行动态赋值 let count = 0; count++; // 使用 const 来定义不变量 const PI = 3.14; ``` #### 调用原生 Android API UTS 提供了一种便捷的方法来直接操作 Android 平台上的 Java 方法。只需要将相应的 JAR/AAR 库放置到 `utssdk/app-android/libs` 下即可直接引用并调用其中的功能而无需额外配置。 对于 AIDL(Android Interface Definition Language),可以通过同样的方式集成,并且可以直接像访问本地对象一样轻松地与其交互[^3]。 #### 自定义插件开发 如果需要进一步扩展应用功能,则可以根据实际需求自行开发自定义插件。这类插件通常是以 .aar 形式存在,并能够无缝接入到 UniApp 工程当中去。值得注意的是,当仅作为插件被加载时不涉及打包整个应用程序的情况下,不需要提供诸如签名证书之类的敏感信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值