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