uni-app Android離線打包的多環(huán)境配置方案
很多 uni-app 項目在離線打包階段都會遇到一個問題:
線上包、測試包共用一套配置,導(dǎo)致包名沖突、應(yīng)用名稱不區(qū)分、推送參數(shù)混用,甚至 release 包還帶著 debug 開關(guān)。
這篇文章基于一個真實項目,整理一套可落地的 Android 多環(huán)境配置方案,目標(biāo)是:
prod包名:com.example.appdev包名:com.example.app.devprod應(yīng)用名:示例應(yīng)用dev應(yīng)用名:示例應(yīng)用開發(fā)版prod/dev使用不同dcloud_appkeyrelease自動關(guān)閉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 維度區(qū)分,避免測試和線上串環(huán)境
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. 應(yīng)用名稱按環(huán)境覆蓋
main 保持正式名稱:

文件:simpleDemo/src/main/res/values/strings.xml
<resources>
<string name="app_name">示例應(yīng)用</string>
</resources>dev 增加同名資源覆蓋:
文件:simpleDemo/src/dev/res/values/strings.xml
<resources>
<string name="app_name">示例應(yīng)用開發(fā)版</string>
</resources>說明:
Android 資源會按構(gòu)建變體自動覆蓋,dev 下同名 app_name 會覆蓋 main。
4. release 自動關(guān)閉 dcloud 調(diào)試開關(guān)
如果 dcloud_control.xml 放在 src/main 且寫著 debug="true",release 也會繼承這個配置。
正確做法是按 buildType 拆分。
調(diào)試包配置:

文件:simpleDemo/src/debug/assets/data/dcloud_control.xml
<hbuilder debug="true" syncDebug="true">
<apps>
<app appid="__UNI__XXXXXXX" appver=""/>
</apps>
</hbuilder>發(fā)布包配置:
文件: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
配置后會出現(xiàn) prodDebug/devRelease 等多個變體,如果輸出文件名只叫 android_release.apk,產(chǎn)物會互相覆蓋。
建議在 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/prodReleasedevDebug/devRelease
如果只看到 debug/release,通常是 Gradle Sync 失敗或未同步成功。
總結(jié)
uni-app Android 離線打包做多環(huán)境,核心是三件事:
- 用
productFlavors區(qū)分環(huán)境(包名、key 等) - 用
src/dev/src/release做資源和資產(chǎn)覆蓋(應(yīng)用名、dcloud 控制文件) - 用規(guī)范的變體命名和產(chǎn)物命名,避免人工誤操作
這樣一來,開發(fā)、測試、線上包能穩(wěn)定并行,發(fā)版也會更可控。
到此這篇關(guān)于 uni-app Android離線打包的多環(huán)境配置方案的文章就介紹到這了,更多相關(guān) uni-app Android離線打包配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android中new Notification創(chuàng)建實例的最佳方法
這篇文章主要介紹了Android中new Notification創(chuàng)建實例的最佳方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08
Android RecyclerView緩存復(fù)用原理解析
RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實現(xiàn)數(shù)據(jù)縱向滾動,也可以實現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法2022-11-11
Android實現(xiàn)標(biāo)題上顯示隱藏進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)標(biāo)題上顯示隱藏進(jìn)度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android實現(xiàn)收到新短信后自動發(fā)郵件功能
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)收到新短信后自動發(fā)郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
android 調(diào)用系統(tǒng)的照相機和圖庫實例詳解
android手機有自帶的照相機和圖庫,我們做的項目中有時用到上傳圖片到服務(wù)器,今天做了一個項目用到這個功能,所以把我的代碼記錄下來和大家分享,有需求的朋友可以參考下2012-12-12
基于Android實現(xiàn)系統(tǒng)重啟reboot功能
在某些特殊場景下(如設(shè)備管理、安全監(jiān)控、工控系統(tǒng)等),開發(fā)者可能需要實現(xiàn)系統(tǒng)重啟功能,本文給大家介紹了如何基于Android實現(xiàn)系統(tǒng)重啟reboot功能,需要的朋友可以參考下2025-04-04

