Android?通過productFlavors實(shí)現(xiàn)多渠道打包方法示例
正文
在日常開發(fā)中,可能會(huì)遇到同一份代碼,需要根據(jù)運(yùn)營需求打出不同包名、不同圖標(biāo)、不同名稱的Apk,發(fā)布到不同的渠道中。Android Studio提供了便捷的多渠道打包實(shí)現(xiàn)方法productFlavors
。
本文介紹一下使用productFlavors
來實(shí)現(xiàn)多渠道打包。
創(chuàng)建productFlavors
- 添加Dimension
在app包下的build.gradle中的android閉包下,添加flavorDimension
,代碼如下:
android { ... // 方式1 getFlavorDimensionList().add('example_value') // 方式2 flavorDimensions "example_value" }
兩種方式選擇一種即可,方式1有代碼補(bǔ)全提示,方式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),如果只添加了一個(gè)flavorDimensions
,那么productFlavor
中的dimension
可以不用特別聲明(我的gradle版本為7.6,AGP為7.4.1)。
構(gòu)建完后可以在Build Variants中看到已配置的變體,如圖:
渠道包參數(shù)配置
打渠道包時(shí),根據(jù)需求可能會(huì)需要配置不同參數(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)建會(huì)失敗。
- 配置包名、版本號(hào)
在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渠道表示的是原始包,不進(jìn)行額外配置,使用的就是defaultConfig中聲明的包名以及版本號(hào)。
效果如圖:
origin
exampleFlavor
- 配置BuildConfig,字符串資源
在productFlavors
中配置BuildConfig或者resValue,可以讓同名字段,在打不同的渠道包時(shí)有不同的值,代碼如下:
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)建一下項(xiàng)目,就可以通過BuildConfig.example_value
以及getString(R.string.example_value)
來使用配置的字段。
效果如圖:
origin
exampleFlavor
- 配置manifestPlaceholders
有些三方SDK,會(huì)在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
- 配置不同的依賴
不同渠道包可能會(huì)引用不同的三方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
中同時(shí)導(dǎo)入Gson包和Google登錄包,效果如下:
origin
exampleFlavor
- 配置不同的資源
在app/src目錄下,創(chuàng)建exampleFlavor文件夾,創(chuàng)建與main包下一樣的資源文件夾,打渠道包時(shí),相同目錄下同名的文件會(huì)自動(dòng)替換,可以通過這種方式來實(shí)現(xiàn)替換應(yīng)用名稱和應(yīng)用圖標(biāo)。
效果如圖:
示例Demo
按照慣例,在示例Demo中添加了相關(guān)的演示代碼。
以上就是Android 通過productFlavors實(shí)現(xiàn)多渠道打包方法示例的詳細(xì)內(nèi)容,更多關(guān)于Android productFlavors多渠道打包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android自定義環(huán)形統(tǒng)計(jì)圖動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了android自定義環(huán)形統(tǒng)計(jì)圖動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07Android實(shí)現(xiàn)將一個(gè)Activity設(shè)置成窗口樣式的方法
這篇文章主要介紹了Android實(shí)現(xiàn)將一個(gè)Activity設(shè)置成窗口樣式的方法,涉及Android的窗口樣式設(shè)置與布局技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-02-02Android內(nèi)存溢出及內(nèi)存泄漏原因進(jìn)解析
這篇文章主要介紹了Android內(nèi)存溢出及內(nèi)存泄漏原因解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn))
這篇文章主要介紹了Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn)),需要的朋友可以參考下2017-04-04Android源碼中final關(guān)鍵字的用法及final,finally,finalize的區(qū)別
Android的源碼中很多地方對(duì)final關(guān)鍵字的用法很是“別出心裁”,之所以這么說是因?yàn)槲覐臎]看過是這么使用final關(guān)鍵字的,通過本文給大家分享Android源碼中final關(guān)鍵字的用法及final,finally,finalize的區(qū)別,感興趣的朋友一起學(xué)習(xí)吧2015-12-12Android基于訊飛語音SDK實(shí)現(xiàn)語音識(shí)別
本例子是一個(gè)調(diào)用訊飛語音識(shí)別SDK的例子源碼是一個(gè)最純凈的Demo比較容易看懂。實(shí)現(xiàn)的是點(diǎn)擊按鈕開始語音監(jiān)聽,手機(jī)需要聯(lián)網(wǎng),2/3G的均可,希望本文對(duì)大家學(xué)習(xí)Android有所幫助2016-06-06