当前位置: 代码网 > it编程>App开发>Android > uni-app Android离线打包的多环境配置方案

uni-app Android离线打包的多环境配置方案

2026年04月28日 Android 我要评论
很多 uni-app 项目在离线打包阶段都会遇到一个问题:线上包、测试包共用一套配置,导致包名冲突、应用名称不区分、推送参数混用,甚至 release 包还带着 debug 开关。这篇文章基于一个真实

很多 uni-app 项目在离线打包阶段都会遇到一个问题:
线上包、测试包共用一套配置,导致包名冲突、应用名称不区分、推送参数混用,甚至 release 包还带着 debug 开关。

这篇文章基于一个真实项目,整理一套可落地的 android 多环境配置方案,目标是:

  • prod 包名:com.example.app
  • dev 包名:com.example.app.dev
  • prod 应用名:示例应用
  • dev 应用名:示例应用开发版
  • prod/dev 使用不同 dcloud_appkey
  • release 自动关闭 dcloud_control.xml 里的 debug 配置

1. 在 app 模块启用 productflavors

文件:simpledemo/build.gradle

android {
    defaultconfig {
        applicationid "com.example.app"
        manifestplaceholders = [
                "getui_appid"           : "your_getui_appid",
                "plus.unipush.appid"    : "your_unipush_appid",
                "plus.unipush.appkey"   : "your_unipush_appkey",
                "plus.unipush.appsecret": "your_unipush_appsecret",
                "apk.applicationid"     : "${applicationid}"
        ]
    }
    flavordimensions "env"
    productflavors {
        prod {
            dimension "env"
            manifestplaceholders["dcloud_appkey"] = "your_prod_dcloud_appkey"
        }
        dev {
            dimension "env"
            applicationidsuffix ".dev"
            manifestplaceholders["dcloud_appkey"] = "your_dev_dcloud_appkey"
        }
    }
}

说明:

  • applicationidsuffix ".dev" 会让 dev 最终包名变成 com.example.app.dev
  • apk.applicationid 写成 ${applicationid},避免 dev 包里仍然写死 prod 包名
  • dcloud_appkey 用 flavor 维度区分,避免测试和线上串环境

2. manifest 中使用占位符注入 dcloud_appkey

文件:simpledemo/src/main/androidmanifest.xml

<meta-data
    android:name="dcloud_appkey"
    android:value="${dcloud_appkey}" />

说明:
不要把 dcloud_appkey 写死在 main,否则 prod/dev 无法自动切换。

3. 应用名称按环境覆盖

main 保持正式名称:

文件:simpledemo/src/main/res/values/strings.xml

<resources>
    <string name="app_name">示例应用</string>
</resources>

dev 增加同名资源覆盖:

文件:simpledemo/src/dev/res/values/strings.xml

<resources>
    <string name="app_name">示例应用开发版</string>
</resources>

说明:
android 资源会按构建变体自动覆盖,dev 下同名 app_name 会覆盖 main

4. release 自动关闭 dcloud 调试开关

如果 dcloud_control.xml 放在 src/main 且写着 debug="true",release 也会继承这个配置。
正确做法是按 buildtype 拆分。

调试包配置:

文件:simpledemo/src/debug/assets/data/dcloud_control.xml

<hbuilder debug="true" syncdebug="true">
<apps>
    <app appid="__uni__xxxxxxx" appver=""/>
</apps>
</hbuilder>

发布包配置:

文件:simpledemo/src/release/assets/data/dcloud_control.xml

<hbuilder debug="false" syncdebug="false">
<apps>
    <app appid="__uni__xxxxxxx" appver=""/>
</apps>
</hbuilder>

并删除:

  • simpledemo/src/main/assets/data/dcloud_control.xml

5. 让输出 apk 名称带上 flavor

配置后会出现 proddebug/devrelease 等多个变体,如果输出文件名只叫 android_release.apk,产物会互相覆盖。

建议在 androidcomponents 中带上 flavor:

androidcomponents {
    onvariants(selector().all()) { variant ->
        variant.outputs.foreach { output ->
            def bt = variant.buildtype
            def flavor = variant.flavorname
            def flavorpart = (flavor != null && !flavor.isempty()) ? "${flavor}_" : ""
            output.outputfilename.set("android_${flavorpart}${bt}.apk")
        }
    }
}

6. 打包

如果你使用 android studio 的 build variants 面板,正常会看到:

  • proddebug / prodrelease
  • devdebug / devrelease

如果只看到 debug/release,通常是 gradle sync 失败或未同步成功。

总结

uni-app android 离线打包做多环境,核心是三件事:

  • productflavors 区分环境(包名、key 等)
  • src/dev / src/release 做资源和资产覆盖(应用名、dcloud 控制文件)
  • 用规范的变体命名和产物命名,避免人工误操作

这样一来,开发、测试、线上包能稳定并行,发版也会更可控。

到此这篇关于 uni-app android离线打包的多环境配置方案的文章就介绍到这了,更多相关 uni-app android离线打包配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com