cordova自定义插件native和h5通信,kotlin使用cordova报错问题

6 篇文章 0 订阅
5 篇文章 0 订阅

前提:通过cordova创建安卓项目并能运行

cordova创建项目过程

创建后的目录结构

创建自定义插件

一 保证安装了 plugman 插件管理者 

$ npm install -g plugman

二 创建一个存放插件的文件夹   运行命令创建自定义插件

$ plugman create --name java-plugin --plugin_id java-plugin --plugin_version 1.0.0

--name java-plugin  ==> 插件名

--plugin_id java-plugin==> 插件ID

--plugin_version 1.0.0 ==> 插件版本号

 

三 出现系统创建的文件夹,在src下创建android文件夹

 

四 在新创建的android文件夹添加java文件

五 编写java代码,  这里的包名对应一会添加插件注入地址,安卓项目里面不用写这个java文件,会自动生成,kotlin文件不会自动生成,需要手动添加对应的包名和kotlin.kt文件

package org.apache.cordova.java;

import android.widget.Toast;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;


public class MyJavaPlugin extends CordovaPlugin {
    
    @Override
    public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
        return super.execute(action, rawArgs, callbackContext);
    }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        return super.execute(action, args, callbackContext);
    }

    @Override
    public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
        //showToast 是你在JS中调用的方法名;
        if (action.equals("showAndroidToast")){
            //这里可以实现一些你的原生逻辑功能
            Toast.makeText(cordova.getActivity(), args.getString(0), Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
}

 

六 编写plugin.xml文件 这里有一个坑kotlin不支持.kt文件的反射也不会自动创建插件,使用java文件,否则一直找不到插件

<?xml version='1.0' encoding='utf-8'?>
<plugin id="java-plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>java-plugin</name>
    <js-module name="JavaPlugin" src="www/java-plugin.js">
        <clobbers target="JavaPlugin" />
    </js-module>
    <!--添加我们自己的平台  -->
    <platform name="android">  <!-- 平台类型 -->
        <config-file target="res/xml/config.xml" parent="/*">  
            <feature name="JavaPlugin">  <!-- JS调用时的前缀名字 -->
                <param name="android-package" value="org.apache.cordova.java.MyJavaPlugin"/> <!-- .java类名全路径 --> 
            </feature>  
        </config-file>  
        <source-file src="src/android/MyJavaPlugin.java" target-dir="src/org/apache/cordova/java" />  
        <!-- src:java源文件的路径, target-dir:插件安装好后,源文件的位置,要和上面的包名对应 -->
    </platform> 
</plugin>

七 编写java-plugin.js文件

var exec = require('cordova/exec');

exports.showAndroidToast = function (arg0, success, error) {
    exec(success, error, 'JavaPlugin', 'showAndroidToast', [arg0]);
};

八 进行打包生成package.json文件

    先进入java-plugin目录后运行

$ npm init

    一路回车

    这里插件制作完成...

九 安卓项目导入插件

$ cordova plugin add D:\plugin\java-plugin

  安卓文件中系统自动创建插件,再说一次kotlin文件不会创建,手动添加

res的config会自动添加插件对应目录 config.xml报错不用管,studio识别不了引用

在index.html页面添加测试代码

 效果图

总结:

  kotlin使用cordova目前支持力度不够,有很多坑,插件部分最好是写.java文件不要用.kt文件,不然系统运行到CordovaPlugin无法反射到kotlin插件的类,一直会报空.

Kotlin和java反射写法不同,cordova是基于java的不支持kotlin文件反射

使用kotlin一定要使用这个一步,要不然找不到插件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值