WdBly Blog

懂事、有趣、保持理智

WdBly Blog

懂事、有趣、保持理智

周维 | Jim

603927378@qq.com

Cordova插件封装

Cordova插件封装

1:新建cordova项目

2:注意cordova版本

3:添加平台 cordova platform add android@x.x.x

添加平台时cordova会自动将plugins文件夹中的插件安装到platforms中,但是不会生成fetch.json文件,同时package.json的cordova -> plugins中不会出现此插件。

4:安装pluginman

npm i pluginman -g

5: plugman create --name <插件名称> --plugin_id <插件id> --plugin_version <插件版本>

6:为插件添加平台plugman platform add --platform_name <平台名称>

其实所谓的插件就是有一定的目录结构,能被cordova添加进platforms文件的单独项目。项目中包含plugin.xml配置文件,package.json项目文件,www文件夹下的js文件用于导出方法,android中都是cordova结合原生的实现。

plugin.xml配置文件如下

<?xml version='1.0' encoding='utf-8'?> <!-- 定义了插件 ID,版本 --> <plugin id="com.lben.cdv_plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 定义了插件名称 --> <name>CDVPlugin</name> <!-- 指定到公共 JS 接口的路径 --> <js-module name="CDVPlugin" src="www/CDVPlugin.js"> <!-- 定义了 JS 调用插件的方法 --> <clobbers target="cordova.plugins.CDVPlugin" /> </js-module> <platform name="android"> <!-- 指明插入到 config.xml 的位置,以使平台了解额外的插件代码库 --> <config-file parent="/*" target="res/xml/config.xml"> <!-- 在 config.xml 插入的内容 --> <feature name="CDVPlugin"> <param name="android-package" value="com.lben.cdv_plugin.CDVPlugin" /> </feature> </config-file> <!-- 指定使用此插件会加入到安卓 AndroidMainfest.xml 里面的权限项目 --> <config-file parent="/*" target="AndroidManifest.xml"></config-file> <!-- 指出插件本地代码的位置,以及插入到安卓平台源码的目录 --> <source-file src="src/android/CDVPlugin.java" target-dir="src/com/lben/cdv_plugin/CDVPlugin" /> </platform> </plugin>

插件的java代码

// 等于插件 ID package com.lben.cdv_plugin; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CallbackContext; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; // 继承 CordovaPlugin public class CDVPlugin extends CordovaPlugin { // 重写 execute 方法 @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { switch (action) { case "mTest": String message = args.getString(0); this.mTest(message, callbackContext); return true; default: return false; } } private void mTest(String message, CallbackContext callbackContext) { if (message != null && message.length() > 0) { callbackContext.success("调用成功:" + message); } else { callbackContext.error("调用失败:未能检测到有效参数。"); } } }

了解这些后需要写一个插件最重要的是有 sdk详细文档,同时参考其它插件的写法,也需要了解一些java, os的语法。