cordova自定义插件开发

一、插件内容详解

插件gitee地址:https://gitee.com/liangyehao/cordova-plugin-calllnative

插件目录结构

cordova-plugin-callnative
│  package.json
│  plugin.xml
│
├─src
│  └─android
│          CallNative.java
│
└─www
        callnative.js

功能实现相关

  • CallNative.java
  • callnative.js

注册到cordova相关

  • plugin.xml
  • pakage.json

1、CallNative.java

核心是继承CordovaPlugin 且重写execute方法

package com.liang.plugins;

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

public class CallNative extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        // 自定义实现
        // callbackContext.success(); 与插件js中的exec方法success参数对应
        // callbackContext.error(); 与插件js中的exec方法error参数对应
        return true;
    }
}

2、callnative.js

var exec = require('cordova/exec');
/**
exports.coolMethod:导出名叫coolMethod的函数,其他js在使用插件时调用[clobber].[functionName]
调用示例

// 先定义回调函数,
function success(res){
    console.log("success",res)
}
function error(res){
    console.log("error",res)
}
// 调用自定义插件[clobber].[functionName]
cordova.plugins.CallNative.coolMethod('参数',success,error)

*/


exports.coolMethod = function (arg0, success, error) {
    /* @param {Function} success    The success callback
     * @param {Function} fail       The fail callback
     * @param {String} service      The name of the service to use,插件java文件类名
     * @param {String} action       Action to be run in cordova 传入到java方法的action值
     * @param {String[]} [args]     Zero or more arguments to pass to the method
       [arg]对应的方法为:execute(String action, JSONArray args, CallbackContext callbackContext)
     */
    exec(success, error, 'CallNative', 'action', [arg0]);
};

3、plugin.xml

<?xml version='1.0' encoding='utf-8'?>
<!--id: 插件id,会写入到cordova_plugins.js中 -->
<plugin xmlns:android="http://schemas.android.com/apk/res/android" id="cordova-plugin-callnative"
    version="1.0.0"
    xmlns="http://apache.org/cordova/ns/plugins/1.0">
    <name>CallNative</name>
    <!-- js-module相关内容在安装插件时会被写入到cordova项目的cordova_plugins.js文件  -->
    <!-- src:自定义开发的插件js文件路径 -->
    <js-module name="callnative" src="www/callnative.js">
        <!--target:js调用插件时的引用对象 -->
        <clobbers target="cordova.plugins.CallNative" />
    </js-module>
    <platform name="android">
        <!-- 安装插件时,config-file 内容会被写入到安卓项目的config.xml内(即将feature标签内容原样写入) -->
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="CallNative">
                <!-- value:cordova安装插件成功后,自定义插件java部分的全限定类名 -->
                <param name="android-package" value="com.liang.plugins.CallNative" />
            </feature>
        </config-file>
        <!-- src:自定义开发的插件java文件路径
        注意:java文件包名应该跟target-dir相对应,例如此处java文件最终会被放在src/com/liang/plugins目录下,
        所以java类的包名应该定义为com.liang.plugins
         -->
        <!-- target-dir:java文件写入到cordova项目时的目录 -->
        <source-file src="src/android/CallNative.java"
            target-dir="src/com/liang/plugins" />
    </platform>
</plugin>

4、package.json

核心是版本号,自定义就好:"version": "1.0.0",
name和id与plugin.xml中的plugin标签id属性的值保持一致即可

{
  "name": "cordova-plugin-callnative",
  "version": "1.0.0",
  "description": "",
  "cordova": {
    "id": "cordova-plugin-callnative",
    "platforms": [
      "android"
    ]
  },
  "keywords": [
    "ecosystem:cordova",
    "cordova-android"
  ],
  "author": "lyh",
  "license": "ISC"
}

二、示例步骤

1、根据一、的介绍创建插件项目cordova-plugin-callnative

2、创建测试cordova项目

  • 创建项目
cordova create plugin-test com.liang.plugintest pluginTest
  • 添加android平台
cordova platforms add android
  • 进入cordova项目目录
cd plugin-test
  • 安装创建好的自定义插件
    注意:我此处插件项目目录与cordova测试项目目录同级,所以使用../相对路径
cordova plugin add ../cordova-plugin-callnative/

3、安装成功后测试cordova项目变化

注意:如果项目已经在android studio打开,文件加载可能存在延迟,手动刷新一下项目reload from disk

-{项目目录} \platforms\android\platform_www

platform_www
│  cordova.js
│  cordova_plugins.js # 里面新增注册了自定义插件信息
│
└─plugins 
    └─cordova-plugin-callnative # 新增,自定义插件
        └─www
                callnative.js
  • {项目目录}\platforms\android\app\src\main\assets\www
www
│  cordova.js
│  cordova_plugins.js # 里面新增注册了自定义插件信息
│  index.html
│
├─css
│      index.css
│
├─img
│      logo.png
│
├─js
│      index.js
│
└─plugins
    └─cordova-plugin-callnative # 新增,自定义插件
        └─www
                callnative.js
  • {项目目录}\platforms\android\app\src\main\java
java
└─com
    └─liang
        ├─plugins # 新增,自定义插件java文件
        │      CallNative.java
        │
        └─plugintest
                MainActivity.java
  • {项目目录}\platforms\android\android.json
    config_munge
    modules
    plugin_metadata
    新增插件相关内容

  • {项目目录}\platforms\android\app\src\main\res\xml\config.xml
    新增

    <feature name="CallNative">
        <param name="android-package" value="com.liang.plugins.CallNative" />
    </feature>

与plugin.xml中定义的内容对应

4、调用测试

    function success(res){
        console.log("调用成功",res)
    }
    function error(e){
        console.log("调用失败",e)
    }
  
    // 调用test函数测试
    function test(){
      cordova.plugins.CallNative.coolMethod('action',success,success);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容