1.環境搭建 (ios) andriod(http://www.wenzhixin.net.cn/2014/03/20/cordova_my_plugin)
cordova插件開發前需要安裝一些軟件和配置環境
1.1 node.js環境搭建
到node.js官網(https://nodejs.org/)下載安裝就好 , 或者命令行 用homebrew 也很方便;百度一堆資料
1.2 cordova 的安裝
在窗口輸入下面命令全局安裝cordova
npm install -g cordova
百度一堆資料
2.創建第一個應用
創建的命令是cordova create
列如:
cordova create hello com.cool.hello HelloWorld
- 第一個參數
hello
表示在工程目錄中創建一個 hello 的文件夾 - 第二個參數
com.cool.hello
表示包名(反向域名),用於標志不同的 app - 第三個參數
HelloWorld
表示項目的名稱,可以在 config.xml 文件中修改
3.添加平台
3.1 進入創建的項目目錄
cd hello
3.2 查看已有的平台
cordova platforms list
3.3添加所需要的平台
cordova platform add ios
如果想移除已經添加的平台的話 cordova platform remove ios 或者cordova platform rm ios
4.編譯項目
編譯項目命令
cordova build ios
6.插件開發
前面說了這么多全都是准備工作,接下來是插件的具體開發過程
6.1 pluman的安裝
npm install -g plugman
如果permission denied (try: sudo npm install -g plugman)
6.2 plugman安裝完之后就可以創建一個插件了cordova plugin
plugman create --name <pluginName> --plugin_id <pluginID> --plugin_version <version> [--path <directory>] [--variableNAME=VALUE]
參數:
pluginName: 插件名字
pluginID: 插件id, egg : coolPlugin
oversion: 版本, egg : 0.0.1
directory:一個絕對或相對路徑的目錄,該目錄將創建插件項目
variable NAME=VALUE: 額外的描述,如作者信息和相關描述
egg : plugman create --name CoolPlugin --plugin_id coolPlugin --plugin_version 0.0.1
生成的插件的目錄如下: (這里復制 andriod的例子 )
但是遵循規范的話,一般在src目錄下新建android目錄,然后在android目錄下新建類,如下圖

HelloPlugin.js和plugin.xml的解釋可以參考http://blog.csdn.net/itcatface/article/details/50520301,這邊博文解釋的非常詳細
其中HelloPlugin.js和plugin.xml的相關配置如下
a. plugin.xml的配置
- <?xml version='1.0' encoding='utf-8'?>
- <plugin id="coolPlugin" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
- <name>CoolPlugin</name>
- <js-module name="CoolPlugin" src="www/CoolPlugin.js">
- <clobbers target="cool.toast" />
- </js-module>
- <!-- android -->
- <platform name="android">
- <config-file target="res/xml/config.xml" parent="/*">
- <feature name="CoolToast">
- <param name="android-package" value="com.cool.toast.ShowToast"/>
- </feature>
- </config-file>
- <source-file src="src/android/ShowToast.java" target-dir="src/com/cool/toast" />
- <config-file target="AndroidManifest.xml" parent="/*">
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- </config-file>
- <config-file target="AndroidManifest.xml" parent="/manifest/application">
- <activity android:name="com.example.hello.TestActivity" />
- </config-file>
- <source-file src="src/android/TestActivity.java" target-dir="src/com/example/hello" />
- <source-file src="src/android/layout/activity_text.xml" target-dir="res/layout" />
- </platform>
- </plugin>
對於plugin.xml的下面這幾行配置有疑問的話可以參考http://blog.csdn.net/u013598660/article/details/50065937,里面講的很詳細
- <source-file src="src/android/TestActivity.java" target-dir="src/com/example/hello" />
- <config-file target="AndroidManifest.xml" parent="/*">
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- </config-file>
b.HelloPlugin.js的配置
- var exec = require('cordova/exec');
- var myFunc = function(){};
- // arg1:成功回調
- // arg2:失敗回調
- // arg3:將要調用類配置的標識
- // arg4:調用的原生方法名
- // arg5:參數,json格式
- myFunc.prototype.showToast=function(success, error) {
- exec(success, error, "CoolToast", "showToast", []);
- };
- myFunc.prototype.showshowToast=function(text, lenth,success, error) {
- exec(success, error, "CoolToast", "showshowToast", [text, lenth]);
- };
- myFunc.prototype.openActivity=function() {
- exec(null, null, "CoolToast", "openActivity", []);
- };
- var showt = new myFunc();
- module.exports = showt;
c 最后還有一個java類
里面的哪個TestActivity這個類是我測試用的,這里忽悠就好
- package com.cool.toast;
- import org.apache.cordova.CallbackContext;
- import org.apache.cordova.CordovaPlugin;
- import org.json.JSONArray;
- import org.json.JSONException;
- import com.example.hello.TestActivity;
- import android.content.Intent;
- import android.widget.Toast;
- public class ShowToast extends CordovaPlugin {
- @Override
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- // TODO Auto-generated method stub
- if("showToast".equals(action)){
- Toast.makeText(cordova.getActivity(), "show...", Toast.LENGTH_SHORT).show();
- callbackContext.success("success");
- return true;
- }else if("showshowToast".equals(action)){
- String str = args.getString(0);
- int len = args.getInt(1);
- if(len == 0){
- Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_SHORT).show();
- callbackContext.success("success" + str);
- return true;
- }else{
- Toast.makeText(cordova.getActivity(), str, Toast.LENGTH_LONG).show();
- callbackContext.success("success" + str);
- return true;
- }
- }else if("openActivity".equals(action)){
- openActivity();
- callbackContext.success("success");
- return true;
- }
- callbackContext.error("error");
- return false;
- }
- private void openActivity() {
- Intent intent = new Intent(cordova.getActivity(),TestActivity.class);
- cordova.getActivity().startActivity(intent);
- }
- }
6.3插件的安裝
我的插件所在的路徑是F:\CoolPlugin
首先切換到最初創建的hello目錄 cd hello
執行插件安裝命令 cordova plugin add F:\CoolPlugin
執行完之后你就發現插件已經安裝上去了
如果你想卸載插件的話,執行cordova plugin remove 你的plugin_id
egg:cordova plugin remove coolPlugin
6.4插件的使用
- cool.toast.showToast();
- cool.toast.showshowToast("hello",0, function(msg) {
- alert(msg);
- }, function(msg) {
- alert(msg);
- });
- cool.toast.openActivity();
在F:\hello\platforms\android\assets\www下的index.html的中
egg:
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
- <meta name="format-detection" content="telephone=no">
- <meta name="msapplication-tap-highlight" content="no">
- <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
- <link rel="stylesheet" type="text/css" href="css/index.css">
- <title>Hello World</title>
- <script type="text/javascript" charset="utf-8">
- // Wait for device API libraries to load
- //
- document.addEventListener("deviceready", onDeviceReady, false);
- function click1(){
- cool.toast.showToast();
- }
- function click2(){
- cool.toast.showshowToast("hello",0, function(msg) {
- alert(msg);
- }, function(msg) {
- alert(msg);
- });
- }
- function click3(){
- cool.toast.openActivity();
- }
- </script>
- </head>
- <body>
- <div class="app">
- <h1>Apache Cordova</h1>
- <div id="deviceready" class="blink">
- <p class="event listening">Connecting to Device</p>
- <p class="event received">Device is Ready</p>
- </div>
- </div>
- <script type="text/javascript" src="cordova.js"></script>
- <script type="text/javascript" src="js/index.js"></script>
- <a href="#" onclick="click1(); return false;">show Toast</a>
- <hr>
- <a href="#" onclick="click2(); return false;">click with back data</a>
- <hr>
- <a href="#" onclick="click3(); return false;">open activity</a>
- </body>
- </html>