uni-app UTS混编如何实现调用kotlin文件里的abstract类

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app UTS混编如何实现调用kotlin文件里的abstract类

代码示例

kt 文件代码如下:

abstract class BaseActivity : Activity() {  

    /**  
     * Permission custom apply  
     */  
    open fun showCustomPermissionApply(permission: Array<String>) {}  

    /**  
     * Jump to the permission setting interface processing results  
     */  
    open fun handlePermissionSettingResult(permission: Array<String>) {}  

    /**  
     * Permission Listener  
     */  
    var mPermissionResultListener: OnPermissionResultListener? = null  

    /**  
     * Set Permission Listener  
     */  
    open fun setOnPermissionResultListener(listener: OnPermissionResultListener?) {  
        this.mPermissionResultListener = listener  
    }  
}

UTS 代码如下:

export class Apply extends Activity implements BaseActivity {
    constructor(){
        super()
    }
    static getPermission(options : UTSJSONObject, callback: (res: boolean) => void) {  
        //这里想实现调用BaseActivity的方法该怎么实现呢
    }
}

1 回复

在uni-app中实现UTS(Uni-app TypeScript)混编并调用Kotlin文件里的abstract类,需要结合Uni-app的原生插件机制。以下是一个简要的步骤和代码示例,帮助你理解如何实现这一目标。

步骤概述

  1. 创建Kotlin原生插件:首先,你需要创建一个Android原生插件,其中包含一个Kotlin抽象类。
  2. 实现抽象类:在插件中实现该抽象类。
  3. 注册插件:将插件注册到Uni-app项目中。
  4. 在Uni-app中调用:通过JSBridge调用原生插件的方法。

示例代码

1. 创建Kotlin原生插件

在Android原生项目中创建一个Kotlin文件,例如MyAbstractClass.kt

// MyAbstractClass.kt
package com.example.uniappplugin

abstract class MyAbstractClass {
    abstract fun doSomething(): String
}

class MyAbstractClassImpl : MyAbstractClass() {
    override fun doSomething(): String {
        return "Hello from Kotlin!"
    }
}

2. 实现抽象类并注册插件

在插件的入口类(如MyPlugin.java)中,初始化并暴露这个实现类:

// MyPlugin.java
package com.example.uniappplugin;

import android.content.Context;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class MyPlugin extends UniModule {
    private MyAbstractClass myAbstractClass = new MyAbstractClassImpl();

    @JSMethod(uiThread = false)
    public void callAbstractMethod(UniJSCallback callback) {
        String result = myAbstractClass.doSomething();
        callback.invoke(result);
    }
}

3. 注册插件

manifest.json中注册你的插件:

{
  "nativePlugins": {
    "MyPlugin": {
      "package": "com.example.uniappplugin.MyPlugin",
      "platforms": {
        "android": {
          "package": "com.example.uniappplugin",
          "abiFilters": ["armeabi-v7a", "arm64-v8a", "x86", "x86_64"]
        }
      }
    }
  }
}

4. 在Uni-app中调用

在你的Uni-app项目中,通过JSBridge调用插件方法:

// 在你的uni-app页面或组件中
uni.requireNativePlugin('MyPlugin').callAbstractMethod((res) => {
    console.log(res); // 输出: Hello from Kotlin!
});

注意事项

  • 确保你的Android原生插件编译成功,并正确生成了AAR文件。
  • 在调用原生插件方法时,注意异步回调的处理。
  • 插件方法需要声明在@JSMethod注解中,并确保uiThread参数根据需求设置。

通过上述步骤,你可以在uni-app项目中成功调用Kotlin文件中的抽象类方法。

回到顶部