Android Gradle多渠道打包的實(shí)現(xiàn)方法
一、前言
什么是多渠道打包以及多渠道打包可以做什么,這里就不做介紹了,相信看到這篇文章的你已經(jīng)了解了,多渠道打包的方式比較多,這里我們用Gradle多渠道打包方式。
和其他文章有什么不同
網(wǎng)上看到的大多數(shù)文章都只講解了
1.如何修改包名
2.如何修改變量的值
3.如何替換string中的資源
4.如何替換AndroidManifest中的資源
本篇文章會(huì)在上述知識(shí)點(diǎn)上增加
5.不同渠道如何使用不同的java文件
6.Base模塊化中如何使用多渠道
新建項(xiàng)目,在app下build.gradle中android下添加如下代碼:
productFlavors{ baidu{ applicationId "com.baidu" buildConfigField "String","BaseApi",'"http://baidu.com"' resValue "string","tip",'"hello this is form baidu"' manifestPlaceholders = [ app_name:"百度APP" ] } sougou{ applicationId "com.sougou" buildConfigField "String","BaseApi",'"http://sougou.com"' resValue "string","tip",'"hello this is form sugou"' manifestPlaceholders = [ app_name: "搜狗APP" ] } }
這里我們定義兩個(gè)渠道,一個(gè)渠道名稱是baidu,一個(gè)渠道名稱是sougou,通過(guò)applicationId直接指定應(yīng)用包名
不同渠道我們使用的請(qǐng)求地址不同,字段是BaseApi,我們可以通過(guò)buildConfigField指定BaseApi中的值,通過(guò)buildConfigField
指定的值,我們可以在系統(tǒng)生成的BuildConfig中獲取,比如我們獲取多渠道中定義的BaseApi:
String baseApi = BuildConfig.BaseApi;
我們來(lái)看下BuildConfig中的內(nèi)容
BaseApi是我們自己定義的,其他的都是默認(rèn)生成的,這里我們可以看到,應(yīng)用包名也是我們指定的。
resValue我們可以修改變量的值,這個(gè)值會(huì)生成在string.xml中,比如上面我們定義了一個(gè)tip變量,需要注意的是,這個(gè)變量不能出現(xiàn)在string.xml中,否則會(huì)提示資源重復(fù)。
如果要定義在配置文件中使用的值,則需要使用
manifestPlaceholders
我們分別修改app_name的值,在配置文件中使用占位符${} 使用,如下:
android:label="${app_name}"
接下來(lái),我們將tip的值和BaseApi顯示在TextView上,分別運(yùn)行app的baidu渠道版本和sougou渠道版本
baidu渠道運(yùn)行如下:
sougou渠道運(yùn)行如下:
從運(yùn)行結(jié)果我們可以看出來(lái),已經(jīng)達(dá)到我們想要的結(jié)果了。
如何使用不同的app圖標(biāo)
那么如何修改不同渠道的app圖標(biāo)呢,當(dāng)然我們可以在manifestPlaceholders中添加圖標(biāo)資源的占位符,但是我們這里使用另一種方法,
有時(shí)候我們不僅要替換圖標(biāo),可能要替換raw下的資源或者assets下的資源,這種情況下我們就需要
使用下面的方式:
在src目錄下新建與main同級(jí)且與渠道名稱一樣的文件包名,并且新建res資源目錄,放入圖標(biāo)使用的圖片資源,必須要與main中的名稱相同才可以覆蓋,如圖所示:
并且在gradle中設(shè)置sourceSet
sourceSets{ baidu{ res.srcDirs = ['src/baidu/res','src/baidu/res'] } sougou{ res.srcDirs = ['src/sougou/res','src/sougou/res'] } }
我們通過(guò)res.srcDirs就指定了不同渠道使用的資源文件,這里從網(wǎng)上隨便找了兩張截圖作為圖標(biāo)(如有侵權(quán),聯(lián)系刪除)
運(yùn)行兩個(gè)app,結(jié)果顯示如下:
moudle中如何配置多渠道
在實(shí)際的開(kāi)發(fā)中,我們可能會(huì)有一個(gè)base模塊,不同渠道base模塊中引用的資源也不同,我們?cè)撊绾闻渲媚兀?/p>
我們新建basemoudle模塊,app依賴basemodule模塊
同樣,我們?cè)谀K的gradl下 配置如下:
productFlavors { baidu { buildConfigField "String", "BaseMoudeDesc", '"這是base模塊百度的描述"' resValue "string", "basetip", '"i come form base_baidu"' } sougou { buildConfigField "String", "BaseMoudeDesc", '"這是base模塊搜狗的描述"' resValue "string", "basetip", '"i come form base_baidu"' } }
因?yàn)槲覀兊腷ase模塊也有兩個(gè)渠道,所以app在依賴的時(shí)候,必須分渠道去依賴
baiduCompile project(path:':basemodule',configuration:'baiduRelease') sougouCompile project(path: ':basemodule',configuration:'sougouRelease')
我們直接編譯會(huì)出現(xiàn)上面的問(wèn)題,因?yàn)閙odule模塊可能沒(méi)有生成對(duì)應(yīng)的編譯資源,因?yàn)閍ndroid的默認(rèn)編譯是debug類型的,所以為了和app主模塊同步,我們?cè)O(shè)置去掉默認(rèn)的發(fā)布類型,需要在module中的gradle中添加:
publishNonDefault true
變量的使用和上面app的使用方式一樣,在這里就不展示了。
不同渠道如何使用不同java文件
同不同渠道使用資源文件一樣,不過(guò)需要注意的是,main文件中就不能存放要替換的java文件了,否則會(huì)報(bào)資源重復(fù)的錯(cuò)誤,同樣的我們?cè)赽ase模塊分別新建baidu和sougou渠道包,并且分別新建MainActivity,如圖所示。
設(shè)置java資源目錄
sourceSets { baidu { res.srcDirs = ['src/baidu/res', 'src/baidu/res'] java.srcDirs = ['src/baidu/java','src/baidu/java'] } sougou { res.srcDirs = ['src/sougou/res', 'src/sougou/res'] java.srcDirs = ['src/sougou/java','src/sougou/java'] } }
為了展示兩個(gè)頁(yè)面的不同,我們將百度渠道的頁(yè)面背景設(shè)為粉紅色,搜狗渠道的頁(yè)面背景設(shè)置藍(lán)色,在app添加按鈕并添加監(jiān)聽(tīng)事件,打開(kāi)module中的主頁(yè)面。
運(yùn)行效果如下所示:
到這里,常用的多渠道打包需要的配置就結(jié)束了,如有錯(cuò)誤歡迎指正。
總結(jié)
到此這篇關(guān)于Android Gradle多渠道打包的文章就介紹到這了,更多相關(guān)Android Gradle多渠道打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 輕松實(shí)現(xiàn)圖片倒影效果實(shí)例代碼
這篇文章主要介紹了Android 輕松實(shí)現(xiàn)圖片倒影效果實(shí)例代碼,有需要的朋友可以參考一下2014-01-01Android底部導(dǎo)航欄的動(dòng)態(tài)替換方案
這篇文章主要為大家詳細(xì)介紹了Android底部導(dǎo)航欄的動(dòng)態(tài)替換方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12揭秘雙十一手機(jī)淘寶圖標(biāo)如何被動(dòng)態(tài)更換
這篇文章主要介紹了每到雙十一十二的時(shí)候Android手機(jī)動(dòng)態(tài)更換手機(jī)圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Android實(shí)戰(zhàn)RecyclerView頭部尾部添加方法示例
本篇文章主要介紹了Android實(shí)戰(zhàn)RecyclerView頭部尾部添加方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Android編程實(shí)現(xiàn)點(diǎn)擊EditText之外的控件隱藏軟鍵盤(pán)功能
這篇文章主要介紹了Android編程實(shí)現(xiàn)點(diǎn)擊EditText之外的控件隱藏軟鍵盤(pán)功能,涉及Android控件的功能、屬性及相關(guān)操作技巧,需要的朋友可以參考下2017-06-06Android DatePicker和DatePickerDialog基本用法示例
這篇文章主要介紹了Android DatePicker和DatePickerDialog基本用法,實(shí)例分析了DatePicker和DatePickerDialog控件針對(duì)手機(jī)時(shí)間設(shè)置的相關(guān)技巧,需要的朋友可以參考下2016-06-06Android編程之Activity中onDestroy()調(diào)用分析
這篇文章主要介紹了Android編程之Activity中onDestroy()調(diào)用方法,針對(duì)onDestroy引起的內(nèi)存泄露及解決方法進(jìn)行了分析,并給出了解決方案,需要的朋友可以參考下2015-12-12Android實(shí)現(xiàn)放大鏡效果的方法實(shí)例(附源碼)
這篇文章主要給大家介紹了利用Android實(shí)現(xiàn)放大鏡效果的方法實(shí)例,文中給出了詳細(xì)的介紹和示例代碼,文章的結(jié)尾更是給出了源碼供大家下載學(xué)習(xí),有需要的朋友們下面來(lái)一起看看吧。2017-01-01