avatar
@bangbang93

cordova 插件开发

4/3/2015, 10:19:29 PM

cordova的文档还真是不太给力,研究了一晚上cordova插件,终于折腾出结果来了

首先cordova的插件必须有一个plugin.xml,记录了插件的基础信息和js到原生的映射信息,它可以长成这样

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:rim="http://www.blackberry.com/ns/widgets"
        xmlns:android="http://schemas.android.com/apk/res/android"
        id="http-plugin"
        version="0.2.11">
    <name>http-plugin</name>
    <description>Hello World Plugin</description>
    <license>WTFPL</license>
    <author>bangbang93</author>

    <js-module src="www/http.js" name="http">
        <clobbers target="http" />
    </js-module>

    <!-- android -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="http" >
                <param name="android-package" value="com.bangbang93.cordova.Http"/>
            </feature>
        </config-file>

        <source-file src="src/com/bangbang93" target-dir="src/com/" />
        <source-file src="src/com/google" target-dir="src/com/" />
        <source-file src="src/com/litesuits" target-dir="src/com/" />
    </platform>

    <!-- 其他平台的代码 -->
</plugin>

对插件运行来说有意义的只有两段,js-module和platform

js-module定义了一个module,src是调用的js文件,它之中定义的module.exports最终会被挂载到window对象下,名称为target定义的内容,比如这里就会多一个window.http对象

js中调用时使用

cordova.exec(success, error, 'http', 'get', [url, param]);

方法,success和error是两个回调函数,'http'是platform中的feature的name属性,'get'会作为参数传给java

platform定义了一个平台所用到的文件

Android中调用的类需要继承org.apache.cordova.CordovaPlugin,然后重写execute方法

以public boolean execute(String action, JSONArray args, CallbackContext callbackContext)为例
action就是上面的'get'这个参数,args就是最后一个数组,callbackContext有两个函数success和error,分别对应success和error两个回调函数

完成这些之后就完成了Android的cordova插件的基础