z***@iheal.cn
z***@iheal.cn
  • 发布:42 分钟前
  • 更新:40 分钟前
  • 阅读:34

UTS调用KT,一直找不到模块

分类:HBuilderX
package uts.sdk.modules.yyzlTts  

object MyNative {  
    fun sayHello(name: String): String {  
        return "Hello from Kotlin, $name!"  
    }  

    fun getMemInfo(): Long {  
        val runtime = Runtime.getRuntime()  
        return runtime.totalMemory() - runtime.freeMemory()  
    }  
}
export function play(input: string): void {   
    // 调用静态方法  
    TtsHelper.process(input);     
}    

export function helloFromKotlin(name: string): string {  
    // 直接调用 Kotlin 静态方法  
    return MyNative.sayHello(name)  
}  

export function getMemoryUsage(): number {  
    // 调用 Kotlin 对象的方法   
    return MyNative.getMemInfo()  
}     

编译器直接提示找不到MyNative。编译运行后也还是提示找不到MyNative

42 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。

这个问题的根本原因在于 Kotlin 原生文件的包名与 UTS 插件的默认包名不一致

在 UTS 插件中调用 Kotlin 原生代码时,编译器要求两者的包名必须匹配,否则无法自动找到对应的模块。

解决方案

1. 确保包名一致(推荐做法)

假设你的 UTS 插件目录名为 yyzlTts,那么 Kotlin 文件的包名必须是:

package uts.sdk.modules.yyzlTts

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

同时,确保你的 index.uts 文件也位于同一个包结构下(通常 UTS 文件不需要显式声明包名,编译器会自动处理)。

2. 如果包名不一致,需要手动导入

如果你确实需要使用不同的包名(比如 package com.example.tts),则必须在 UTS 文件中显式导入该 Kotlin 类:

// index.uts  
import { MyNative } from 'com.example.tts'  // 注意:这里是完整的包名  

export function helloFromKotlin(name: string): string {  
    return MyNative.sayHello(name)  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

或者使用默认导入方式:

import MyNative from 'com.example.tts.MyNative'

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

3. 检查文件位置

确保你的 Kotlin 文件放置在正确的目录结构中:

└── yyzlTts (你的插件目录)  
    ├── package.json  
    └── utssdk  
        ├── app-android  
        │   ├── config.json  
        │   ├── index.uts          // UTS 入口文件  
        │   └── MyNative.kt        // Kotlin 原生文件  
        ├── app-ios  
        └── interface.uts

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

注意:Kotlin 文件必须放在 app-android 目录下,与 index.uts 同级。

4. 清理并重新编译

修改包名后,建议执行以下操作:

  1. 删除 unpackage 目录(或清理构建缓存)
  2. 重新运行项目

参考文档

详细说明请参考官方文档:UTS 原生混编 - 集成原生代码

常见错误示例

错误做法(包名不匹配):

// MyNative.kt  
package com.example.myapp  // ❌ 与插件默认包名不一致

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

正确做法

// MyNative.kt    
package uts.sdk.modules.yyzlTts  // ✅ 与插件目录名对应

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

按照上述步骤调整后,MyNative 应该就能被正确识别了。

内容为 AI 生成,仅供参考

要回复问题请先登录注册