快应用打包rpk同时生成了rpk和rpks是为什么?怎么用?-优雅草卓伊凡
引言
今天卓伊凡很神奇打包快应用,因为版权刚办理完成提交,发现生成了rpks和rpk
这是一个非常重要且常见的问题。当你修改配置后,打包工具同时生成 .rpk
和 .rpks
两种文件,这反映了快应用联盟近年来的一次重大技术演进。
下面我将详细阐述其原理、内容以及区别。
上一篇因为报错我们把支持版本改成了1061
核心结论
.rpk
: 是传统单包的快应用文件。它将所有页面、组件、资源都打包在一个文件中。.rpks
: 是分包(或称为Split Package)的快应用文件。它是一个压缩包,里面包含了一个主包(main.rpk
)和若干个可独立下载的分包(subpackageX.rpk
)。
生成两种包是为了兼容性。打包工具会同时生成两种格式,以确保应用能安装在不同版本的快应用平台(引擎)上。
详细介绍与对比
1. .rpk
(单包)
- 原理:这是快应用最初的组织形式。类似于一个小的安卓APK文件,所有代码和资源都被打包在一起。当用户打开应用时,需要一次性下载整个RPK文件。
- 内容结构(压缩包内):
. ├── manifest.json # 应用配置文件,声明页面、权限、版本等 ├── app.js # 应用逻辑代码 ├── common/ # 公共资源(图片、样式等) ├── pages/ # 所有页面 │ ├── index/ │ └── detail/ └── ... (其他公共组件和逻辑)
- 优点:
- 结构简单,开发调试方便。
- 兼容所有版本的快应用平台。
- 缺点:
- 首屏加载慢:随着业务增长,包体积会变大,导致用户首次打开应用时需要下载的等待时间变长。
- 体积限制:快应用平台对单个RPK文件有严格的体积上限(通常为1MB或2MB),限制了应用的复杂度。
2. .rpks
(分包)
- 原理:为了解决单包体积限制和首屏加载问题,快应用联盟引入了分包机制。它借鉴了微信小程序等技术的思路,将应用划分为一个主包和多个分包。
- 主包:包含应用启动所需的首页、关键资源以及所有分包的公用的代码和资源。
- 分包:包含某些特定功能模块的代码和资源。用户只有在进入该模块时,才会去下载对应的分包。
- 内容结构(
.rpks
文件本身是一个ZIP包,解压后):
. ├── manifest.json # 总的配置文件,其中定义了分包信息 ├── main.rpk # 主包文件(它本身也是一个RPK格式的压缩包) └── subpackages/ # 分包目录 ├── sub1.rpk # 分包1 └── sub2.rpk # 分包2
- 工作流程:
- 用户点击快应用图标。
- 平台先下载并加载
main.rpk
(主包),立刻显示首页。 - 当用户操作需要跳转到某个分包内的页面时(例如“个人中心”),平台才开始异步下载对应的
sub1.rpk
。 - 下载完成后,跳转到目标页面。
- 优点:
- 优化首屏加载:主包体积小,下载快,用户体验更好。
- 突破体积限制:整个应用的总大小可以远远超过1MB的限制(例如10MB+)。
- 按需加载:用户可能永远用不到某些功能,则无需下载对应的分包,节省流量。
- 前提条件:这正是你之前遇到的错误——必须将
app.json
/manifest.json
中的minPlatformVersion
(最低平台版本号)设置为 1061 或以上,因为分包功能是在平台版本1061之后才支持的。
为什么你的项目会同时生成两种包?
这是由 uniapp打包工具的默认策略 决定的,目的是最大化兼容性。
- 兼容旧平台:如果你的应用被安装在一个平台版本号 低于1061 的设备上,该设备无法识别分包。此时,平台会尝试寻找并安装同名的
.rpk
文件(单包)。 - 发挥新平台优势:如果你的应用被安装在一个平台版本号 高于或等于1061 的设备上,平台会优先识别并安装
.rpks
文件,从而享受分包带来的性能优势。
简单来说,打包工具为你做了两手准备:
.rpk
是给 老版本 手机用的。.rpks
是给 新版本 手机用的。
如何选择和使用?
- 测试阶段:你可以将
.rpk
文件上传到快应用官方调试器进行基础功能测试。但要完整测试分包功能,必须使用.rpks
文件,并确保调试器的基础库版本足够高。 - 发布阶段:当你将应用上传到各大厂商的快应用平台时,平台会自动根据用户手机的平台版本,智能地分发
.rpk
(给老手机)或.rpks
(给新手机)。你一般不需要手动选择。
总结
特性 |
(单包) |
(分包) |
本质 |
单个应用包 |
一个包含主包和多个分包的压缩包 |
兼容性 |
所有平台版本 |
平台版本 >= 1061 |
体积限制 |
严格(通常1MB) |
大大放宽(通常10MB+) |
加载方式 |
一次性加载全部 |
先加载主包,按需加载分包 |
首屏速度 |
慢(包大时明显) |
快(主包小巧) |
生成原因 |
为了兼容老版本平台 |
为了在新版本平台上获得更好性能 |
因此,同时生成两种包是正常且有益的行为,确保了你的应用能在尽可能多的设备上正常运行。
本次我们上传项目还是上传的rpk