Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码。

一、安装cordova

npm install -g cordova

二、创建项目

cordova create hello com.blue.sky.hybrid.app.hello HelloWorld

三、添加平台支持

cd hello

cordova platform add android (前提是系统上面要安装了对应移动系统的SDK)

在windows系统:

$ cordova platform add wp8
$ cordova platform add windows
$ cordova platform add amazon-fireos
$ cordova platform add android
$ cordova platform add blackberry10
$ cordova platform add firefoxos

在mac系统:

$ cordova platform add ios
$ cordova platform add amazon-fireos
$ cordova platform add android
$ cordova platform add blackberry10
$ cordova platform add firefoxos

四、常用命令

cordova platforms ls 查看当前安装的移动平台

cordova platform rm android 移除系统支持

cordova build 或者 cordova build android 编译

cordova emulate android 模拟器运行程序

需要安装ant:配置系统环境变量,ant需要java支持,确定系统安装JDK,并配置JAVA环境变量。

ANT_HOME   D:\tool\apache-ant-1.9.0
PATH       %ANT_HOME%\bin
CLASSPATH  %ANT_HOME%\lib

cordova run android usb  真机运行程序

cordova platform update android 更新android平台

五、插件管理

cordova plugin search bar code 搜索插件
cordova plugin add org.apache.cordova.console 增加插件支持, 多个空格分开
cordova plugin add org.apache.cordova.console@latest 最新版本
cordova plugin add org.apache.cordova.console@0.2.1 指定版本
cordova plugin add https://github.com/apache/cordova-plugin-console.git
cordova plugin add https://github.com/apache/cordova-plugin-console.git#r0.2.0 版本
cordova plugin add https://github.com/someone/aplugin.git#:/my/sub/dir 子目录

cordova plugin ls 查看已安装的插件
cordova plugin rm org.apache.cordova.console 移除插件

六、自定义插件 

学了这么多, 准备自己写个自定义插件,变在命令行输入:cordova plugin create  com.blue.sky.test   发现不管用.  查阅资料后, 发现没有这个命令, 网上大家都是手动创建目录, 觉得太麻烦,  于是用grunt 写了一个命令通过模板生成cordova plugin骨架。

》》网上的方法大概是这样:

cordova3.X之后,插件不能自己手动添加了,手动添加后,只要cordova build,数据立即被抹去.

因此,3.X后要添加插件,需要用 cordova plungin add "你本地插件的路径"  的方式来添加插件,.

1.新建一个文件夹,命名为你插件的名字,如TestPlugin

2.在文件夹里再新建2个文件夹和1个文件.两个文件夹分别是src和www.其中src中放你插件的java代码,www中放对应的js文件;与src和www文件夹同级,建立plugin.xml

》》运用grunt模板生成cordova plugin骨架

思路:cordova plugin 主要是三个文件:

1、继承cordovaActivity的Native实现类

2、编写javascript代码

3、编写plugin.xml配置文件

既然是这样, 便可以运用grunt通过模板生成cordova plugin骨架。

首先看一下项目代码结构:

第一步:制定cordova plugin模板

模板内容如下:

src/android/template.txt 继承cordovaActivity的Native实现类

package <%=pkgName%>;

import java.util.TimeZone;

import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaInterface;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.provider.Settings; public class <%=className%> extends CordovaPlugin { public <%=className%>() { } /**
* Executes the request and returns PluginResult.
*
* @param action The action to execute.
* @param args JSONArry of arguments for the plugin.
* @param callbackContext The callback id used when calling back into JavaScript.
* @return True if the action was valid, false if not.
*/
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { ///TODO 自定义实现 return true;
} }

  

www/template.txt   javascript 模板

var channel = require('cordova/channel'),
utils = require('cordova/utils'),
exec = require('cordova/exec'),
cordova = require('cordova'); function <%=className%>() { } module.exports = new <%=className%>();

  

plugin.xml  插件编译生成android 项目代码配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--插件id号,与package.json保持一致 版本号,与package.json保持一致-->
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="<%=pkgName%>" version="0.1">
<!--插件在cordova下的名称,Test.js中exec的接口名称,保持一致-->
<name><%=className%></name>
<description>Cordova Plugin</description>
<license>Apache 2.0</license>
<!--与package.json保持一致-->
<keywords></keywords>
<repo></repo>
<issue></issue>
<!--插件js接口文件配置信息,插件在android-->
<!--src="www/Test.js"为已经写好的js文件路径,与js中调用的类名保持一致-->
<js-module src="www/<%=className%>.js" name="<%=className%>">
<!--插件在js中调用的类名-->
<clobbers target="<%=className%>" />
</js-module> <!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<!--插件在java端的接口名称,与之前文件中的接口名称保持一致-->
<feature name="<%=className%>">
<!--该插件接口对应的java代码路径-->
<param name="android-package" value="<%=pkgName%><%=className%>"/>
</feature>
</config-file> <!--该插件需要的权限申明,根据需要自行定义-->
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</config-file> <!--源文件的路径和目标文件路径,src为已经编写好的java代码路径,target-dir为需要生成的android工程中该java源码路径,与上面的java代码路径保持一致-->
<source-file src="<%=sourceSrc%>" target-dir="<%=targetDir%>"/> </platform> </plugin>

运用Node.js + grunt根据模板生成骨架代码: grunt plugin:create:com.blue.sky.test:Test

grunt.registerTask('plugin:create', '自定义插件 参数一 包名  参数二 插件类名', function (arg1, arg2, arg3) {
grunt.log.writeln(">>>>length:" + arguments.length);
if (arguments.length === 2) { var pkgName = arg1;
var fileName = arg2;
var platform = arg3 || "android";
var pluginDir = "temp/" + arg1;
var tplNativeCode = "template/src/" + platform + "/template.txt";
var tplJSCode = "template/www/template.txt";
var tplPlugin = "template/plugin.xml"; var srcFileName = pluginDir + "/src/" + platform + "/" + arg2 + ".java";
var jsFileName = pluginDir + "/www/" + arg2 + ".js";
var configFileName = pluginDir + "/plugin.xml"; grunt.log.writeln("start create plugin:" + arg1); grunt.file.mkdir(pluginDir); // 创建插件java类
grunt.file.mkdir(pluginDir + "/src/" + platform);
grunt.file.write(srcFileName, grunt.file.read(tplNativeCode));
var content = grunt.file.read(srcFileName);
var text = grunt.template.process(content, {data: {"pkgName": pkgName + "." + fileName, "className": fileName}});
grunt.file.write(srcFileName, text); // 创建插件javascript
grunt.file.mkdir(pluginDir + "/www");
grunt.file.write(jsFileName, grunt.file.read(tplJSCode));
var jsContent = grunt.file.read(jsFileName);
var jsText = grunt.template.process(jsContent, {data: {"className": fileName}});
grunt.file.write(jsFileName, jsText); // 创建插件配置文件plugin.xml
var configContent = grunt.file.read(tplPlugin);
var configText = grunt.template.process(configContent,
{
data: {
"pkgName": pkgName,
"className": fileName,
"sourceSrc":"src/"+ platform + "/" + fileName + ".java",
"targetDir":"src/" + pkgName.replace(/\./g,"/")
}
}
);
grunt.file.write(configFileName, configText); grunt.log.writeln("create plugin success"); } else {
grunt.log.writeln("命令格式错误。 grunt plugin:create 包名 插件类名");
}
});

  

使用cordova plugin add "本地自定义插件代码"

cordova plugin add "D:\Project\workspace\phonegap\hello\temp\com.blue.sky.test"

运行之后, 在plugins 目录下面会看到有com.blue.sky.test插件(请看项目结果图)。

运行cordova run android 命令打包程序到手机

运行后,查看platforms目录下面生成了自定义的相关代码,如下图所示:

总结

   通过运用grunt生成cordova plugin 可以很方面的创建plugin骨架, 省去繁琐的步骤。当然, 这个demo只是实现了android平台的plugin。如果要支持ios、wp也比较简单,只需要加相应的模板以及映射关系即可。

cordova3.X 运用grunt生成plugin自定义插件骨架的更多相关文章

  1. Mybatis框架(9)---Mybatis自定义插件生成雪花ID做为表主键项目

    Mybatis自定义插件生成雪花ID做为主键项目 先附上项目项目GitHub地址 spring-boot-mybatis-interceptor 有关Mybatis雪花ID主键插件前面写了两篇博客作为 ...

  2. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  3. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

  4. Qt之自定义插件(for Qt Designer)

    之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...

  5. BrnShop:自定义插件

    BrnShop开源网上商城第四讲:自定义插件 重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www ...

  6. Adams 2013自定义插件方法zz

    1.Adams插件介绍 Adams的高级模块(如Controls控制模块.Vibration振动模块.Durability耐久性模块等)是以插件的形式集成在Adams软件中.通过Adams提供的插件管 ...

  7. cordova自定义插件的创建过程

    最近学习了cordova插件,记录一下大概的过程,仅供参考. 前期的配置就不记录了网上好多. 在简书上从新写了一个更详细的cordova插件教程,有需要的可以点这里进去看看. 第一步 创建一个cord ...

  8. Cordova与现有框架的结合,Cordova插件使用教程,Cordova自定义插件,框架集成Cordova,将Cordova集成到现有框架中

    一.框架集成cordova 将cordova集成到现有框架中 一般cordova工程是通过CMD命令来创建一个工程并添加Android.ios等平台,这样的创建方式可以完整的下载开发过程中所需要的的插 ...

  9. ionic2/cordova自定义插件集成aar包

    一.准备自定义插件 1. 准备:安装plugman npm install -g plugman 2. 新建组件 plugman create --name MyPlugin --plugin_id ...

随机推荐

  1. iOS开发-VFL(Visual format language)和Autolayout

    AutoLayout不管是在StoryBorad还是在xib中都相对来说比较简单,VFL(Visual  fromat  language)可视化语言基本上用到的比较少,在xCode4时候自动布局的概 ...

  2. uiwebview的基本使用

    http://blog.csdn.net/daiyelang/article/details/40989389

  3. C++ 简单中文敏感词检测工具类

    具体思路: 1->敏感词库,可从数据库读取,也可以从文件加载. 2->将敏感词转化为gbk编码,因为gbk严格按照字符一个字节,汉字两个字节的格式编码,便于容易切分文字段. 3->将 ...

  4. C/C++ 获取汉字拼音

    参考文章:http://blog.csdn.net/thenile/article/details/6318521 在参考文章的基础上,去掉了代码中C++特有的语法和数据类型,用纯C语言实现了获取汉字 ...

  5. 面向对象世界里转转七(Liskov替换原则)

    前言:Liskov替换原则是关于继承机制的应用原则,是实现开放封闭原则的具体规范,违反了Liskov原则必然意味着违反了开放封闭原则.因此,有必要对面向对象的继承机制及其基本原则做以探索,来进一步了解 ...

  6. Sql server中内连接语句

    数据库中学生表和课程表如下: 内连接sql语句: select a.studentName,a.studentAge,b.courseName from student a inner join co ...

  7. javascript知识点记录(1)

    javascript一些知识点记录 1.substring,slice,substr的用法 substring 和slice 都有startIndex 和 endIndex(不包括endInex),区 ...

  8. LeetCode Longest Palindrome

    原题链接在这里:https://leetcode.com/problems/longest-palindrome/ 题目: Given a string which consists of lower ...

  9. Interview with BOA

    1. BFS 2. QuickSort 3. PCA, 1000 articles, so many factors, how to reduce factors. 4. newton's metho ...

  10. Python-S13作业-day4-之登陆,管理后台

    Python-S13作业-day4-之登陆,管理后台 需求: 本节作业,用户管理程序:          普通用户: 登录,注册,修改密码,查看本用户信息 管理员用户: 查看所有普通用户,按照指定关键 ...