Flutter移動端進行多渠道打包發(fā)布的全過程
前言
隨著項目的運營推廣,總少不了各種客戶定制化的需求,當(dāng)前大部分軟件其實都離不開Saas的玩法;定制化需求雖然利潤高(特別是海外客戶),但對于開發(fā)人員來說卻比較難搞,同一套代碼需要支持不同的需求。
一般我們處理這種需求的時候會引入渠道包的概念,每個客戶擁有獨立渠道,通過渠道指定不同的資源、賦予不同的功能,從而編譯出定制化的版本。本篇文章將分享Flutter中如何進行移動端(iOS、Android)的渠道編譯,替換應(yīng)用圖標(biāo)、名稱、appkey等。
Android端
1、配置build.grade
Android端的打包配置,主要是通過build.grade文件進行配置,在android目錄下加入flavorDimensions,然后配置不同的風(fēng)味維度;
android { // ...... flavorDimensions 'channel' productFlavors { develop { applicationId "${defaultConfig.applicationId}" } customer { applicationId "${defaultConfig.applicationId}" // 可替換成客戶的AppID } productFlavors.all { // 遍歷productFlavors多渠道,設(shè)置渠道名稱,在flutter層也能取到 flavor -> flavor.manifestPlaceholders.put("CHANNEL", name) } } }
之后我們?yōu)槊總€渠道設(shè)置資源的名稱,每個渠道有不同的資源,避免不相關(guān)的資源打包進去,增加包大小。
productFlavors { // 省略,見上 } // 為不同渠道指定不同資源文件配置 sourceSets { main.java.srcDirs += 'src/main/kotlin' // develop無指定就默認(rèn)使用src/main/res squatz.res.srcDirs 'src/main/res-customer' }
2、配置mainfest
Mainfest在<application>下擴展一個元數(shù)據(jù),字段名取build.grade中的風(fēng)味秒速channel,字段值則是put出去的CHANNEL。其他的都不需要改變,因為mainfest所引用到的資源名稱我們都沒有改變。
<application> <!-- 多渠道打包 --> <meta-data android:name="channel" android:value="${CHANNEL}" /> </application>
3、新增對應(yīng)資源
由于Mainfest的變量名沒有變過,因此新增資源的名稱就需要跟res中的保持一致。
4、打包編譯
flutter build apk --flavor Customer --obfuscate --split-per-abi
打包命令非常簡單,指定flavor為build.grade中配置的渠道名稱即可,注意首字母大寫!
iOS端
筆者并無iOS的實際開發(fā)經(jīng)驗,對iOS并不熟悉;但網(wǎng)上對這塊的記錄真的是少之又少,所以還是決定記錄下來,接下來的內(nèi)容雖成功實踐過,但未必是最佳方法,歡迎大家一起交流。
1、分發(fā)Target
Target其實是貫穿iOS整個開發(fā)過程的,無論是運行目標(biāo)還是UI控制器,都離不開target;Target是工程編譯的目標(biāo),其會繼承Project的編譯設(shè)置,并可重新設(shè)置自己的編譯配置,比如Build Setting
與Build Phases
。
- 新建Target,直接在原target右鍵分發(fā)一個出來,默認(rèn)會復(fù)制原target的所有配置。
- 修改應(yīng)用信息,注意圖標(biāo)、應(yīng)用名稱等資源另起一個文件夾去配置。
- 打包
自此iOS就有了多個打包目標(biāo),非常簡單。這也是iOS體系開發(fā)比較好的一點,沒有太多花里胡哨的玩法,跟著文檔配置就好了。
flutter打包命令:flutter build ipa --flavor Customer --release
- 遇到問題
目前我們遇到如下問題,配置好后在flutter層執(zhí)行flutter build ios --flavor Customer --release后,會導(dǎo)致xcode重新build項目,然后pod_Runner的動態(tài)依賴丟失,但是在xcode中執(zhí)行又不會。
Flutter端區(qū)分渠道
在打包的時候我們可以使用參數(shù)-dart-define=CHANNEL=XXXX
,其中CHANNEL是參數(shù)key,xxxx是name,然后在flutter中使用String.fromEnvironment('CHANNEL', defaultValue: 'develop');
,即可獲取到key為CHANNEL的值。
總結(jié)
到此這篇關(guān)于Flutter移動端進行多渠道打包發(fā)布的文章就介紹到這了,更多相關(guān)Flutter多渠道打包發(fā)布內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android編程實現(xiàn)對電池狀態(tài)的監(jiān)視功能示例
這篇文章主要介紹了Android編程實現(xiàn)對電池狀態(tài)的監(jiān)視功能,涉及Android基于廣播實現(xiàn)針對電源電量的判定與監(jiān)視技巧,需要的朋友可以參考下2016-11-11探究Android客戶端網(wǎng)絡(luò)預(yù)連接優(yōu)化機制
一般情況下,我們都是用一些封裝好的網(wǎng)絡(luò)框架去請求網(wǎng)絡(luò),對底層實現(xiàn)不甚關(guān)注,而大部分情況下也不需要特別關(guān)注處理。了解底層的一些實現(xiàn),有益于我們對網(wǎng)絡(luò)加載進行優(yōu)化。本文就是關(guān)于根據(jù)http的連接復(fù)用機制來優(yōu)化網(wǎng)絡(luò)加載速度的原理與細節(jié)2021-06-06Android實現(xiàn)自定義ImageView的圓角矩形圖片效果
android顯示圓角矩形的圖片其原理就是首先獲取到圖片的Bitmap,然后進行裁剪對應(yīng)的圓角矩形的bitmap,然后在onDraw()進行繪制圓角矩形圖片輸出2018-05-05Android編程中Intent實現(xiàn)頁面跳轉(zhuǎn)功能詳解
這篇文章主要介紹了Android編程中Intent實現(xiàn)頁面跳轉(zhuǎn)功能,結(jié)合實例形式分析了Android Intent實現(xiàn)頁面跳轉(zhuǎn)功能的具體步驟與相關(guān)注意事項,需要的朋友可以參考下2017-07-07Android將Xamarin For VS升級為4.1.0.530版教程
這篇文章主要介紹了Android將Xamarin For VS升級為4.1.0.530版的圖文教程,感興趣的小伙伴們可以參考一下2016-06-06