安卓Hbuilder离线打包更新升级

公司的项目是混合开发项目,主要以前端页面为主,安卓端提供辅助功能。Android端是以Widget方式集成HTML5+SDK方法 。现在前端页面需要更新升级,参考了这里写链接内容

这里写链接内容,发现单独升级前端html5页面不行(本人主要是安卓开发,对前端不熟悉,所以wgt升级方式没试过,不过他们官网上面的评价好像也说不行)。所以自己弄了套升级方案,亲测可行,下面是过程。
在SDK_WebAPP中,以前我们设置的webapp资源路径为 String appBasePath = "/apps/前端项目的appid";
所以以前我们的html5页面都是放在assets目录下的,assets目录可读不可写。导致后续更新操作无法执行,所以我们可以考虑下从更换资源文件的存放位置来实现更新。
我们可以把appBasePath这个路径设置为手机SD卡的本地路径,例如我的项目里就是这么设置的:
String sdcard = Environment.getExternalStorageDirectory().toString();
String appBasePath = sdcard + "/Android/data/应用包名/apps/前端项目的appid";

现在呢,手机的SD卡上面是没有这个文件的,所以我们可以把前端资源拿出来,弄成一个压缩文件,放到assets目录下,然后再app启动的时候把压缩文件解压到上面我们设定的那个位置上,当然,不能每一次启动都去解压缩,所以要做判断

  String mainfestPath = appBasePath + "/www/manifest.json";
  File festFile = new File(mainfestPath);
                if (!festFile.exists()) {
                    try {
            //从assets文件解压缩到手机SD卡,请自行百度
                       boolean isFinish =  SystemUtils.unZipAssets(this, "www.zip", appBasePath );
                       if (isFinish){
            //如果解压完成,跳转到包含html5的SDK_WebAPP页面
                           dumpToWeb();
                       }
                        Log.e("SystemUtils.unZi", "执行了解压");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
            //文件已存在,直接跳转
                    dumpToWeb();
                    Log.e("SystemUtils.unZi", "没有执行解压");
                }
            }
        }

修改后的结构如下,记得要把之前放在 apps.前端项目appid.www下的应用资源文件全部删除,不然全部无效!!!
安卓Hbuilder离线打包更新升级_第1张图片
以上,是修改前端资源在手机的存储位置的,下面是对前端资源的更新的。
每次打开app后,先检测对应的手机SD卡有没有menifest.json文件,如果没有,则解压缩,如果有,则将menifest.json文件中的code值与服务器返回的版本号做对比(也可以拿gralde文件中的versionCode或者versionName做对比,效果都差不多,都是判断是否有更新),code值低于服务器版本号的号,则将服务器的压缩文件下载到本地,再将本地的文件删除,最后将下载的压缩文件解压到对应位置。到此,更新完成。

以上,基本就实现了前端包的更新功能。

你可能感兴趣的:(安卓Hbuilder离线打包更新升级)