提交 4bc60487 编写于 作者: 杜庆泉's avatar 杜庆泉

Update uts-plugin.md

上级 4658ea11
......@@ -81,8 +81,8 @@ uts 插件编译到 app 平台时,在功能上相当于 uni-app 之前的 app
6. 插件市场的uts付费插件支持源码版销售和源码版权保护机制。而付费的原生语言插件不支持源码版销售。
7. uts插件可同时支持uni-app和uni-app x。
如果您是插件作者,可以了解更多uts插件和uni原生语言插件对插件作者的区别。[详见](https://uniapp.dcloud.net.cn/plugin/publish.html#utsdiff)
如果您是插件作者,可以了解更多uts插件和uni原生语言插件对插件作者的区别。[详见](https://uniapp.dcloud.net.cn/plugin/publish.html#utsdiff)
更新:“App原生语言插件”已停止维护。请插件开发者都使用uts插件。
### uts插件和Native.js的区别
......@@ -474,8 +474,8 @@ app-harmony文件夹存放uts插件编译到鸿蒙时的代码逻辑,目前仅
#### 编写interface.uts
插件 `uts-api` 创建完成后,我们需要确定插件对外暴露的 API。
插件 `uts-api` 创建完成后,我们需要确定插件对外暴露的 API。
为了多端统一规范的定义对外暴露的接口,获得更好的语法提示和多端一致性约束,标准做法是在 `interface.uts` 文件中统一定义插件要暴露的 API 类型、 API 的参数类型、返回值类型、错误码类型、错误接口等信息,然后在各端的 `index.uts` 中做具体的业务实现。
打开 `interface.uts` 文件,键入下面的源码, 为了方便说明,源码的每个部分的作用都用注释来说明。
......@@ -1097,32 +1097,32 @@ export default function getBatteryLevel():number {
在harmonyOS平台目录下,编辑index.uts,键入以下内容,即可完成harmonyOS平台获取电量能力。
```ts
import batteryInfo from '@ohos.batteryInfo';
import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult, GetBatteryInfoSync } from '../interface.uts';
export const getBatteryInfoSync : GetBatteryInfoSync = function () : GetBatteryInfoResult {
return {
level: batteryInfo.batterySOC,
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
};
}
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {
const batteryInfoResult : GetBatteryInfoSuccess = {
errMsg: "getBatteryInfo:ok",
level: batteryInfo.batterySOC,
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
}
try {
options.success && options.success(batteryInfoResult)
} catch (e) {
console.error(e)
}
try {
options.complete && options.complete(batteryInfoResult)
} catch (e) {
console.error(e)
}
import batteryInfo from '@ohos.batteryInfo';
import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult, GetBatteryInfoSync } from '../interface.uts';
export const getBatteryInfoSync : GetBatteryInfoSync = function () : GetBatteryInfoResult {
return {
level: batteryInfo.batterySOC,
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
};
}
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {
const batteryInfoResult : GetBatteryInfoSuccess = {
errMsg: "getBatteryInfo:ok",
level: batteryInfo.batterySOC,
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
}
try {
options.success && options.success(batteryInfoResult)
} catch (e) {
console.error(e)
}
try {
options.complete && options.complete(batteryInfoResult)
} catch (e) {
console.error(e)
}
}
```
......@@ -1421,6 +1421,92 @@ list1.forEach((item : any) => {
> 在uni-app 环境下,在 index.uts 文件中 `export` 的 `class` 默认会对 `js`暴露,因此要建立起原生 `class` 和 `js`类型的映射关系,只有能正常建立起这种映射关系的类才能导出。除一些基本数据类型外的系统类例如 `Activity`、`UIViewController`等是无法 `export` 的。
## UTS混编
HBuilder X 4.25 及之后版本,UTS插件可以直接使用原生代码, 即 `UTS混编`
#### Android平台
在app-android 可以直接添加 kotlin/java 源码
![](https://web-ext-storage.dcloud.net.cn/doc/uts/uts_plugin/mixCodeAndroid.png)
> 注意:java代码需要云打包自定义基座后生效,kotlin代码不需要云端打包本地即可生效
Android包名说明:
大多数情况下,我们建议混编代码的包名与[UTS插件默认包名](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-android.html#_3-1-%E9%85%8D%E7%BD%AEandroidmanifest-xml)保持一致,这样在UTS调用原生代码时,可以省去手动引入包名的步骤。
```kotlin
// hello uts 混编示例中的包名
package uts.sdk.modules.utsSyntaxcase
```
如果混编代码的包名与`UTS插件默认包名`不一致,则需要像使用原生对象一样手动引入
```ts
import KotlinObject from 'xxx.xxx.KotlinObject';
```
#### iOS平台
在插件的app-ios 目录下可以直接添加 Swift 源码文件
![](https://web-ext-storage.dcloud.net.cn/doc/uts/uts_plugin/mixCodeIOS.png)
如图所示,可以将 Swift 文件直接放在 app-ios 目录下,也可以放在 app-ios 的子目录下。
在 uts 代码中使用 Swift 文件中定义的函数、变量、类等时无需导入,可以直接调用。
如果你想将 Swift 文件中的变量输出到 HX 控制台中,可以将基础库 `DCloudUTSFoundation` 导入到 Swift 源码文件中,不过这个导入和使用过程将没有代码提示,
输出的变量信息也不会包含变量所在的文件和代码行号等信息。
示例如下:
```swift
import DCloudUTSFoundation;
func test1() -> String {
console.log("this is in swift file")
return "123"
}
```
> 注意:
> 目前仅支持 Swift 源码混编,OC 源码即使添加也不会参与编译
> Swift 源码文件中定义的函数、全局变量、类 等符号名称不要和 uts 文件中的符号名相同,否则会因为符号冲突导致编译不过
#### 注意事项:
+ `index`是保留文件名,原生代码不能命名为 index.kt/index.java/index.swift
+ HBuilder X 目前不支持原生代码的语法提示
+ HBuilder X 目前不支持原生代码的debug断点调试
+ 混编需要使用[条件编译](https://uniapp.dcloud.net.cn/tutorial/platform.html#%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91%E5%A4%84%E7%90%86%E5%A4%9A%E7%AB%AF%E5%B7%AE%E5%BC%82)限制编译入口
```uts
// 下面的代码只会在Android平台编译
// #ifdef APP-ANDROID
export function callKotlinMethodGetInfo():String {
return NativeCode.getPhoneInfo()
}
export function callJavaMethodGetInfo():String {
return new JavaUser("jack",12).name
}
// #endif
```
完整的混编示例可以在[hello uts](https://gitcode.net/dcloud/hello-uts/-/tree/dev/uni_modules/uts-syntaxcase/utssdk)中找到
## 前端使用插件
虽然uts插件由uts语法开发,但前端引用插件并不要求一定需要uts,普通js亦可引用uts插件。这也是uts插件同时支持uni-app和uni-app x的重要原因。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册