Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
3211283e
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看板
提交
3211283e
编写于
8月 02, 2024
作者:
杜庆泉
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新混编文档
上级
fe339d94
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
22 addition
and
23 deletion
+22
-23
docs/plugin/uts-plugin-hybrid.md
docs/plugin/uts-plugin-hybrid.md
+22
-23
未找到文件。
docs/plugin/uts-plugin-hybrid.md
浏览文件 @
3211283e
# UTS原生混编介绍
# UTS原生混编介绍
`HBuilder X 4.25`
起,UTS插件可以直接使用原生的
kotlin、java、swift
代码,即
`UTS原生混编`
(下文简称:
`原生混编`
)
`HBuilder X 4.25`
起,UTS插件可以直接使用原生的
`kotlin`
、
`java`
、
`swift`
代码,即
`UTS原生混编`
(下文简称:
`原生混编`
)
## 原生混编的优势和使用场景
## 原生混编的优势和适用场景
`原生混编`
出现之前,开发者只能使用
[
UTS语言
](
https://doc.dcloud.net.cn/uni-app-x/uts/
)
来开发
[
UTS插件
](
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html
)
`原生混编`
出现之前,开发者只能使用
[
UTS语言
](
https://doc.dcloud.net.cn/uni-app-x/uts/
)
来开发
[
UTS插件
](
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html
)
对于不熟悉
原生
的开发者来说,要实现原生功能的开发,往往要经过下面的步骤:
对于不熟悉
`Android`
/
`ios`
的开发者来说,要实现原生功能的开发,往往要经过下面的步骤:
1 通过`搜索引擎`/`AIGC`/`原生API
`文档 得到对应功能的关键原生代码(kotlin/swift
等)
1 通过`搜索引擎`/`AIGC`/`原生API
文档` 得到对应功能的关键代码(`Kotlin`/`swift`
等)
2 手动翻译这段代码为`UTS`
2 手动翻译这段代码为`UTS`
...
@@ -20,34 +18,35 @@
...
@@ -20,34 +18,35 @@
**这是一件很繁琐的事情,`UTS原生混编`的出现彻底解决了这个问题:**
**这是一件很繁琐的事情,`UTS原生混编`的出现彻底解决了这个问题:**
开发者只需要把正确的
kotlin/swift/java 原生代码按照约定放在UTS插件目录中,就可以通过
`uts`
无缝的使用这些原生
代码。
开发者只需要把正确的
`Kotlin`
/
`swift`
/
`java`
原生代码按照约定放在
`UTS插件`
目录中,就可以通过
`uts`
无缝使用这些
代码。
在
`UTS插件`
的编译流程中,
UTS源码是 Kotlin/swift 源码的上游环节,也就是说 UTS本身就会被编译为Kotlin/swift 源码,所以 uts 与原生语言之间的相互调用 本质是
**同一语言内部
不同函数/对象之间的相互调用,不会有任何调用成本和性能损耗**
在
`UTS插件`
的编译流程中,
`UTS`
源码是
`Kotlin`
/
`swift`
源码的上游环节,也就是说
`UTS`
本身就会被编译为
`Kotlin`
/
`swift`
源码,所以
`UTS`
与原生语言之间的相互调用,本质是
**同一语言内部,
不同函数/对象之间的相互调用,不会有任何调用成本和性能损耗**
和uts插件代码一样,混编的原生代码可以直接真机运行,省去了手动集成
AAR
三方库需要打包自定义基座的环节,大大提升了开发效率。
和uts插件代码一样,混编的原生代码可以直接真机运行,省去了手动集成
`AAR`
三方库需要打包自定义基座的环节,大大提升了开发效率。
---
有了
`UTS原生混编`
之后,开发者如果想要实现对应的
原生功能,仅需要:
使用
`UTS原生混编`
之后,开发者想要实现
原生功能,仅需要:
+
1 通过
`搜索引擎`
/
`AIGC`
/
`原生API
`
得到原生代码片段,
+
1 通过
`搜索引擎`
/
`AIGC`
/
`原生API
文档`
得到原生代码片段
+
2 放入UTS插件中,真机运行
+
2 放入UTS插件中,真机运行
即可以看到执行结果。
即可以看到执行结果。
下面我们以
内存监控
功能为例,分别拆解
`UTS原生混编`
技术在
`Android`
和
`ios`
平台上的使用步骤
下面我们以
`内存监控`
功能为例,分别拆解
`UTS原生混编`
技术在
`Android`
和
`ios`
平台上的使用步骤
## Android平台
## Android平台
#### 前置条件
#### 前置条件
在
真正
开始使用
`UTS原生混编`
之前,开发者需要确保两个前置条件:
在开始使用
`UTS原生混编`
之前,开发者需要确保两个前置条件:
1
`HBuidlerX`
最低 4.25 版本
1
`HBuidlerX`
最低 4.25 版本
2 对
[
UTS插件
](
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#%E7%AE%80%E5%8D%95%E6%8F%92%E4%BB%B6%E7%A4%BA%E4%BE%8B
)
的有基本的认
识,
和一定的开发经验。
2 对
[
UTS插件
](
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#%E7%AE%80%E5%8D%95%E6%8F%92%E4%BB%B6%E7%A4%BA%E4%BE%8B
)
的有基本的认
知
和一定的开发经验。
在进行下一步的操作之前,你的目录应该是这样的:
在进行下一步的操作之前,你的目录应该是这样的:
...
@@ -64,7 +63,7 @@
...
@@ -64,7 +63,7 @@
2 搜索引擎/AI工具
2 搜索引擎/AI工具
我们
在
这里使用AI工具得到了关键代码:
我们这里使用AI工具得到了关键代码:
![
获取代码
](
https://web-ext-storage.dcloud.net.cn/doc/uts/uts_hybrid_plugin/hybrid_android_getcode.png
)
![
获取代码
](
https://web-ext-storage.dcloud.net.cn/doc/uts/uts_hybrid_plugin/hybrid_android_getcode.png
)
...
@@ -72,12 +71,12 @@ AI工具或官方文档得到的代码并不总是准确的,我们需要去验
...
@@ -72,12 +71,12 @@ AI工具或官方文档得到的代码并不总是准确的,我们需要去验
目前
`HBuilderX`
并未提供原生代码的语法提示和校验,因此我们建议:
目前
`HBuilderX`
并未提供原生代码的语法提示和校验,因此我们建议:
+
如果编写大段原生代码,推荐在原生IDE(比如:
AndroidStudo)中编写验证,再放入uts插件
混编联调
+
如果编写大段原生代码,推荐在原生IDE(比如:
`AndroidStudio`
)中编写验证,再放入
`UTS插件`
混编联调
+
如果是小的代码片段,可以直接放入
UTS插件目录,依靠HBuilderX
本地编译功能来完成原生代码的校验
+
如果是小的代码片段,可以直接放入
`UTS插件`
目录,依靠
`HBuilderX`
本地编译功能来完成原生代码的校验
这里我们选择直接集成
UTS插件
, 使用
`HBuilderX`
来验证
这里我们选择直接集成
`UTS插件`
, 使用
`HBuilderX`
来验证
#### 第二步 集成原生代码
#### 第二步 集成原生代码
...
@@ -133,7 +132,7 @@ object NativeCode {
...
@@ -133,7 +132,7 @@ object NativeCode {
}
}
```
```
上面的代码中,我们将获取内存的信息的功能以
kotlin
静态方法
`NativeCode.memMonitor()`
的形式对外暴露
上面的代码中,我们将获取内存的信息的功能以
`Kotlin`
静态方法
`NativeCode.memMonitor()`
的形式对外暴露
接下来,我们将整理好的原生代码添加到 在
`app-android`
目录
接下来,我们将整理好的原生代码添加到 在
`app-android`
目录
...
@@ -148,14 +147,14 @@ object NativeCode {
...
@@ -148,14 +147,14 @@ object NativeCode {
在上面的示例中,我们已经实现了获取当前设备内存信息的功能,但是我们还想更进一步:持续监控内存,并且回调信息到uvue页面
在上面的示例中,我们已经实现了获取当前设备内存信息的功能,但是我们还想更进一步:持续监控内存,并且回调信息到uvue页面
实现持续调用的方法有很多
。这里我们为了演示在
`Kotlin`
代码中调用UTS内置对象,选择采用
[
setInterval
](
https://doc.dcloud.net.cn/uni-app-x/uts/buildin-object-api/timers.html#setinterval-handler-timeout-arguments
)
内置对象
来实现这个功能:
实现持续调用的方法有很多
,这里我们为了演示在
`Kotlin`
代码中调用
`UTS内置对象`
的情况,选择采用
[
setInterval
](
https://doc.dcloud.net.cn/uni-app-x/uts/buildin-object-api/timers.html#setinterval-handler-timeout-arguments
)
来实现这个功能:
使用
UTS内置对象
需要注意两点:
使用
[
UTS内置对象
](
https://doc.dcloud.net.cn/uni-app-x/uts/buildin-object-api/number.html
)
需要注意两点:
1 正确引入类名:
1 正确引入类名:
UTS内置对象在具体的平台会有一个对应的类名,举例: UTS内置的Array -> kotlin中的io.dcloud.uts.UTSArray
`UTS内置对象`在具体的平台会有一个对应的类名,举例: UTS内置的[Array](https://doc.dcloud.net.cn/uni-app-x/uts/buildin-object-api/array.html) 对应 `Kotlin`中的`io.dcloud.uts.UTSArray`
2 正确的处理原生对象和内置对象直接的转换
2 正确的处理原生对象和内置对象直接的转换
...
@@ -168,7 +167,7 @@ object NativeCode {
...
@@ -168,7 +167,7 @@ object NativeCode {
原生
`kotlin`
代码的最终形态:
原生
`kotlin`
代码的最终形态:
```
kotlin
```
kotlin
package
uts.sdk.modules.
utsDemoMem
package
uts.sdk.modules.
demoMem;
import
android.app.ActivityManager
import
android.app.ActivityManager
import
android.content.Context.ACTIVITY_SERVICE
import
android.content.Context.ACTIVITY_SERVICE
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录