关于使用plugman添加自定义插件过程中遇到的坑

其实之前也转载过一篇关于使用plugman添加MyMath插件的文章,照着那篇文章的确可以添加MyMath插件,但是本人比较偏执不喜欢文章中用到的SimpleMath作为插件id,同时也想把自定义插件放在自定义package路径下统一管理,而不是放在SimpleMath对应的路径下,那么就碰到一系列的坑了,而本文正是在解决这些坑的过程中的经验总结。本文要做的是通过plugman生成MyMath插件,其中插件id为custom-plugin-math,并且MyMath插件放在com.yoryky.demo.plugins目录下。

1、plugman生成MyMath插件

这里先假设已经有了一个corodva工程项目,项目package为com.yoryky.demo。首先cd 到项目plugins目录,然后通过plugman命令创建MyMath控件

plugman create --name MyMath --plugin_id custom-plugin-math --plugin_version 1.0.0

接着cd到MyMath目录下,添加android平台

plugman platform add --platform_name android

可以看见在plugins目录下生成了MyMath控件目录,将目录名改为custom-plugin-math,然后在其下的src/android目录下修改MyMath.java文件,文件内容为

package com.yoryky.demo.plugins;

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

/**
 * This class echoes a string called from JavaScript.
 */
public class MyMath extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            this.coolMethod(message, callbackContext);
            return true;
        }
        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

修改MyMath.js文件内容为:

var exec = require('cordova/exec');
var myMathFunc = function(){};  

myMathFunc.prototype.plus = function(success, error, arg0) {
    exec(success, error, "MyMath", "plus", arg0);
};

myMathFunc.prototype.minus = function(success, error, arg0) {
    exec(success, error, "MyMath", "minus", arg0);
};

var MYMATHFUNC = new myMathFunc();
module.exports = MYMATHFUNC; 

然后在custom-plugin-math下创建,package.json文件,文件内容为

{
  "name": "custom-plugin-math",
  "version": "1.0.0",
  "description": "test to see if can install custom plugin",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "yjing",
  "license": "Apache-2.0"
}

接着是重头戏了,就是修改MyMath的plugin.xml配置文件,先直接贴出来,修改后的内容吧。

<?xml version='1.0' encoding='utf-8'?>
<plugin id="custom-plugin-math" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>MyMath</name>
    <js-module name="MyMath" src="www/MyMath.js">
        <clobbers target="cordova.plugins.mymath"/>
    </js-module>
    <platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="MyMath">
                <param name="android-package" value="com.yoryky.demo.plugins.MyMath"/>
            </feature>
        </config-file>
        <config-file parent="/*" target="AndroidManifest.xml"/>
        <source-file src="src/android/MyMath.java" target-dir="src/com/yoryky/demo/plugins"/>
    </platform>
</plugin>

其中主要修改了clobbers标签的target值,它代表着在js中调用MyMath插件的方法;然后是feature标签的内嵌param标签的value值,它对应的是MyMath.java在android项目中的package+插件名;另外还改动了source-file标签的src值,它对应了android项目中MyMath.java文件的相对目录路径。

2、cordova项目添加插件

创建好MyMath插件后,就是添加到项目中了,先cd到cordova项目根目录,然后通过以下命令添加

cordova plugin add ../custom-plugin-math

这次测试,发现使用该命令直接添加成功了,不过之前测试时提示未发现plugin.xml文件的错误,而且到custom-plugin-math目录下发现第一步创建的几个文件都被删掉了,于是重新按第一小节方法创建好MyMath插件,并将custom-plugin-math目录移到其它地方,再通过cordova plugin add 方法添加新移到的位置,然后添加成功。在这里提一下,以备忘吧。

添加插件成功后,到项目中查看,会发现MyMath.java文件已经自动添加到了com.yoryky.demo.plugins包下。并且assets/plugins目录下也多了一个custom-plugin-math.www的目录,其下是我们创建的MyMath.js文件。另外插件还被自动配置到了cordova_plugins.js以及res/xml/config.xml两个文件中。

但时当打开MyMath.java文件时,文件报错,发现是其package居然是custom_plugin_math,将其修改为com.yoryky.demo.plugins。另外提示R包找不到,clean一次就好,不过有时候得注意,是不是cordova命令导致androidmanifest.xml文件的package值被修改。

3、测试插件是否添加成功

按照道理,只要第二部,添加成功了,插件使用就没有问题了。这里还是给一个简单的测试代码吧。

index.js文件的js部分代码:

function plustest(){
    cordova.plugins.mymath.plus(success,fail,[5,6]);
}

function success(msg){
    alert(msg);
}

function fail(msg){
    alert(msg);
}

index.html文件部分代码:

<button onclick = "plustest()">5 + 6 求值</button>

运行cordova项目,然后可测试返回输出11,当然也可以在android studio上直接运行。有个地方需要提醒,就是在运行cordova命令时,有些cordova外层文件会覆盖android项目文件,并且会修改android项目的一些配置,这个一定要注意。

4、参考文件

本文基本都是参考自己之前博客的东西,也贴出来吧,毕竟这篇文章有些地方还是说的不详细。

1、http://blog.csdn.net/yoryky/article/details/78433400
2、http://blog.csdn.net/yoryky/article/details/73504272
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值