uni-app uts插件原生混编无法引用原生方法

uni-app uts插件原生混编无法引用原生方法

问题描述

参考文档上的新建了一个 .kt 文件:

package com.test.kt  

object NativeCode {  

    fun test(callback: () -> Unit): Unit {  
        callback()  
    }  

}

在 UTS 里执行 NativeCode.test(); 却一直编译不通过,提示找不到 NativeCode,尝试改过 kt 的包名,也尝试在 UTS 里引入

import NativeCode from 'com.test.kt';

都不行呢?报错:

[plugin:uni:app-uts] 编译失败
error: Unresolved reference: NativeCode‌

更多关于uni-app uts插件原生混编无法引用原生方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

我也遇到这个问题了,我的是cli创建的uniapp的项目。而且在uts混编kotlin的时候,uts中凡是使用console.log代码运行阶段会报错
targetMethod error::java.lang.NoSuchMethodError: No static method log([Ljava/lang/Object;)V in class Lio/dcloud/uts/console; or its super classes (declaration of ‘io.dcloud.uts.console’ appears in xxxxxxxxx

更多关于uni-app uts插件原生混编无法引用原生方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中使用uts插件进行原生混编时,如果遇到无法引用原生方法的问题,通常是因为原生模块和JavaScript代码之间的桥接没有正确配置。下面我将提供一个简单的代码案例,展示如何在uni-app中通过uts插件调用原生方法。

步骤1:创建原生插件

首先,你需要在原生插件中定义一个原生方法。以Android为例,创建一个Java类:

// MyNativeModule.java
package com.example.myplugin;

import android.webkit.JavascriptInterface;

public class MyNativeModule {
    @JavascriptInterface
    public String helloFromNative() {
        return "Hello from Native!";
    }
}

然后,在插件的Manifest.json中注册这个类:

{
  "nativePlugins": [
    {
      "className": "com.example.myplugin.MyNativeModule",
      "jsName": "MyNative"
    }
  ]
}

步骤2:在uni-app中引用原生插件

在uni-app项目的manifest.json中,添加对uts插件的引用:

{
  "mp-weixin": { // 或者其他平台配置
    "usingComponents": true,
    "nativePlugins": [
      {
        "name": "my-plugin",
        "version": "1.0.0",
        "provider": "wxxxxxxxxxx" // 插件ID或本地路径
      }
    ]
  }
}

步骤3:在JavaScript中调用原生方法

在uni-app的页面中,你可以通过plus.bridge.exec方法调用原生插件中的方法。但是,由于uts插件通常会自动注册JavaScript接口,你可以直接使用:

// 在页面或组件的onLoad或mounted生命周期中调用
export default {
  mounted() {
    if (window.MyNative) {
      // 调用原生方法
      window.MyNative.helloFromNative((result) => {
        console.log(result); // 输出 "Hello from Native!"
      });
    } else {
      console.error('MyNative module is not available');
    }
  }
}

注意:window.MyNative.helloFromNative的调用方式依赖于uts插件的JavaScript接口注册方式。如果插件没有正确注册接口,或者接口名称与Manifest.json中定义的jsName不一致,将导致调用失败。

注意事项

  • 确保uts插件已正确安装并配置在uni-app项目中。
  • 检查原生插件的Manifest.json和uni-app项目的manifest.json中的配置是否一致。
  • 如果是在iOS平台上,需要在Objective-C或Swift中定义相应的原生方法,并在Info.plist中配置JavaScript接口。

以上代码案例展示了如何在uni-app中通过uts插件调用原生方法的基本流程。如果遇到具体问题,建议查阅uni-app和uts插件的官方文档。

回到顶部