一、创建空白的cordova项目
1、到你想创建项目的目录下,打开黑窗口
cordova create hello com.example.hello HelloWorld
hello:项目目录名
com.exmple.hello:项目包名
HelloWorld:应用的名字
2、cd到刚才创建的目录hello下,添加android平台
cd hello
cordova platform add android
2、准备一个干净的插件 plugman create --name SaveDataPlugin --plugin_id cordova-myplugin-savedata --plugin_version 1.0.0 SaveDataPlugin :插件名 cordova-myplugin-savedata<span style="color: rgb(51, 51, 51); line-height: 22.8571px; font-family: Helvetica, 'Hiragino Sans GB', 微软雅黑, 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif;">:插件id</span> 新插件的目录结构 PluginB |--src |-- |--www |--pluginb.js |--plugin.xml plugin.xml代码 <?xml version='1.0' encoding='utf-8'?> <plugin id="cordova-myplugin-savedata" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android"> <!--插件名--> <name>SaveDataPlugin</name> <!--这里的js-module的name属性无所谓,起什么名字都可以,为了区别插件名,起一个其他名字。src属性是插件js文件所在的路径,--> <js-module name="MyPlugin_SaveData" src="www/SaveDataPlugin.js"> <!--clobbers标签的target属性则对应您在js调用该插件所用到的名称,比如target名字为cordova.plugins.ExtraInfo,则后面肯定是cordova.plugins.SaveDataPlugin.js定义的方法名字 来进行调用--> <clobbers target="cordova.plugins.SaveDataPlugin" /> </js-module> </plugin> 3、在本地修改插件plugin.xml,以及添加java文件 修改插件plugin.xml <?xml version='1.0' encoding='utf-8'?> <plugin id="cordova-myplugin-savedata" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android"> <!--插件名--> <name>SaveDataPlugin</name> <!--这里的js-module的name属性无所谓,起什么名字都可以,为了区别插件名起一个其他名字,这个会决定cordova.define("cordova-myplugin-savedata.MyPlugin_SaveData"。src属性是插件js文件所在的路径,--> <js-module name="MyPlugin_SaveData" src="www/SaveDataPlugin.js"> <!--clobbers标签的target属性则对应您在js调用该插件所用到的名称,比如target名字为cordova.plugins.SaveDataPlugin,则后面肯定是cordova.plugins.SaveDataPlugin.js定义的方法名字 来进行调用--> <clobbers target="cordova.plugins.SaveDataPlugin" /> </js-module> <platform name="android"> <!--这里是插件的配置信息,最后会添加到 res/xml/config.xml 文件中--> <config-file target="res/xml/config.xml" parent="/*"> <!--注意这里的name要和插件js文件中调用exec方法中所调用的插件名字一致,不然肯定会出问题--> <feature name="SaveDataPlugin"> <!--value:com.plugins.savedataplugin SaveDataPlugin 插件java文件名,插件的包名和插件的id不是一回事,虽然后有时候默认用插件id做包名--> <param name="android-package" value="com.plugins.savedataplugin.SaveDataPlugin" /> <param name="onload" value="true" /> </feature> </config-file> <!--将插件src/android目录下的PluginB复制到项目的src/com/plugins/savedataplugin目录下--> <source-file src="src/android/SaveDataPlugin.java" target-dir="src/com/plugins/savedataplugin" /> </platform> </plugin> 添加插件的java文件 新建一个PluginB.java的文件放在插件的src目录下就可以,具体的代码可以在 导入eclipse后再写。 4、将插件通过命令安装到项目中并执行prepare plugman install --platform android --project platforms\android --plugin ../PluginsDIY/ SaveDataPlugin、 对于项目来说的改变 改变1:项目中添加了插件的java文件 改变2:项目的platform_www目录下添加了插件的js文件 改变3:项目的 platform_www目录下的cordova_plugin.js发生了改变 改变4:项目res目录下的xml目录下的config.xml文件发生了改变 执行cordova prepare android命令对于项目来说的改变 只改变了一个地方,就是将assets目录下的www清空,重新将里面的文件从别的地方复制了一遍,两个地方: 1、cordova项目本地目录中的www文件下的所有文件 2、项目目录 platform_www下的所有文件 这样就把刚才安装插件引起的plugins目录和corodova_plugin.js的变化都更新了 做完上面的操作,你的插件在项目中就可以看到了,只不过还没有任何用能,因为java代码和js代码 还没写 ------------------------------------------------------------------------------------------------------------------------------------------ 5、根据功能修改插件的java代码和js代码 java代码: [java] view plain copy public class PluginB extends CordovaPlugin { private Context context; public void initialize(CordovaInterface cordova, CordovaWebView webView) { super.initialize(cordova, webView); //获取context context = this.cordova.getActivity().getApplicationContext(); } @Override public boolean execute(String action, final CordovaArgs args, CallbackContext callbackContext) throws JSONException { // if ("save".equals(action)) { cordova.getThreadPool().execute(new Runnable() { public void run() { String key = args.optString(0); String value = args.optString(1); saveData(key, value); } }); } else if ("get".equals(action)) { String key = args.optString(0); String values = this.getString(context, key, ""); callbackContext.success(values); } return true; } private void saveData(String key, String value) { this.putString(context, key, value); } public static final String FILE_NAME = "share_data"; public static SharedPreferences sp; /** * 每次使用工具类的时候,首先判断是不是已经有sp对象了,如果有了就不用再次创建了。 * * @param context * @return */ private static SharedPreferences getPreferences(Context context) { if (sp == null) { sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); } return sp; } /** * 保存key value值 * * @param context * @param key * @param value */ public static void putString(Context context, String key, String value) { SharedPreferences sp = getPreferences(context); sp.edit().putString(key, value).commit(); } /** * 根据key值获取value * * @param context * @param key * @param defValue * @return */ public static String getString(Context context, String key, String defValue) { String value = getPreferences(context).getString(key, defValue); return value; } } js代码: cordova.define("cordova-myplugin-savedata.MyPlugin_SaveData", function(require, exports, module) { var exec = require('cordova/exec'); function SaveData(){}; SaveData.prototype.save = function(key,value,success, error){ exec(success, error, "SaveDataPlugin", "save", [key,value]); }; SaveData.prototype.get = function(key,success, error){ exec(success, error, "SaveDataPlugin", "get", [key]); }; var woyuanyi = new SaveData(); module.exports = woyuanyi; }); 6、测试没问题后,将java文件复制到插件的src/android目录下,将j下面的代码复制到插件的www目录下的js文件中 var exec = require('cordova/exec'); function SaveData(){}; SaveData.prototype.save = function(key,value,success, error){ exec(success, error, "SaveDataPlugin", "save", [key,value]); }; SaveData.prototype.get = function(key,success, error){ exec(success, error, "SaveDataPlugin", "get", [key]); }; var woyuanyi = new SaveData(); module.exports = woyuanyi; 这样插件就写完了,如果想测试可以在index.html <pre name="code" class="html"><html> <head> </head> <!--cordova.js必须引入--> <script type="text/javascript" src="cordova.js"></script> <script> function save(){ var key=document.getElementById("key").value; var value=document.getElementById("value").value; alert(key); alert(value); cordova.plugins.SaveDataPlugin.save(key,value, function(result){ console.log(result); }, function(error){ console.log(error); } ); }; function get(){ var key=document.getElementById("yourKey").value; cordova.plugins.SaveDataPlugin.get(key, function(result){ alert(result); }, function(error){ console.log(error); } ); } </script> <body> key: <input id="key" type="text" /></br> value:<input id="value" type="text" /></br> <input type="button" onClick="save()" value="保存数据"/></br> key:<input id="yourKey" type="text" /></br> <input type="button" onClick="get()" value="获取数据"/></br> </body> </html> 7、上面的步骤完成,这个插件就可以通过命令安装到项目中了 如果先自己测试下,可以先通过命令将这个插件从项目中删除掉。 到cordova项目的跟目录 plugman uninstall --platform android --project platforms\android --plugin cordova-myplugin-savedata 然后执行prepare命令 cordova prepare android 然后再通过命令安装插件 plugman install --platform android --project platforms\android --plugin ../PluginsDIY/pluginb (插件的位置在当前目录上一级目录下的PluginsDIY目录下) cordova prepare android 回到eclipse中,刷新下项目就能看到插件已经安装 注意:指定了prepare后www目录下的文件都会被删除掉重新复制一遍,所以如果你在index.html里面写了测试代码,用命令重新安装后代码就没有了。