Android多渠道打包配置方案
背景
多渠道打包,顧名思義就是用來區(qū)分同一個軟件,在不同渠道上的釋放版本。
這個手機上大型app幾乎是必配置的一個項,給不同型號的手機所用的apk會做一些細微的區(qū)別。像筆者使用酷安社區(qū)比較多,在官網(wǎng)下載的酷安apk界面頂部有軟件管理功能,在其他手機廠的應用商店里下載的酷安就沒有這個功能。
目前我們有需求是要一套軟件代碼庫多個項目共同使用,針對不同的項目打包不同的渠道apk,現(xiàn)學記錄一下。
Gradle腳本和Manifest文件配置
不同渠道的apk既然要做細微的功能上的區(qū)分,就需要在代碼里能拿到一個類似鍵值對的標志位。并且能夠全局調(diào)用。首先我們需要在app級的gradle文件里配置不同的channel名稱。
其中flavorDimensions和productFlavors中的維度名稱需要一一對應。隨便寫一個"default"即可。
defaultConfig { xxxx = xxxx flavorDimensions.add("default") }
gradle.kts語法與Groovy略有不同,要添加自己配置的東西一般是使用create,register之類的關鍵字,不熟悉配置的可以先試試。
不同渠道包的域里,我們可以區(qū)分很多參數(shù)值,像這里我是配置了不同渠道使用不同平臺的簽名。
productFlavors { create("cheetah") { dimension = "default" signingConfig = signingConfigs.getByName("cheetah") manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel" } create("redfin") { dimension = "default" signingConfig = signingConfigs.getByName("aaos") manifestPlaceholders["CHANNEL_VALUE"] = "redfin_channel" } }
為了可以設置成自己想要的鍵值對,建議在Manifest清單文件里設置一組元數(shù)據(jù),在打包時讓Gradle去賦值它。結(jié)合上下兩段代碼,我們在Manifest里的一組元數(shù)據(jù),key設為CHANNEL,value為引用型的變量CHANNEL_VALUE,在Gradle渠道配置里,我們使用:
manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel"
來為其賦值。
<meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}" />
打包時,可以通過判斷flavor的名稱,來輸出不同的apk名字。
android.applicationVariants.configureEach { outputs.all { if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) { if (flavorName == "redfin") { this.outputFileName = "RedfinChannel_V${versionName}.apk" } else if (flavorName == "cheetah") { this.outputFileName = "CheetahChannel_V${versionName}.apk" } } } }
代碼調(diào)用
全局性的打包配置完畢后,我們?nèi)绾卧诖a里去使用區(qū)分不同渠道呢。
這里也有兩種方法來獲取,一種是直接拿取Gradle腳本里創(chuàng)建時的渠道名,直接通過BuildConfig類的FLAVOR字段來獲??;一種是拿取我們在Manifest里設置的元數(shù)據(jù)的value值,操作稍復雜一些。具體代碼如下:
object FlavorConfig { const val REDFIN = "redfin" const val CHEETAH = "cheetah" private var manifestMetaData = "" private var gradleData = "" init { val appInfo = appContext.packageManager.getApplicationInfo( appContext.packageName, PackageManager.GET_META_DATA ) manifestMetaData = appInfo.metaData.getString("CHANNEL") as String gradleData = BuildConfig.FLAVOR } fun getMetaDataOne() = manifestMetaData.apply { infoLog("metaData value: $this") } fun getMeatDataTwo() = gradleData.apply { infoLog("gradle metaData value: $this") } }
到此這篇關于Android多渠道打包配置方案的文章就介紹到這了,更多相關Android打包配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android動態(tài)人臉檢測的示例代碼(臉數(shù)可調(diào))
本篇文章主要介紹了Android動態(tài)人臉檢測的示例代碼(臉數(shù)可調(diào)),具有一定的參考價值,有興趣的可以了解一下2017-08-08Win10下android studio開發(fā)環(huán)境配置圖文教程
這篇文章主要為大家詳細介紹了Win10下android studio開發(fā)環(huán)境配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07