写这个博文的意义在于,做了一个使用纯h5网页的东西,然后想用hbuilder在外面包一层,这样就能android和ios都能同时使用,hbuilder打包发布的工具,自认为还是做得比较完善的.后面成功的发布了一个android版本之后,有一个问题就是不能每次我修改了一点文字,就要重新发布app或者发邮件给客户吧,这样当然是不现实的,好在Hbuilder提供了"制作移动App资源升级包"功能,如下:

        以下是详细过程:

        1.前端部分的代码:重点来了,这个更新的包,需要放在后台服务里面,然后从旧的版本号和保存在服务器上最新的版本号进行对比,如果不一致或者比较大小,就需要从服务端后台下载最新的wgt更新包到android手机端,使用hbuilder官方提供的代码进行比较和更新,我修改了一下代码,主要是获取最新更新包的文件访问路径,代码如下:

  特别注意:很多人都在官网评论这个获取最新的更新wgt包的,后台代码怎么写,其实就是将更新包放在前端能直接访问的地方就行,我使用的方式就是String returnFileExcelPath = request.getScheme() + "://" + request.getServerName() + ":"
                + request.getServerPort() + request.getContextPath() + "/" + "download/new.wgt";:

获取资源文件路径,其实就是将wgt文件放在tomcat的download文件夹下面,将这个绝对路径返回给前端,这样让前端直接进行下载,就ok了.

   我后台服务的tomcat截图:

     2.后台获取最新版本和返回更新的wgt包的部分代码如下:

@RequestMapping(value = "userAdmin/getVersion", method = RequestMethod.POST)@ResponseBody@SystemLog(apiPath = "userAdmin/getVersion")@ApiOperation(value = "获取版本号", httpMethod = "POST", notes = "获取版本号")public String getVersion(HttpServletRequest request,HttpSession session) {String url="";try { url = PropertiesUtil.GetValueByKey(Constants.SYSTEM_PROPERTIES, Constants.VERSION);} catch (IOException e) {e.printStackTrace();}return url;}    //返回tomcat下的download文件夹里面的要更新的文件路径@RequestMapping(value="userAdmin/downloadPath", method = RequestMethod.GET)@ResponseBody@SystemLog(apiPath = "userAdmin/downloadPath")@ApiOperation(value = "下载文件", httpMethod = "GET", notes = "下载文件")public String downloadPath(HttpServletRequest request) throws Exception{String returnFileExcelPath = request.getScheme() + "://" + request.getServerName() + ":"+ request.getServerPort() + request.getContextPath() + "/" + "download/new.wgt";return  returnFileExcelPath;}

  以上就是前端和后端的代码,已经试验过,可以进行更新,我走过一个弯路就是,以前从后台服务下载wgt,是要返回byte再在前端转成wgt,其实只需要返回服务端后台的这个wgt的文件路径,让前端能够访问到就可以了

    .注意你打更新包wgt的时候,一定不要忘了mainfest.json,将版本号修改成最新的,我就是被这个坑了,忘记修改了.

   放福利了:后台的在线更新springmvc完整工程,已经提供下载,链接如下:springmvc后台在线更新android的完整工程代码

//***************************分割线**************************

     之后测试发现一个问题,虽然从服务端拉取了最新的增量更新包,却发现更新之后获取到的手机版本号还是老的,导致每次进去都会更新.

   解决方案: 被自己蠢哭了,原来是打升级包的时候,版本号没有修改成最新的:

   记住:你打升级包,记得改一下manifest.json文件里面的版本号为最新的,否则更新时,还是显示1.0的版本

      你可以解压自己的升级包wgt,看看里面的版本号是不是和服务端的最新的一致,如果不一致,修改一下:

 

*********************************分割线,2018年10月22日11:28:00************************************

之前的代码没有考虑连接后台更新服务,如果没网的时候,要设置一个超时连接,增加xhr.timeout=5000,5秒之后连接不上,则将窗口隐藏.而且还有一种情况,连接上,获取到最新的版本,需要下载最新的new.wgt的时候,如果客户的手机网络很慢很慢的时候,就会一直卡在下载的界面上,这是无法忍受,后来增加了是否更新的窗口,让用户在网络好的时候,再决定更新:

// 下载wgt文件function downWgt(newVersion){// 弹出对话框,询问是否更新最新版本,2018年10月22日11:21:25plus.nativeUI.confirm("应用有新版本,是否立即下载更新?", function(event) {                        if(event.index == 1) {                plus.nativeUI.showWaiting("下载最新文件中,请稍候...");    plus.downloader.createDownload( newVersion, {filename:"_doc/update/"}, function(d,status){        if ( status == 200 ) {          plus.nativeUI.closeWaiting();                     console.log("下载wgt成功:"+d.filename);          //alert("下载成功,文件名为:"+d.filename);                        installWgt(d.filename); // 安装wgt包        } else {            console.log("下载wgt失败!");            plus.nativeUI.alert("下载wgt失败!");        }                }).start();                        }                }, '提示', ['取消', '确认']);}

 

更多相关文章

  1. 在ListView中增加HeaderView和FootView
  2. android sdk 下载和更新失败解决方案
  3. 关于Handler处理UI线程的更新及Handler译文
  4. 听说谷歌Baba更新了 Material UI ...
  5. 【android】 使用观察者模式更新用户资料
  6. android 架包冲突解决方案
  7. Android中利用Handler在子线程中更新界面--简单的小球上下跳动案
  8. Android基于IIS的APK下载(三)用JSON传输更新数据
  9. Android_个人中心_修改个人信息

随机推荐

  1. Android开发小技巧 | 一句命令搞定截屏
  2. Android Launcher研究(一)-----------图
  3. android开发游记:android studio工程 转换
  4. android点滴(8) -- android应用程序的生
  5. Android中如何使控件保持固定宽高比
  6. [置顶] Android开发之动态库调用
  7. 在iOS / Android的统一字体问题
  8. android背景选择器selector用法、自定义B
  9. Android 中Activity生命周期分析:Android
  10. android download 下载管理