uniapp使用wgt热更新
时间: 2023-10-24 20:10:15 浏览: 248
uniapp使用wgt热更新的步骤如下:
1. 在主页或app.vue中使用plus.runtime.getProperty()获取到app的当前wgt包版本号。
2. 进行弹框询问和下载安装api调用,重启app完成热更新。
3. 如果需要更新,使用下载api(uni.downloadFile)下载最新的wgt包。
4. 使用安装wgtapi(plus.runtime.install)安装最新的wgt包。
5. 在这里监听用户下载进度,更新进度条。
需要注意的是,不能使用plus.runtime.version作为判断,它获取的是当前app的安装包版本,而不是wgt包的版本。
相关问题
uniapp的使用wgt 热更新
### 实现 UniApp 中 WGT 热更新
#### 准备工作
为了实现在 UniApp 应用程序中使用 Web Gateway Technology (WGT) 文件进行热更新,开发者需要完成一系列准备工作。这包括但不限于配置开发环境、设置服务器端逻辑以及编写客户端代码来处理更新流程。
#### 创建并上传 WGT 更新包
当构建应用程序时,`npm run build:app-plus` 命令会于 `/dist/build/app-plus` 路径下生成用于 Android 和 iOS 平台的应用资源文件夹[^2]。对于希望创建 wgt 格式的热补丁来说,应当仅选取该路径下的内容而不连同外层 `app-plus` 文件夹一起打包成 ZIP 归档;之后更改此压缩文档扩展名为 `${appid}.wgt` ,其中 ${appid} 是指 manifest.json 文件里定义的应用 ID 。这样的 .wgt 文件即成为可被用来执行增量式部署的有效载荷。
#### 客户端检测与下载最新版 WGT 包
在客户端方面,可以通过 JavaScript 方法调用来触发对远程服务器上是否有可用的新版本检查过程。一旦确认存在更高级别的固件可供安装,则可通过如下方式启动实际的数据获取动作:
```javascript
downloadWgt() {
plus.nativeUI.showWaiting("正在下载...");
var dtask = plus.downloader.createDownload(
"http://example.com/path/to/latest.wgt", // 远程地址应替换为真实的URL
{},
function(d, status){
if(status == 200){
console.log("下载成功:"+d.filename);
// 下一步骤:验证签名和完整性校验
installUpdate(d.filename); // 成功后继续尝试安装新的wgt包
}else{
console.error("下载失败!");
}
plus.nativeUI.closeWaiting();
}
);
dtask.start();
}
```
这段代码片段展示了如何利用 Plus API 来发起 HTTP 请求从而获得最新的 `.wgt` 文件,并且提供了基本的成功与否反馈机制[^3]。
#### 执行更新操作
假设上述步骤顺利完成并且已经得到了一个有效的本地副本,在确保其安全性和兼容性的前提条件下可以着手实施真正的覆盖写入动作。通常情况下,这涉及到卸载旧组件并将新组件放置到适当位置的过程。具体而言就是调用相应的方法来进行最终阶段的工作——将之前所提到过的已下载下来的`.wgt`文件应用于当前运行环境中:
```javascript
function installUpdate(filePath) {
plus.runtime.install(
filePath,
{},
function(){
alert("安装成功");
location.reload(); // 刷新页面使改动生效
},
function(e){
alert("安装失败:" + e.message);
}
)
}
```
以上便是关于怎样借助 WGT 技术达成 UniApp 的热更新功能的大致介绍[^1]。
uniapp 打包wgt
### 如何使用 UniApp 打包生成 WGT 文件
#### 配置 `manifest.json` 文件
在制作 WGT 包的过程中,需要确保 `manifest.json` 中的应用版本名称和应用版本号必须高于上一版的值[^2]。这是为了支持热更新机制,只有当新版本号大于旧版本号时,WGT 包才能被正确加载。
以下是 `manifest.json` 的基本结构以及需要注意的部分字段:
```json
{
"name": "应用名称",
"versionName": "1.0.1", // 应用版本名称,需递增
"versionCode": 2, // 应用版本号,需递增
"plus": {
"distribute": {
"wgt": true // 是否启用 WGT 包功能
}
}
}
```
#### 使用 uni-packing-wgt 插件进行多环境打包
如果希望实现多环境打包并同步到原生项目中调试,则可以借助 `uni-packing-wgt` 插件完成此操作[^1]。通过该插件,开发者能够更方便地管理不同环境下的资源文件,并将其自动部署至目标目录。
##### 配置参数说明
- **`sourceDir`**: 表示 UniApp 资源包的相对路径,默认为 `./dist/dev/app`。
- **`targetDir`**: 指定原生项目的绝对路径,通常放置于 Android 工程中的特定位置,例如 `替换成项目路径/app/src/main/assets/apps/替换成uniAppId/www`。
配置完成后,在执行构建命令前,应将 `isIncrementVersion` 设置为 `true`,以确保每次同步都会触发版本自增逻辑。
#### 构建与发布流程
1. 修改 `manifest.json` 文件中的版本信息,使其满足递增条件;
2. 安装并配置好 `uni-packing-wgt` 插件;
3. 运行打包脚本,生成适用于当前环境的 WGT 文件;
4. 将生成好的 WGT 文件上传至服务器端供客户端下载更新。
以下是一个简单的 npm 脚本定义方式作为参考:
```javascript
// package.json scripts 字段
"scripts": {
"build:wgt": "node ./node_modules/uni-packing-wgt/index.js"
},
```
运行上述脚本后会按照预设规则完成整个过程。
---
### 示例代码片段
假设我们有一个基础工程结构如下所示:
```bash
project-root/
├── dist/
│ └── dev/
│ └── app/
└── node_modules/
└── uni-packing-wgt/
```
那么可以通过调用插件来指定具体的目标地址:
```javascript
const packingConfig = {
sourceDir: './dist/dev/app',
targetDir: '/absolute/path/to/native/project/app/src/main/assets/apps/com.example.appid/www'
};
packingConfig.isIncrementVersion = true; // 启用版本自增
require('uni-packing-wgt')(packingConfig);
```
---
阅读全文
相关推荐













