Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
4bc60487
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4bc60487
编写于
7月 17, 2024
作者:
杜庆泉
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update uts-plugin.md
上级
4658ea11
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
116 addition
and
30 deletion
+116
-30
docs/plugin/uts-plugin.md
docs/plugin/uts-plugin.md
+116
-30
未找到文件。
docs/plugin/uts-plugin.md
浏览文件 @
4bc60487
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录