`
rensanning
  • 浏览: 3552565 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38217
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607593
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682774
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89527
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402129
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69760
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91835
社区版块
存档分类
最新评论

Cordova 3.x 基础(12) -- Plugin开发

阅读更多
Cordova提供的功能能够满足一般应用,但是对于复杂的应用或者对性能要求比较严格的应用来说,并不是很理想的。所以就需要在某些场景下自己写代码来弥补这些不足,类似Titanium Module一样,Cordova也提供了Plugin功能。Cordova本身访问Native接口都是通过Plugin的方式提供的,可以参考官方Plugin代码,而且GitHub上也存在不少开源的Cordova Plugin,所以这些都是最好的教程。

Plugin的分类大概有两种:
  • JavaScript-only Plugin:不需要写Native代码,不依赖平台的共通的JS代码
  • Native Plugin:弥补Cordova提供的功能以外的Native调用,依赖各个平台写不同的Native代码


(1)Plugin构成
引用
|- plugin.xml
|- www
|   +- hello_world.js
+- src
    |- android
    |     +- com/rensanning/cordova/plugin/HelloWorldPlugin.java
    +- ios
        |- HelloWorldPlugin.h
        +- HelloWorldPlugin.m


plugin.xml : 必须。通知CLI哪个平台应该从什么地方Copy哪些文件到什么地方,以及CLI在生成config.xml时应该根据平台加入什么样的特殊设置。
JavaScript文件 : 必须。一个Plugin至少应该有一个JS文件,也可以引入其他的lib(比如:handlebars.js),定义为js-module,会被cordova.js会自动读入。
原生代码 :可选。
静态文件 : 可选。HTML、图像等

其中plugin.xml文件配置如下:
<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="org.apache.cordova.device"
    version="0.2.8">
    <name>Device</name>
    <description>Cordova Device Plugin</description>
    <license>Apache 2.0</license>
    <keywords>cordova,device</keywords>
    <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git</repo>
    <issue>https://issues.apache.org/jira/browse/CB/component/12320648</issue>

    <js-module src="www/device.js" name="device">
        <clobbers target="device" />
    </js-module>

    <!-- android -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="Device" >
                <param name="android-package" value="org.apache.cordova.device.Device"/>
            </feature>
        </config-file>

        <source-file src="src/android/Device.java" target-dir="src/org/apache/cordova/device" />
    </platform>

    <!-- 其他平台的代码 -->
</plugin>

plugin -- 命名空间、ID、版本
name -- 名称
description -- 描述
keywords -- 关键字
engines -- Cordova版本
js-module -- js文件地址,会被默认加载到首页面(index.html),通过clobbers元素的定义把就是的module.exports自定赋给window对象。
platform -- 各个平台设置

(2)创建JS Plugin
文件夹结构:
引用
sample
│  plugin.xml

└─www
        hello_world.js


plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="com.rensanning.cordova.helloworld"
    version="0.0.1">
    <name>HelloWorldPlugin</name>
    <description>HelloWorldPlugin Description</description>
    <author>rensanning</author>
    <license>Apache 2.0 License</license>
    <engines>
        <engine name="cordova" version=">=3.0.0" />
    </engines>
    <js-module src="www/hello_world.js" name="helloworld">
        <clobbers target="HelloWorld" />
    </js-module>
</plugin>


hello_world.js:
var HelloWorld = function() {};

HelloWorld.prototype.say = function() {
    alert("Hello World");
};

var helloWorld = new HelloWorld();
module.exports = helloWorld;


创建工程测试Plugin:
引用
cordova create simplePlugin com.rensanning.cordova.simplePlugin SimplePlugin
cd simplePlugin
cordova platform add android
cordova plugin add E:\plugins\sample


修改index.html后启动测试即可。
<button onclick="test();">Click me!</button>
<script type="text/javascript">
  function test() {
      HelloWorld.say();
  }
</script>



(3)创建Native Plugin
以Android下获取Carrier Code为例。
文件夹结构:
引用
carrier
│  plugin.xml

├─src
│  └─android
│          CarrierPlugin.java

└─www
        carrier.js


plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="com.rensanning.cordova.carrier"
    version="0.0.1">
    <name>CarrierPlugin</name>
    <description>CarrierPlugin Description</description>
    <author>rensanning</author>
    <license>Apache 2.0 License</license>
    <engines>
        <engine name="cordova" version=">=3.0.0" />
    </engines>
    <js-module src="www/carrier.js" name="carrier">
        <clobbers target="Carrier" />
    </js-module>
    <platform name="android">
        <source-file src="src/android/CarrierPlugin.java" target-dir="src/com/rensanning/cordova/carrier" />
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="CarrierPlugin">
                <param name="android-package" value="com.rensanning.cordova.carrier.CarrierPlugin"/>
            </feature>
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/*">
            <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        </config-file>
    </platform>
</plugin>


CarrierPlugin.java:
public class CarrierPlugin extends CordovaPlugin {
	public static final String TAG = "CarrierPlugin";
	public static final String ACTION_GET_CARRIER_CODE = "getCarrierCode";
	public TelephonyManager tm;

	public void initialize(CordovaInterface cordova, CordovaWebView webView) {
		super.initialize(cordova, webView);
		Context context = this.cordova.getActivity().getApplicationContext();
		tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
	}

	@Override
	public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
		if (ACTION_GET_CARRIER_CODE.equals(action)) {
			String carrier = tm.getSimCountryIso();
			Log.d(TAG, carrier);
			callbackContext.success(carrier);
			return true;
		}
		return true;
	}
}


carrier.js:
var cordova = require('cordova');

var Carrier = function() {};

Carrier.prototype.getCarrierCode = function(success, error) {
    cordova.exec(success, error, 'CarrierPlugin', 'getCarrierCode', []);
};

var carrier = new Carrier();
module.exports = carrier;


修改index.html后启动测试即可。
<button onclick="test2();">Carrier Code!</button>
<script type="text/javascript">
  function test2() {
    Carrier.getCarrierCode(onSuccess, onFailure);
  }
  function onSuccess(result) {
    alert("Result: " + result);
  }
  function onFailure(err) {
    alert("Failure: " + err);
  }
</script>



***Cordova device APIs从Cordova 3.0开始全Plugin的机制稍有变化,默认都不可用,需要什么添加什么:

Plugin的添加和删除也同时提供两种方式: Cordova CLI、Plugman。
但是不同的是Plugman一次只能为一个platform添加Plugin,而Cordova CLI是为所有平台都添加Plugin。
Cordova CLI内部实际上也是调用的Plugman。

安装plugman
引用
npm install plugman -g
plugman -v
plugman help

添加Plugin
引用
plugman --platform android --project <directory> --plugin <name|url|path> [--plugins_dir <directory>] [--www <directory>] [--variable <name>=<value>]

删除Plugin
引用
plugman --uninstall --platform android --project <directory> --plugin <id> [--www <directory>] [--plugins_dir <directory>]


详细参考:https://github.com/apache/cordova-plugman/
Cordova Plugin Registry有以下两个:http://plugins.cordova.io/http://plugreg.com/plugins

***Plugin的js中直接写代码即可,CLI会包装你的代码:
比如:
cordova.define("com.rensanning.cordova.helloworld.helloworld", function(require, exports, module) { var HelloWorld = function() {};

HelloWorld.prototype.say = function() {
    alert("Hello World");
};

var helloWorld = new HelloWorld();
module.exports = helloWorld;
});


参考:
Plugin Development Guide
Plugin Specification(plugin.xml)
  • 大小: 17.1 KB
  • 大小: 16.8 KB
  • 大小: 20.8 KB
分享到:
评论
4 楼 chenpenglong 2016-03-28  
为什么不提供完整的工程呢
3 楼 jia_dojo 2015-07-24  
楼主,我想请教一下,我是用的cordova3.4.1 这个 版本 为什么我的这个目录下没有 plugin.xml 文件呢?
2 楼 jia_dojo 2015-07-24  
为什么我的就不成功能?
1 楼 jia_dojo 2015-07-24  
你好,你这个是通过命令添加的插件么?

相关推荐

    Cordova 3.x 入门 - 目录

    Cordova 3.x入门教程是针对移动应用开发的框架,它允许开发者使用Web技术(HTML5、CSS3、JavaScript)来构建跨平台的移动应用程序。Cordova的核心理念是将Web应用封装在原生的移动应用壳中,使得Web应用能够访问设备...

    Cordova 3.x 基础(7) -- Native API的使用

    **Cordova 3.x 基础:Native API的使用** Cordova,作为一个开源的移动应用开发框架,允许开发者使用Web技术(HTML5、CSS3、JavaScript)来构建跨平台的移动应用程序。在Cordova 3.x版本中,开发者可以通过其提供的...

    Cordova 3.x 基础(16) -- slides & books

    **Cordova 3.x 基础知识** Cordova 是一个开源移动开发框架,它允许开发者使用标准的 Web 技术如 HTML5、CSS3 和 JavaScript 来构建跨平台的移动应用。Cordova 3.x 版本是该框架的一个重要里程碑,提供了许多改进...

    Cordova 3.x 源码分析(2) -- cordova.js概要

    在Cordova 3.x版本中,这些功能对于开发者理解和构建混合应用至关重要。 1. 初始化过程: 当应用启动时,`cordova.js`首先处理初始化工作。它会监听页面加载事件,当DOM加载完成后,它会触发`deviceready`事件。这...

    Cordova 3.x 实用插件(1) -- Google地图Maps

    在“Cordova 3.x 实用插件(1) -- Google地图Maps”这个主题中,我们将探讨如何在Cordova项目中集成Google Maps API,以实现地图功能。 首先,我们需要安装Google Maps插件。在Cordova 3.x 中,这通常通过命令行...

    Cordova 3.x 实用插件(2) -- 二维码Barcode

    对于Cordova 3.x,这个插件可能是phonegap-plugin-barcodescanner。这是一个非常流行的插件,支持多种平台,包括Android、iOS、Windows Phone等。安装步骤通常如下: 1. 打开命令行工具,进入Cordova项目的根目录。...

    Cordova 3.x 实用插件(4) -- Android的SEND、VIEW、CALL(WebIntent)

    标题 "Cordova 3.x 实用插件(4) -- Android的SEND、VIEW、CALL(WebIntent)" 涉及的是使用Cordova框架在Android平台上开发混合移动应用时,如何利用WebIntent插件实现与Android原生功能的交互。这篇博客文章详细...

    cordova-plugin-ionic-webview:用于Cordova的Web View插件,专门用于Ionic应用程序

    注意:此存储库及其文档适用于cordova-plugin-ionic-webview @ 5.x ,它使用的新功能可能不适用于所有应用程序。 请参阅和 2.x文档可以在找到。 :open_book: 文档: : :megaphone: 支持/问题? 有关常规支持...

    cordova-plugin-wkwebview-engine:Apache Cordova wkwebview引擎插件

    要安装当前版本: cordova create wkwvtest my.project.id wkwvtestcd wkwvtestcordova platform add ios@4cordova plugin add cordova-plugin-wkwebview-engine要测试开发版本: cordova create wkwvtest my....

    cordova.js 用于移动端开发项目打包

    5. **安装插件**:根据需要,通过Cordova CLI安装所需的设备API插件,例如`cordova plugin add cordova-plugin-camera`。 6. **构建和测试**:使用CLI构建应用,并在模拟器或真实设备上进行测试。 7. **发布应用**:...

    Cordova-APP软件及其插件开发.pdf

    ### Cordova-APP软件及其插件开发 #### 一、引言 随着移动互联网技术的飞速发展,APP成为人们日常生活中不可或缺的一部分。为了满足不同平台的需求,开发者们需要掌握跨平台开发技术。其中,Cordova作为一种开源...

    cordova-diagnostic-plugin:诊断插件可让您检查PhoneGap应用程序中的其他设备设置

    Objective-C是苹果开发环境中的主要编程语言,用于编写原生的iOS和OS X应用程序。开发者需要具备Objective-C的基础知识才能正确集成和使用此插件。 使用`cordova-diagnostic-plugin`时,开发者需要首先将其添加到...

    WifiWizard2:一个用于管理Wifi网络的Cordova插件(新版本的WiFiWizard)-最新版本为3+

    WiFi向导2-3.1.1目录安装掌握发行版流星错误/拒绝通用抛出错误例子离子/角度示例(用户提供) 变更日志: 关于WifiWizard2在Cordova / Phonegap项目中为Android和iOS应用程序启用Wifi管理。 该项目是WifiWizard插件...

    cordova-phaser-typescript-template:用于手机游戏的cordova模板

    相依性节点js 12.x产品特点移相器3.x TypeScript + ESLint 带有实时服务器的Webpack4(根据更改生成并重新加载浏览器) 资产管理器和带有进度条的加载器BGM播放器(Howler.js) 移动平台支持(cordova) Firebase...

Global site tag (gtag.js) - Google Analytics