前提:通过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一定要使用这个一步,要不然找不到插件