Cordova开发自定义插件(详细篇含jar包调用)

641 阅读3分钟
原文链接: blog.csdn.net

一. 准备工作

1. 环境搭建

Cordova的环境搭建

此处npm有点慢,需用国内镜像

本猿采用 命令行指定

npm --registry https://registry.npm.taobao.org info underscore

2. 创建一个cordova项目

cordova  create hello com.example.hello  helloWorld

3. 为项目添加android平台

cordova platform add android

4. 安装plugman插件

npm install –g plugman 

插:准备工作做完了,开始正式写插件


二. 开发插件

1. 创建插件

plugman create –name<plugmanName> --plugin_id<pluginID> --plugin_version<version> 
[--path<directory>][--variableNAME=value]
  • plugmanName : 插件名字
  • pluginID : 插件ID
  • version : 0.0.1
  • directory : 一个绝对或相对路径的目录,该目录将创建插件项目
  • variableNAME=VALUE: 额外的描述,如作者信息和相关描述

egg :

plugman  create  --name  LycPlugin  --plugin_ id  lycPlugin --plugin_version 1.0.0

成功创建插件后的文件结构如下图:

成功创建插件后的文件结构如下图:

2. 在插件内添加android platform,生成.java文件

 cd LycPlugin

 plugman platform add –platform_name android 

成功添加后目录如下图:
成功添加android

若想添加依赖jar包,可直接放在android目录下,或者在src下新建libs目录。

添加jar包之后记得在工程中添加jar包依赖

<orderEntry type="library" name="xxx" level="project" />

本猿直接将xxx.jar放在android目录下,文件结构如下:
成功添加jar包

3. 各个文件详解

xx.js和plugin.xml的详解可以参考这篇博文

3.1 plugin.xml

  • jar包的网络依赖<framework src=”com.Android.support:support-v4:23.1.1”/>
  • demo内有对plugin.xmlde详解。由于详解太多,故放在代码内特别杂乱不利查阅,有需要详解的可以下载demo,也可去这里查看详解
<?xml version='1.0' encoding='utf-8'?>
<plugin id="lycPlugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>LycPlugin</name>

    <js-module name="LycPlugin" src="www/LycPlugin.js">
        <clobbers target="lyc.toast" />
    </js-module>

    <platform name="android">

        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="LycToast">
                <param name="android-package" value="com.lyc.toast.LycPlugin" />
            </feature>
        </config-file>

        <config-file parent="/*" target="AndroidManifest.xml">
            <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        </config-file> 

        <source-file src="src/android/LycPlugin.java" target-dir="src/com/lyc/toast" />
        <source-file src="src/android/xxx.jar" target-dir="libs" />
    </platform>
</plugin>

3.2 lycPlugin.js

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

exports.coolMethod = function(arg0, success, error) {
    exec(success, error, "LycPlugin", "coolMethod", [arg0]);
};
var lycFunc = function(){};
// arg1:成功回调
// arg2:失败回调
// arg3:将要调用类配置的标识
// arg4:调用的原生方法名
// arg5:参数,json格式
lycFunc.prototype.showToast=function(success, error) {
    exec(success, error, "LycToast", "showToast", []);
};

lycFunc.prototype.showToastwithmsg=function(text, lenth,success, error) {
    exec(success, error, "LycToast", "showToastwithmsg", [text, lenth]);
};

var showt = new lycFunc();
module.exports = showt;

3.3 LycPlugin.java

package com.lyc.toast;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.widget.Toast;

import b.b.b.simple;

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

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if("showToast".equals(action)){
            int temp = simple.add(4,5); //jar包内方法的引用(实验)
            Toast.makeText(cordova.getActivity(), "show..."+"jar包方法结果"+temp, Toast.LENGTH_SHORT).show();
            callbackContext.success("success");
            return true;
        }else if("showToastwithmsg".equals(action)){
            String str = args.getString(0);
            int len = args.getInt(1);

            if(len == 0){
                Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_SHORT).show();
                callbackContext.success("success" + str);
                return true;
            }else{
                Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_LONG).show();
                callbackContext.success("success" + str);
                return true;
            }
        }
        callbackContext.error("error");
        return false;
    }
}

4. 安装插件

我的插件所在的路径是F:\LycPlugin
首先切换到最初创建的hello目录 cd hello
执行插件安装命令

 cordova plugin add F:\LycPlugin  

执行完之后你就发现插件已经安装上去了

如果你想卸载插件的话,执行cordova plugin remove plugin_id
egg:

cordova plugin remove lycPlugin

5. 插件的使用

lyc.toast.showToast();  

lyc.toast.showshowToast("hello",0, function(msg) {  
              alert(msg);  
          }, function(msg) {  
              alert(msg);  
          }); 

三. 一些问题

jre使用版本过高。生成jar包时使用 javaSE -1.7(jdk1.8.0.20)

插件未能正确引入Android Stuidio ,正确import详见此篇博客

Gradle版本过低,使用2.10版本正常

出现了Gradle version 2.10 is required. Current version is 2.2.1. If usingthegradle解决办法如下详见这里

buildscript {

    System.properties['com.android.build.gradle.overrideVersionCheck'] = 'true'
    …
}

一些关键问题的必要版本

Gardle 2.10
JavaSE – 1.7(jdk 1.8.0.20) 

点击下载demo

版权声明:本文为博主原创文章,未经博主允许不得转载。

多谢cool丶的帮助