小小的小明
小小的小明
  • 发布:2026-09-22 09:47
  • 更新:2026-09-22 10:02
  • 阅读:26

【uniappx】安卓打包是否编译为 kt语法

分类:uni-app x

今天尝试打包看了下发现几个问题:1. uniappx 的构建的APK包是之前的好几倍(多出了90-100MB的体积);2. 打包后解压发现代码不会被解析成 kt语法,目录结构跟 vue2的结构是一样的还是说我找的目录不对;3. 如果只是沿用的 vue2的打包模式做了下优化,那热更新是不是也可以参照之前的模式;
这个是今天打出来的包和包解压出来的文件路径展示;

2026-09-22 09:47 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

先给结论:uni-app x 的安卓包确实会编译为 kt(kotlin),但不是把 apk 解压后还能直接看到 kt 源码。你现在看到的目录结构像 vue2/uni-app 运行时目录,通常是因为找的位置不对,或者你把“资源目录”和“代码编译产物”混在一起看了。

1)为什么 apk 比之前大很多(多 90~100MB)

最常见原因有两类:

情况 A:你用了蒸汽模式(vapor),体积会比 VDOM 大

官方 issue 里有明确结论:

  • 5.15 安卓还不支持蒸汽模式
  • 5.24 开始 android 支持蒸汽模式
  • 蒸汽模式比 VDOM 多了一个 v8,所以包体积会更大

这是 issue 系统里的官方回复,参考:
uniappx 5.15 升级到 5.23/5.24 打包体积从 14MB 到 30MB

情况 B:你打包时 cpu 架构选了多个

知识库里也明确说过:

  • 安卓 cpu 类型选多个,会导致 apk 体积变大

所以如果你勾了 arm64、armeabi-v7a、x86_64 之类的多架构,体积会明显增加,甚至接近翻倍。


2)为什么解压 apk 后没看到 kt,目录结构还像 vue2

这个现象不代表没编译成 kt

原因是:

  • uts 在 android 上会先编译为 kotlin 源码
  • 但最终打进 apk 时,kt 会再编译成 class/dex
  • 所以你直接解压 apk,通常看不到 kt 源文件
  • 你看到的 assets / hybrid / static / uni_modules 这类目录,是代码包资源目录,不是最终代码形态

官方文档对这块有明确说明:

  • uni-app x 应用安装后,代码包文件有 4 个目录:assetshybridstaticuni_modules
  • 这些是代码包文件目录,不是 kt 源码目录
    参考:
    uni-app x 文件系统-代码包文件

正确的查看方式

如果你想验证“是不是编译成 kt”,不要只看 apk 解压目录,应该看:

  1. 项目编译后的 unpackage 目录
  2. 官方文档明确说:
    • 编译 uni-app x 项目时,在 unpackage 目录下可以看到编译后生成的 kt 文件
    • 解压 apk 主要是看有没有 js 引擎、flutter 引擎、webview,而不是找 kt 源文件

官方说明参考:
uni-app x 是什么?/跨平台比较

所以你现在“没看到 kt”大概率是找错地方了


3)这是不是沿用 vue2 的打包模式做了优化?

不是。

uni-app x 不是简单沿用 vue2/uni-app 的打包壳。官方原理是:

  • uts 编译到 web 输出 js
  • 编译到 android 输出 kotlin
  • 编译到 ios 输出 swift
  • 编译到鸿蒙输出 ets

也就是说,uni-app x 的 android 端不是“vue2 那套运行时直接套壳优化”,而是uts + uvue 的原生编译链路

但你要注意一个关键点:

蒸汽模式和 VDOM 模式,产物形态会不一样

  • VDOM 模式
  • 蒸汽模式(vapor)

你现在如果用的是蒸汽模式,android 端仍然会有 js/ts 页面逻辑运行能力的支持,这和“android 编译为 kt”并不冲突。
因为:

  • uts 插件、原生能力部分会走原生编译
  • 蒸汽模式页面逻辑可以写 js/ts/uts
  • 但 apk 里最终看到的资源结构,和你在 web/uni-app 时代理解的目录结构并不是一回事

4)热更新还能不能按以前 uni-app 的模式理解?

不能简单照搬。

知识库里有两条很关键:

官方 FAQ 的结论

  • uni-app x 打包后目前不能热更新
  • 开发期间可以热刷
  • 蒸汽模式下的 3 端 app 会推出发布后热更新,请关注更新

参考:
uni-app x 是什么?FAQ

uts 插件的打包结论

  • uts 插件打包后编译为纯原生二进制代码
  • 不支持 wgt 热更新

参考:
UTS 插件介绍-打包

所以,不能把以前 uni-app 那套 wgt 热更新机制,直接套到 uni-app x 上。


5)你现在这个包,建议怎么排查

你可以按下面顺序确认:

第一步:确认是不是蒸汽模式

看你的 manifest.json 是否启用了 vapor。
如果启用了蒸汽模式,android 包体积变大是有官方依据的。

第二步:确认打包时 cpu 架构

如果你勾了多个 cpu 类型,先只保留常用架构试试,比如只看 arm64-v8a 的体积变化。

第三步:不要在 apk 解压目录里找 kt

改为看:

  • 项目的 unpackage 编译目录
  • 生成产物里是否存在 kotlin 中间产物
  • apk 内部是否有 dex/class,而不是找 .kt 文件

第四步:如果你关心热更新

按当前知识库结论:

  • 不要默认 uni-app x 支持发布后热更新
  • 如果你有热更新诉求,要持续关注官方后续能力,不要按旧 uni-app 的 wgt 方案直接迁移

6<|sep|>)我对你这三个问题的直接回答

1. 安卓包变大好几倍

很可能和以下因素有关:

  • 蒸汽模式引入额外运行时
  • cpu 架构多选
  • debug/release、资源、插件、so 库变化

2. 打包后解压没看到 kt

正常。
因为 kt 源码通常不会原样出现在 apk 里,最终是编译后的产物。你看到的目录是代码包资源目录,不是源码目录。

3. 热更新能不能沿用之前模式

不能。
当前知识库结论是:uni-app x 打包后目前不能热更新,且 uts 插件不支持 wgt 热更新

如果你愿意,我可以继续帮你判断你这个包体积暴涨到底是“蒸汽模式导致”还是“cpu 架构/资源/插件导致”。你把这 3 项发我:

  1. manifest.json 里是否开启 vapor
  2. 打包时勾选的 cpu 架构
  3. 是否新增 uts 插件或原生 sdk
内容为 AI 生成,仅供参考
小小的小明

小小的小明 (作者) - 美好的一天~

我也看了 unpackage 目录和编译后的uni_modules 发现只有这个目录的插件是会被打包成 .dex/.kt但是 pages 下的目录uts并没有生成对应的 .kt或.dex文件而是 vue模式 app-service.js

要回复问题请先登录注册