1. 使用node.js创建一个cordova工程
Cordova create Ncores com.example.demoNcores
然后进入Ncores文件夹下,添加android平台
Cordova platform add android
至此android平台已经添加完毕
然后添加cordova 官方的一些插件
Cordova plugin add org.apache………..
…….
第一步准备工作完成
2. 创建自己的插件
首先新建一个文件夹 com.example.demo.numcores
文件夹下添加doc src www三个子文件夹
doc是一些文档描述 (可选)
src (必选)是原生代码文件夹 在src下新建android 和ios等各种平台文件夹,android下是java文件 即NumCoresPlugin.java
ios我暂未写
www(必须选)下新建一个js文件numcores.js
plugin.xml(必选)
这个是开发插件最重要的配置文件
这个plugin.xml文件可以参看任意的一个插件的plugin.xml 架构完全一样
下面罗列了我这个插件开发的plugin.xml
<?xmlversion="1.0" encoding="utf-8"?>
<pluginxmlns="http://www.phonegap.com/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="com.example.demo.numcores"
version="0.0.1">
<name>NumCoresPlugin</name>
<description>NumCoresPlugin Description</description>
<author>lt</author>
<license>Apache 2.0License</license>
<engines>
<engine name="cordova"version=">=3.0.0" />
</engines>
<!-- js文件地址,会被默认加载到首页面(index.html),通过clobbers元素的定义把就是的module.exports自定赋给window对象。 -->
<js-modulesrc="www/numcores.js" name="numcores">
<clobberstarget="NumCores" />
</js-module>
<!-- 添加了平台Android -->
<platform name="android">
<!--java文件地址 source-file 和config-file
这里是插件的配置信息,最后会添加到res/xml/config.xml 文件中,并且src/android/NumCoresPlugin.java,复制到 android 的 package 包中
-->
<source-file src="src/android/NumCoresPlugin.java"target-dir="src/com/example/demo/numcores" />
<config-filetarget="res/xml/config.xml" parent="/*">
<!--
exec(<successFunction>,<failFunction>, <service>, <action>, [<args>]);
<featurename="<service_name>">
<param name="android-package"value="<full_name_including_namespace>" />
</feature>
-->
<feature name="NumCores">
<param name="android-package"value="com.example.demo.numcores.NumCoresPlugin"/>
</feature>
</config-file>
<config-filetarget="AndroidManifest.xml" parent="/*">
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
</config-file>
</platform>
</plugin>
这之间需要特别关注地方已经用不同颜色标注出来了
3. 写js文件
numcores.js文件如下:
cordova.define("com.example.demo.numcores.numcores",function(require, exports, module) { //JavaScript Document
varcordova = require('cordova');
//varNumberCores =function(){};
varNumCores = function() {};
NumCores.prototype.say= function() {
alert("NumberCores!");
};
//获取手机CPU单核多核代码 <feature name="NumCores">
// private int getNumCores() {}
NumCores.prototype.getNumCores= function(success, error) {
cordova.exec(success, error, 'NumCores','getNumCores', []);
};
varnumbercores = new NumCores();
module.exports= numbercores;
});
index.html加载的就是plugin www下的js文件 无需再手动添加 会自动加载
关于error:
之前老是出 uncaught Reference:NumberCores is not defined的错误
不出结果
原因是由于html文件,
在html文件中会提及 原因并不是出在js文件上的NumberCores没有与 cordova.exec(success, error, 'NumCores','getNumCores', [ ] );中的NumCores对应导致 而是由于clobbers
4. html文件
核心:
function getNumber(){
//NumberCores.getNumCores(onSucc,onFai); 如果用这个出不来结果 这个NumberCores 对应的是clobbers 并不是js中全局变量的方法名 已测 也不是我之前想的service name
NumCores.getNumCores(onSucc,onFai);
}
function onSucc(result){
alert(result);
}
function onFai(error) {
console.log("onFileError:" + error.code);
}
这个地方的NumCores 不是来源于js文件的全局方法名字 而是来源于clobbers 这就是报错的缘由
5. java文件 (参看cordova的官方文档 )
其中java文件当中插件需要实现 需要使用以下两种方法
1) initialize
Plugins should usethe initialize method for their start-up logic.
@override
publicvoid initialize(CordovaInterface cordova,CordovaWebView webView) {
super.initialize(cordova, webView);
// your init code here
}
Writing anAndroid Java Plugin
A JavaScript callfires off a plugin request to the native side, and the corresponding Javaplugin is mapped properly in the config.xml file, but what does the finalAndroid Java Plugin class look like? Whatever is dispatched to the plugin withJavaScript's exec function is passed into the plugin class's execute method.Most execute implementations look like this:
6. @Override
publicboolean execute(String action,JSONArray args,CallbackContext callbackContext)throwsJSONException {
if ("beep".equals(action)) {
this.beep(args.getLong(0));
callbackContext.success();
returntrue;
}
returnfalse; // Returningfalse results in a "MethodNotFound" error.
}
3)在写出原生代码 实现功能
方法:getNumCores()
现在就可以将插件通过命令行的方式加入到cordova的工程中
6. 测试 :
Ok
代码下载处 http://download.csdn.net/detail/u011394553/7963393
要积分的表喷我