更新记录

1.3.8(2026-10-28)

修复

  • 应用名(桌面显示名)不再被 SDK AAR 劫持:离线 SDK 的 SDK/libs 里多个 AAR(breakpad-build-release.aar 以及 GDT/快手/章鱼等广告 SDK)把各自示例工程的 app_name 打进了 res/values(如 breakpad-build),而蒸汽模板的 strings.xml 是空的 <resources/>。此前普通 uni-app 通道的 strings.xml 处理只在文件存在且已有 app_name 时替换,缺了就静默跳过,导致资源合并后桌面应用名显示成 AAR 里的名字。现在两个通道都保证工程 strings.xml 始终写入 app_name(缺失时补建/补写,条目带属性也识别),并在打包日志中输出实际写入的应用名

1.3.7(2026-10-25)

修复

  • uni-app x:Gradle 编译失败不再只把整段原始输出刷一次。编译期间实时输出 Kotlin 的 e: 错误行;失败后按 .kt 文件聚合错误条数、列出前 12 条错误与 FAILURE: 段的任务原因,并把完整输出写入构建根目录的 gradle-debug.log / gradle-release.log,同时提示保留的 Kotlin 与构建工程路径。Gradle 调用复用普通 uni-app 通道的 runner(transform 缓存自愈);检测到 Kotlin 编译错误时不再补跑 --stacktrace,避免白等一轮全量编译

1.3.6(2026-10-11)

新增

  • uni-app x:识别 manifest.json 的 app-android.distribute.disableLegacyPackaging(DCloud 文档默认 false),按其值决定 .so 是否压缩存放。此前插件不读这个键,工程副本沿用 AGP 默认(extractNativeLibs=false,.so 原样 Stored),而官方云打包默认压缩,导致同样的包插件产物大出一截——只留 arm64-v8a 时实测多出 5.3 MB(23.0 MB → 17.7 MB)。注入时对工程里已有的 useLegacyPackaging 做归一化而非追加块,避免蒸汽模板 xvnativeproject 里写死的 useLegacyPackaging false 后写覆盖;若用户在 packagingOptions 里自己写了 useLegacyPackaging 则以用户的为准。

1.3.5(2026-10-10)

新增

  • uni-app x:支持启动图(DCloud 的 splashScreens 配置只对云打包生效,本地打包此前只会打日志、从不落地,导致启动界面永远是纯色)。现在 splashScreens.default 按密度写入 app/src/main/res/drawable-*/splash.png(支持 .9.png)并作为启动主题的 android:windowBackground;splashScreens.icon、splashScreens.brand 分别写入 splash_icon、splash_brand 并接 Android 12+ 的 windowSplashScreenAnimatedIcon、windowSplashScreenBrandingImage;蒸汽模式改为使用生成的 Theme.Uniappxv.Splash(此前 Activity 挂的是裸 Theme.AppCompat.DayNight.NoActionBar,连配置的背景色都不生效),仅在 manifest 配置了启动图/背景色时才切换该主题

修复

  • 项目表单改为 WebView 自定义弹窗:「项目目录」「证书文件」行尾直接带「选择目录」「浏览」按钮,点击即弹原生选择框,选完当场读取 manifest.json 并回填应用名称/AppID(无需关表单重开);目录下无 manifest.json(或解析失败)表单内红字提示「目录选择错误」,保存时同样强制校验;粘贴目录路径失焦也会静默自动带出。WebView 不可用时自动回退原生表单(勾选行/底部按钮触发选目录带值重开)
  • uni-app x:修复 manifest.json 未配置 minSdkVersion 时把原生模板的 minSdk 24 降级成 21,导致清单合并报 uses-sdk:minSdkVersion 21 cannot be smaller than version 23 declared in library [debug-server-release.aar](蒸汽模式 debug/release 两个通道都会失败)。现以模板声明值为下限,manifest.json 的值只能上调、不能下调;低于模板下限时输出面板给出提示日志

1.3.4(2026-10-07)

变更

  • 插件更名为「Android离线打包工具」:插件显示名、工具 菜单标题、打包对话框标题、输出面板横幅与 readme 同步更新。插件 id 与配置目录 ~/.smart-pack-debug 均未变动,升级后项目配置、SDK 记忆和证书设置照常生效,无需迁移

1.3.3(2026-10-06)

新增

  • 模式匹配守卫:标准通道复用旧资源打包时,先扫描生成 Kotlin 与 UTS 插件源码中的蒸汽编译特征(io.dcloud.uniappxv / UTSAutoRegister / UTSBridge),命中即拦截并提示「勾选打包前先生成资源」或「切换蒸汽 SDK」,不再白跑一次 Gradle 全量编译后才报 Unresolved reference 'uniappxv'

1.3.2(2026-10-06)

新增

  • 全局设置保存预检:各 SDK 路径填了就先校验类型特征,不再等打包时报错——「标准 SDK 根目录」不含 uniappxnativepackage 时当场拦截并识别出实际填的是普通 uni-app SDK 还是蒸汽 SDK;「蒸汽 SDK 根目录」校验 xvnativeproject;高级区「SDK 工程目录」兼容 SDK 根目录或 HBuilder-Integrate-AS 两种填法;Android SDK 校验 platform-tools;JDK 校验 bin 目录;完整库目录校验存在性。所有字段留空一律放行(打包时仍有同级自动探测兜底)

1.3.1(2026-10-06)

修复

  • 蒸汽项目被打包前预检误判为标准模式:预检把 readManifest 摘要(不含 uni-app-x 键)传给了蒸汽判定,导致蒸汽项目报「未找到标准 uni-app x 离线 SDK」。解析器改为省略 manifest 时自行读取原始文件

新增

  • 普通 uni-app(非 x)项目同样接入打包对话框「SDK 包」下拉:候选 = 已配置路径同级目录下含 HBuilder-Integrate-AS 的 SDK 包,选择记忆到项目 sdkRootDir,多项目不再来回改全局高级区
  • SDK 工程目录取值容错:填成 SDK 根目录或 HBuilder-Integrate-AS 均可识别;完整库目录自动从根目录派生 SDK/libs
  • SDK 模块名按 项目 → 全局 → simpleDemo 顺序取第一个真实存在的目录,全局值失效(如指向蒸汽模板的残留)不再导致打包中途失败
  • 普通 uni-app 通道新增早失败守卫:SDK 工程目录/模块目录无效时立即报明确错误并指引修改入口,不再走到中途才失败

1.3.0(2026-10-06)

新增

  • 打包对话框新增「SDK 包」下拉框(仅 uni-app x 项目):蒸汽项目自动选含 xvnativeproject 的 SDK,普通 uni-app x 项目自动选含 uniappxnativepackage 的 SDK;候选包含全局配置的两个根目录及其同级目录自动扫描结果,新版本 SDK 解压到同级目录即自动入列
  • 下拉选择会记忆到项目配置(sdkRootDir),下次打包直接沿用;保持默认选择时不写配置
  • 项目 appId/appName 加载时自动清理首尾空白,修复历史配置中换行符污染构建目录名与 AndroidManifest 的问题

优化

  • 全局设置重排为「通用路径 / uni-app x SDK 包 / 构建选项 / 高级:普通 uni-app 通道」四区,机器级配置一次填完长期使用;普通 uni-app 独占的 SDK 工程目录、完整库目录、模块名收进底部高级区
  • uni-app x 通道不再读取「SDK 工程目录」「SDK 完整库目录」:gradle-wrapper.jar 改从解析出的 SDK 根目录同级扫描(旧字段仅作兜底),对话框版本号改从 SDK 根目录名解析,多项目切换不再需要来回改全局设置
  • 移除全局设置对「SDK 工程目录」的必填校验,改为打包时按项目通道分别校验;标准 uni-app x SDK 缺失(如根目录误指向普通 uni-app SDK)时给出含同级目录指引的明确报错

1.2.1(2026-10-06)

修复

  • 权限审计误报「建议移除」:UTS 插件在 utssdk 源码里用字符串字面量申请权限(如 permissions.push("android.permission.BLUETOOTH_CONNECT"))此前完全不被识别,蓝牙等权限会被判为冗余。新增两类证据来源:源码中的 android.permission.X / Manifest.permission.X 字面量,以及 android.* 原生包名推断
  • 插件引用检测漏扫业务代码:原先只扫固定的 pages / common / store / components 等根目录,unibest 这类把业务代码放在 src/ 下的项目一个文件都扫不到,插件被误判为「未引用」。改为整项目遍历后按排除集过滤,并同时识别 src/pages.json
  • 已安装但未被引用的插件,其 AndroidManifest.xml 与源码声明的权限也计入「需要」,避免只删 manifest.json 声明就让插件功能失效

新增

  • 报告单独列出「仅插件申请、业务代码与模块表未命中」的权限,说明其不参与精简建议

1.2.0(2026-10-06)

新增

  • 「Android权限审计」命令:入口在 工具菜单 与 项目右键(选中 manifest.json / package.json)。扫描业务源码 API 调用、manifest 模块、uni_modules 插件,输出冗余与缺失权限,支持勾选后写回 manifest.json
  • 审计基准为打包后实际拥有的权限:manifest.json 声明 ∪ 离线打包注入 ∪ 工程 AndroidManifest.xml ∪ 插件声明 − excludePermissions。只比 manifest.json 会把 SDK aar 自带和打包注入的权限误报为"缺失"
  • 同时支持 uni-app 与 uni-app x:uni-app x 读 app-android.distribute(权限字段比 uni-app 少一层 android),源码扫描覆盖 .uvue / .uts,插件引用探测覆盖 App.uvue / main.uts

优化

  • 模块→权限映射收敛为唯一数据源 src/perm/modulePermissions.js,原先分散在 packer.js、uniAppXPacker.js 与权限审计插件中的多份副本全部删除
  • 每个模块区分「打包注入集」与「审计需要集」,并维持"需要集 ⊇ 注入集"不变式(加载时校验),避免审计建议删除的权限被下次打包重新注入
  • uses-permission 与 uses-feature 分开解析,此前硬件特性会被当作权限参与精简
  • JSON 注释剥离统一到 src/jsonc.js

说明

  • 迁移经过逐行比对验证:46 个模块 key、全量合并集、5 个真实项目(含 2 个 uni-app x)的权限注入与硬件特性输出与迁移前完全一致,打包产物不变

1.1.0(2026-10-02)

新增

  • 新增「App本地打包(正式包)」命令:走官方离线 SDK 工程编译 Release APK,普通 uni-app 与 uni-app x(含蒸汽模式)两条通道均支持
  • 正式包可选复制到项目 unpackage/release/apk/,与 HBuilderX 云打包产物位置一致
  • 正式包复用项目配置中的包名、AppKey、签名证书,无需重复填写;统一不启用代码混淆(R8/minify)
  • 打包表单按模式区分选项:正式包默认勾选「打包前先生成资源」,隐藏「替换项目自定义基座」

修复

  • 修复 uni-app x 通道签名未生效:蒸汽模板 xvnativeproject/app/build.gradle 没有 buildTypes/signingConfigs 块,原先按已有块做替换会静默失效,导致自定义基座实际使用 Android 默认 debug 证书签名。升级后基座签名会变化,需先卸载手机上的旧基座
  • 正式包若产出 *-unsigned.apk 不再被当作成功,直接报错提示检查证书配置
  • 修复 uni-app x 模块层 AndroidManifest 在蒸汽模式下误用非蒸汽运行时包名(io.dcloud.uniapp → io.dcloud.uniappxv)与主题的问题

2.2.3(2026-09-09)

优化

  • 完善自定义基座(Debug)打包入口和配置
  • 新增 Java 17 运行时自动选择,优先使用 HBuilderX 内置 Java 17,并在打包日志显示实际 JDK
  • 普通 uni-app 与 uni-app x 打包流程统一使用同一套 Java 环境选择逻辑
  • 增强 Debug 打包核心流程的模式稳定性