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插件的基础