终于走到了写插件的这个地方了,插件的过程:

1.安装plugman插件,管理我们的程序

npm install -g plugman

2.创建插件项目appUpgrade,cd 到你的目标目录下,执行如下命令:

plugman create --name appUpgrade --plugin_id  com.caseStudy.plugin  --plugin_version 0.0.

其中com.caseStudy.plugin是java类的包名,以后会引用到。

执行完成后,目录下会看到新建了appUpgrade目录,其下游plug.xml文件,src和www目录

3.添加android平台:先cd 到appUpgrade目录,再执行如下命令

plugman platform add --platform_name android

会在src目录下自动创建了一个appUpgrade.java文件

4.修改我们的appUpgrade.js文件

cordova.define("cordova/plugins/appUpgrade",function(require, exports, module)
{
//1.加载需要的组件
var exec = require("cordova/exec");
//2.定义js类对象
var appUpgrade = function() {};
//3.添加js类对象的方法,url为api版本检查地址
appUpgrade.prototype.downLoad = function(apiUrl,successCallback, errorCallback)
{
if (typeof errorCallback != "function")
{
console.log("error");
return
} if (typeof successCallback != "function")
{
console.log("error");
return
}
//4.调用appUpgrade.java类的downLoad方法,参数为apiUrl
exec(successCallback, errorCallback, 'appUpgrade', 'downLoad',[ { url:apiUrl } ] );
}; //5.设置插件到exports中
var appUpgrade = new appUpgrade();
module.exports = appUpgrade; }); if(!window.plugins)
{
window.plugins = {};
}
if (!window.plugins.appUpgrade)
{
window.plugins.appUpgrade = cordova.require("cordova/plugins/appUpgrade");
}

5.appUpgrade.java类功能的改写,此处使用了开源的代码 com.shelwee.update.UpdateHelper包,前文已提过如何加入到我们项目的....此处不用再加,引入包名即可

package com.caseStudy.plugin;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
//add new import jar
import com.shelwee.update.UpdateHelper;
import android.app.Activity;
import android.content.Context; public class appUpgrade extends CordovaPlugin
{
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
{
if (action.equals("downLoad"))
{
final JSONObject options = args.getJSONObject(0);
final String url = options.getString("url");
this.downLoad(url, callbackContext);
return true;
}
else
{
callbackContext.success("there is no downLoad method in appUpgrade.java class");
return false;
}
} private void downLoad(String url, CallbackContext callbackContext)
{
callbackContext.success("invoke downLoad method success,start to check...");
UpdateHelper updateHelper = new UpdateHelper.Builder(cordova.getActivity())
.checkUrl(url)
.isAutoInstall(true)
.build();
updateHelper.check();
}
}

到此插件开发完成。

6.插件部署到app,cd到我们自己的ionic app项目目录下,执行如下命令:

cordova plugin add 你的文件路径/appUpgrade

这样会加载到我们的项目中,在plugin目录下可以看到我们的插件名appUpgrade

7.app程序调用插件的方法,不需要指明任何依赖,下面的代码可以放在button事件中,

window.plugins.appUpgrade.downLoad(appCheckVersionUrl,function(data){ console.log(data);  },function(error){ console.log(error); alert(error); });

插件已部署完成,似乎在浏览器中无法查看到插件的效果,需要打包成apk安装到手机上

8.执行命令:ionic build android

如果程序没错,成功生成apk;有错的话,需要检查我们的java代码,移除插件重新加入等,这个自己遇见了多次,代码才整理成功。

9.移除插件的命令是:

cordova plugin add path/to/your/plugin/dir

经过对插件的摸索,对ionic了解又加深一步,就可以分析其他插件的代码了!!!

Ionic app升级插件开发的更多相关文章

  1. 【ionic App问题总结系列】ionic 如何更新app版本

    ionic 如何进行自动更新 ionic App更新有两种方式:第一种是普通的从远程下载apk,安装并覆盖旧版本.另外一种就是采用替换www文件夹的内容,实现应用内更新,而无需下载安装apk. 这篇文 ...

  2. 方法:怎么用ionic命令行调试你的ionic app

    官网上有很详细的解说  http://blog.ionic.io/live-reload-all-things-ionic-cli/ 下面说说我自己的调试过程(android版): 首先用命令行进入你 ...

  3. Flutter项目之app升级方案

    题接上篇的文章的项目,还是那个空货管理app.本篇文章用于讲解基于Flutter的app项目的升级方案. 在我接触Flutter之前,做过一个比较失败的基于DCloud的HTML5+技术的app,做过 ...

  4. ionic app打包和签名

    ionic app打包和签名 1.首先在项目根目录执行  ionic platform add android  生成Android平台. 2.配置应用签名:在根目录下执行以下命令 keytool - ...

  5. Ionic App之国际化(3) json数组的处理

    接上一篇Ionic App之国际化(2) json数组的处理 之后,如何处理json数据长度的问题,目前的一个折中方法是翻译长度字段. 多语言文件内容: "MyLa": { &qu ...

  6. Ionic App之国际化(2) json数组的处理

    在Ionic App值国际化(1)中我们实现了对单个参数的多语言处理,下面开始如何进行数组的处理. 1.在我们的多语言文件中设置要访问的json数组,en.json和zh.json,此处就以en.js ...

  7. Ionic app 上传图片之webApi接口

    App上传图片对应的webApi服务端是怎么处理的呢? using System; using System.Collections.Generic; using System.Diagnostics ...

  8. App升级iOS7体会

    本文转自App升级iOS7体会. xcode5 GM版已经发布,虽然还是pre-release版,但离最终版不远了.对于没有用到新特性的app面临的最大问题就是UI的变化.Apple提供了UI Tra ...

  9. [Ionic2] Device Interaction in an Ionic App with Cordova Plugins

    In this lesson, we are going to learn how to interact with native components through Cordova plugins ...

随机推荐

  1. loadrunner 运行场景-场景运行原理

    运行场景-场景运行原理 by:授客 QQ:1033553122 运行原理 1 Remote Agent Dispatcher(Process) 运行Controller在负载机上开启应用程序. 2  ...

  2. matlab练习程序(高斯牛顿法最优化)

    计算步骤如下: 图片来自<视觉slam十四讲>6.2.2节. 下面使用书中的练习y=exp(a*x^2+b*x+c)+w这个模型验证一下,其中w为噪声,a.b.c为待解算系数. 代码如下: ...

  3. maven五:查找jar包坐标,选择jar包版本

    查找jar包坐标 以spring core的jar包为例,访问http://www.mvnrepository.com/    在最上方中间,输入spring core,点击Search. 搜索结果第 ...

  4. forfiles命令详解

    目录复制命令: xcopy   //server/bak/*.*    d:/serverbak /s /e /v /c / d /y /h             at 05:30 shutdown ...

  5. Cannot find wrapper assembly for type library "ADODB". in VS2017

    Delete Microsoft ActiveX Data Objects {version} Library and then add it back. After resolving the pr ...

  6. python第三十三天----静态方法、类方法、属性方法

    @staticmethod 装饰后,类中的方法转成静态方法 class a: @staticmethod def b(self): print('') 静态方法不可以访问实例变量或类变量,相当于类中的 ...

  7. 异常检测(anomaly detection)

    版权声明:本文为博主原创文章,转载或者引用请务必注明作者和出处,尊重原创,谢谢合作 https://blog.csdn.net/u012328159/article/details/51462942 ...

  8. 【PAT】B1075 链表元素分类(25 分)

    这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...

  9. 模糊查询sql语句条件是中文在后台从数据库查不到结果,是英文和字母就可以,而且统一编码为UTF-8了!!!

    4.在mysql安装目录下打开my.ini文件 5.保存,接着打开电脑的服务选项,将MySQL 重启 6. 重启后重新进入dos 窗口的MySQL ,输入show variables like &qu ...

  10. swift class的动态派发

    一.测试代码 class BaseCallClass{ func NormalCall(){} @objc func OcCall(){} @objc dynamic func OcDynamicCa ...