Android?通過productFlavors實現(xiàn)多渠道打包方法示例
正文
在日常開發(fā)中,可能會遇到同一份代碼,需要根據(jù)運營需求打出不同包名、不同圖標(biāo)、不同名稱的Apk,發(fā)布到不同的渠道中。Android Studio提供了便捷的多渠道打包實現(xiàn)方法productFlavors。
本文介紹一下使用productFlavors來實現(xiàn)多渠道打包。
創(chuàng)建productFlavors
- 添加Dimension
在app包下的build.gradle中的android閉包下,添加flavorDimension,代碼如下:
android {
...
// 方式1
getFlavorDimensionList().add('example_value')
// 方式2
flavorDimensions "example_value"
}
兩種方式選擇一種即可,方式1有代碼補全提示,方式2沒有。
- 創(chuàng)建productFlavor
在app包下的build.gradle中的android閉包下,創(chuàng)建productFlavors,代碼如下:
android {
...
productFlavors {
// 原始渠道
origin{
// 這里的值與前面flavorDimensions設(shè)置的值保持一致
dimension 'example_value'
}
// 示例渠道
exampleFlavor {
// 這里的值與前面flavorDimensions設(shè)置的值保持一致
dimension 'example_value'
}
}
}
網(wǎng)上找到的相關(guān)文章都說productFlavor中需要配置dimension,但是在嘗試的過程中發(fā)現(xiàn),如果只添加了一個flavorDimensions,那么productFlavor中的dimension可以不用特別聲明(我的gradle版本為7.6,AGP為7.4.1)。
構(gòu)建完后可以在Build Variants中看到已配置的變體,如圖:

渠道包參數(shù)配置
打渠道包時,根據(jù)需求可能會需要配置不同參數(shù),例如App的名稱、圖標(biāo)、版本信息,服務(wù)器地址等。
- 配置不同的簽名信息
如果需要使用不同的簽名文件,可以在app包下的build.gradle中的android閉包下配置signingConfigs,代碼如下:
android {
signingConfigs {
origin {
keyAlias 'expampledemo'
keyPassword '123456'
storeFile file('ExampleDemo')
storePassword '123456'
}
exampleFlavor {
keyAlias 'exampledemoflavor'
keyPassword '123456'
storeFile file('ExampleDemoFlavor.jks')
storePassword '123456'
}
}
flavorDimensions "example_value"
productFlavors {
origin{
signingConfig signingConfigs.origin
}
exampleFlavor {
signingConfig signingConfigs.exampleFlavor
}
}
}
需要注意的是signingConfigs必須在productFlavors前面聲明,否則構(gòu)建會失敗。
- 配置包名、版本號
在productFlavors中可以配置渠道包的包名、版本信息,代碼如下:
android {
...
defaultConfig {
applicationId "com.chenyihong.exampledemo"
versionCode 1
versionName "1.0"
...
}
productFlavors {
origin{
...
}
exampleFlavor {
applicationId "com.chenyihong.exampledflavordemo"
versionCode 2
versionName "1.0.2-flavor"
}
}
}
origin渠道表示的是原始包,不進行額外配置,使用的就是defaultConfig中聲明的包名以及版本號。
效果如圖:
origin

exampleFlavor

- 配置BuildConfig,字符串資源
在productFlavors中配置BuildConfig或者resValue,可以讓同名字段,在打不同的渠道包時有不同的值,代碼如下:
android {
...
productFlavors {
origin{
buildConfigField("String", "example_value", "\"origin server address\"")
resValue("string", "example_value", "origin tips")
}
exampleFlavor {
buildConfigField("String", "example_value", "\"flavor server address\"")
resValue("string", "example_value", "flavor tips")
}
}
}
配置完后重新構(gòu)建一下項目,就可以通過BuildConfig.example_value以及getString(R.string.example_value)來使用配置的字段。
效果如圖:
origin

exampleFlavor

- 配置manifestPlaceholders
有些三方SDK,會在Manifest中配置meta-data,并且這些值跟包名大概率是綁定的,因此不同渠道包需要替換不同的值,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
...
>
<meta-data
android:name="channel_value"
android:value="${channel_value}"/>
....
</application>
</manifest>
android {
...
productFlavors {
origin{
manifestPlaceholders = [channel_value: "origin channel"]
}
exampleFlavor {
manifestPlaceholders = [channel_value: "flavor channel"]
}
}
}
效果如圖:
origin

exampleFlavor

- 配置不同的依賴
不同渠道包可能會引用不同的三方SDK,配置了productFlavors后,可以在dependencies中區(qū)分依賴包,代碼如下:
dependencies {
// origin 包依賴
originImplementation("com.google.code.gson:gson:2.10.1")
// exampleFlavor包依賴
exampleFlavorImplementation("com.google.android.gms:play-services-auth:20.4.1")
}
示例:
在FlavorExampleActivity中同時導(dǎo)入Gson包和Google登錄包,效果如下:
origin

exampleFlavor

- 配置不同的資源
在app/src目錄下,創(chuàng)建exampleFlavor文件夾,創(chuàng)建與main包下一樣的資源文件夾,打渠道包時,相同目錄下同名的文件會自動替換,可以通過這種方式來實現(xiàn)替換應(yīng)用名稱和應(yīng)用圖標(biāo)。

效果如圖:

示例Demo
按照慣例,在示例Demo中添加了相關(guān)的演示代碼。
以上就是Android 通過productFlavors實現(xiàn)多渠道打包方法示例的詳細內(nèi)容,更多關(guān)于Android productFlavors多渠道打包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Flutter實現(xiàn)點贊效果的示例代碼
點贊這個動作不得不說在社交、短視頻等App中實在是太常見了。本文將利用Flutter制作出一個點贊動畫效果,感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04
Android 開源項目側(cè)邊欄菜單(SlidingMenu)使用詳解
SlidingMenu的是一種比較新的設(shè)置界面或配置界面效果,在主界面左滑或者右滑出現(xiàn)設(shè)置界面,能方便的進行各種操作.目前有大量的應(yīng)用都在使用這一效果。如Evernote、Google+、Foursquare等,國內(nèi)的豌豆夾,人人,360手機助手等都使用SlidingMenu的界面方案。2016-05-05
Android 使用Vitamio打造自己的萬能播放器(9)—— 在線播放 (在線電視)
本文主要介紹Android 使用Vitamio開發(fā)播放器,實現(xiàn)在線電視播放,這里提供效果圖和實例代碼以便大家參考,2016-07-07
玩轉(zhuǎn)Kotlin 徹底弄懂Lambda和高階函數(shù)
這篇文章主要幫助大家徹底弄懂Lambda和高階函數(shù),玩轉(zhuǎn)Kotlin,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
Android RadioGroup和RadioButton控件簡單用法示例
這篇文章主要介紹了Android RadioGroup和RadioButton控件簡單用法,結(jié)合實例形式分析了Android單選按鈕控件的基本定義、布局與功能實現(xiàn)技巧,需要的朋友可以參考下2016-07-07
解決Fedora14下eclipse進行android開發(fā),ibus提示沒有輸入窗口的方法詳解
本篇文章是對Fedora14下eclipse進行android開發(fā),ibus提示沒有輸入窗口的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05

