PhoneGap插件开发流程

前几天写了一个PhoneGap插件,这个插件的功能很简单,就是开启viewport设置。不过与其它插件相比,有好几个有意思的地方,仔细读了PhoneGap的源码才搞定。这里记录一下PhoneGap插件开发的流程,以及开发这个插件遇到的问题。

0.先安装android sdk, node.js,phonegap和plugman。请参考用PhoneGap编译CanTK

1.用plugman创建一个插件:

plugman create --name ViewPort --plugin_id com.tangide.viewport --plugin_version 1.0.0

2.编写JAVA代码: src/android/ViewPort.java

package com.tangide.viewport;

import android.util.Log;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;
import android.webkit.WebSettings;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

public class ViewPort extends CordovaPlugin {
    private static final String LOG_TAG = "ViewPort";

    @Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        final CordovaWebView wv = webView;
        super.initialize(cordova, webView);
        webView.post(new Runnable() {
            @Override
            public void run() {
                WebSettings ws = wv.getSettings();
                ws.setUseWideViewPort(true);
                ws.setLoadWithOverviewMode(true);
                wv.reload();
                Log.d(LOG_TAG, "ViewPort Enabled");
            }
        });
    }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Log.d(LOG_TAG, "No Method In This Plugin");
        return false;
    }
}

这里比较有意思的是,我们的插件并不提供接口,而是在初始化是做些设置。所以initialize函数才是重点,但是遇到两个问题:

一是APP启动时并没有调用插件的initialize函数,仔细研究PhoneGap插件加载流程后才知道需要在plugin.xml里加一项设置。

二是在initialize函数里调用WebSettings出错,原因是初始化线程不是WebView的UI线程。这个问题通过webView.post来解决。

3.修改JS包装插件函数。本插件的JS是www/ViewPort.js,我们不需要提供接口。

4.修改 plugin.xml


<plugin id="com.tangide.viewport" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>ViewPort</name>
    <description>This plugin enable the meta viewport in html</description>

    <author>Li XianJing</author>
    <license>MIT</license>
    <keywords>Meta, Android, ViewPort, DPI, Width</keywords>
    <repo>https://github.com/drawapp8/ViewPort.git</repo>
    <issue>https://github.com/drawapp8/ViewPort/issues</issue>

    <engines>
        <engine name="cordova" version=">=3.0.0"/>
    </engines>

    <js-module name="ViewPort" src="www/ViewPort.js">
        <clobbers target="cordova.plugins.ViewPort" />
    </js-module>

    <!-- Android -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="ViewPort">
                <param name="android-package" value="com.tangide.viewport.ViewPort" />
                <param name="onload" value="true" />
            </feature>
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/*"></config-file>
        <source-file src="src/android/ViewPort.java" target-dir="src/com/tangide/viewport/" />
    </platform>
</plugin>

这里值得关注的是下面这行代码,它让APP在启动时就执行插件initialize函数:

<param name="onload" value="true" />

5.把它放到github上。

6.发布插件到http://plugins.cordova.io 上。

plugman adduser lixianjing
plugman publish
时间: 2024-10-12 12:52:50

PhoneGap插件开发流程的相关文章

vue插件开发流程详解-从开发到发布至npm(一)

vue的插件开发 1.本地开发 1.1 初始化本地开发项目 我们采用vue-cli,初始化一个vue 项目.这个不做详解,请移步到 这里,查看具体详细.初始化后就是这样的项目结构: 其他的文件目录不是本节内容重点,不做详解,请移步这里查看. 1.2 test.js 的内容 ,这是插件的入口文件 关于为什么需要在install这个方法这里添加我们的方法,可以参考官网.https://cn.vuejs.org/v2/guide/plugins.html  这里只是用了其中的一部分的内容. test.

android phonegap插件开发方法 plugin

参考http://blog.csdn.net/aaawqqq/article/details/20401111 配置 asset/www/cordova _plugins.js 文件 cordova _plugins的结构 module.exports= [{}]; module.exports.metadata = { } 在module.exports 的花括号里面配置 [javascript] view plaincopy { "file": "plugins/inte

gitbook 入门教程之小白都能看懂的 Gitbook 插件开发全流程

什么是插件 Gitbook 插件是扩展 GitBook 功能(电子书和网站)的最佳方式. 只要是 Gitbook 默认没有提供的功能,基于插件机制都可以自行扩展,是插件让 Gitbook 变得更加强大. 本文将全面介绍插件的相关知识并重点介绍插件开发的全流程,只有熟悉插件开发流程才能做到有的放矢,心中有数,进而开发出自己的插件. 关于插件请参考 Gitbook 入门教程高级进阶系列文章,本文重点讲解开发 Gitbook 的基本流程. gitbook 入门教程之插件介绍 gitbook 入门教程之

【手把手教你Eclipse插件开发】之插件入门

最近由于特殊需要,开始学习插件开发. 以前接触java也算有些时日,但是一直不知道有插件开发这样一种技术路径,本想着这开发工具都给你备好了,直接用不就行了.但是总有些IT工厂,为了要节约成本,开发自己的开发工具,但是又要节省时间,总不能一切都自己来.毕竟开发一个eclipse也要很长时间的.因此,插件开发出现在历史舞台. 首先要了解插件开发,就得从SWT/JFACE说起了.SWT是一种开源的界面开发框架,以前学java的时候,总是用一些panel,就类似这个.JFace又是一种基于SWT的UI不

PhoneGap 安装体验

1 npm -v #显示版本,检查npm 是否正确安装. 2 npm install express #安装express模块 3 npm install -g express #加上 -g 启用global安装模式 4 npm list #列出已安装模块 5 npm show express #显示模块详情 6 npm update #升级所有套件 7 npm update express #升级指定的模块 8 npm uninstall express #删除指定的模块 Jsdom 安装流程

phonegap 框架详解

首先, 来看一下phonegap 初始化流程以及Native 与 JS 交互流程图. 说明:socket server模式下, phonegap.js 源码实现的采用1 毫秒执行一次XHR请求,  当Native  JS 队列里面有JS语句数据时,才是真正的1毫秒调用一下;  当没有数据, scoket server 会阻塞10毫秒, 也就是XHR 要等10秒钟才能收到结果,并进行下一次的轮询. 1.Activity继承 DroidGap (extends PhonegapActivity) 从

使用phonegap开发安卓HLS播放软件解决方案

目前使用phonegap开发的手机应用,很少涉及视频播放的功能,究其原因,主要是phonegap提供的API里面对视频播放功能支持度不够,当然播放音频一般情况下还是能够实现的,由于工作需要,自己研究了一下如何使用phonegap来开发视频播放软件,主要有以下几种思路: 解决方案1:使用HTML5中的Video标签来进行播放,这种方案实际上在phonegap中的表现和直接用安卓原生浏览器来测试时一样的,这个时候你会发现将一个放在服务器上的包含Video标签的页面使用安卓原生浏览器打开之后,对于HL

微信小程序插件开发

小程序插件功能介绍 插件,是可被添加到小程序内直接使用的功能组件.开发者可以像开发小程序一样开发一个插件,供其他小程序使用.同时,小程序开发者可直接在小程序内使用插件,无需重复开发,为用户提供更丰富的服务. 开发插件 开放范围及服务类目 开放范围:企业.媒体.政府及其他组织主体的小程序 开发者可选择当前小程序帐号已选类目中的一个,作为插件的服务类目.以下为当前已开放的插件服务类目,将逐步开放更多类目. 一级类目 二级类目 特殊说明 快递业与邮政 所有二级类目   医疗 就医服务.互联网医院 仅医

JQUERY省、市、县城市联动选择

JQUERY 插件开发——CITYLINKAGE(省.市.县城市联动选择) 第一部分:背景   开发源于需求,本次城市联动选择插件算是我写插件的一个特例吧,不是我目前工作需要些的,算是兴趣驱使吧.之前呢,一直想写这个插件,然后错过了一个写这个插件的机会(这个得回顾到很久以前了...此处省去N个字).然后最近“瘾”又犯了,呵呵,随手就拿这个“欠”了很久的插件开刀了.大家都应该知道“某宝”的这个插件写的还是很强大的,支持到街道(镇)级别...可见他们维护的前端数据有多大...不过呢,临渊羡鱼,不如退