前言
在 Android 開發(fā)中,我們的一個(gè)項(xiàng)目可能需要針對(duì)不同的上架市場或者對(duì)多個(gè)客戶進(jìn)行定制蒿柳,比如 logo 的修改漩蟆,歡迎頁圖片的不同,或者是業(yè)務(wù)邏輯的不同圾叼。</br>
但是不管是哪個(gè)版本捺癞,通用的代碼是占多數(shù)的,用多個(gè) Project + svn 進(jìn)行管理可以實(shí)現(xiàn)撬码,但是有些難管理版保。
其實(shí)在 Android Studio 中夫否,通過 Gradle 配置不同的 productFlovers 可以輕松解決這個(gè)難題凰慈。
需求
在一個(gè) Project 中實(shí)現(xiàn)對(duì)多渠道多版本的同一 App 進(jìn)行管理驼鹅,并可以配置差異項(xiàng)。
解決方法
-
新建一個(gè) Project 豺型,在 moudle 的 build.gralde 文件中添加 productFlavors
其中 applicationIdSuffix
是包名后綴姻氨,會(huì)在打包時(shí)將 applicationId
定義好的包名后面加上 applicationIdSuffix
定義的內(nèi)容剪验,如本來包名為 com.asura.productflavorsdemo
,加上后綴 .debug
后就變?yōu)?com.asura.productflavorsdemo.debug
娶眷。</br>
這么做是為了在測試階段可以在一部手機(jī)上同時(shí)安裝所有渠道包的 app啸臀,在正式發(fā)布時(shí),為了防止客戶從不同渠道下載安裝出現(xiàn)多個(gè)席揽,建議包名不要隨意加后綴谓厘,應(yīng)注釋掉竟稳。</br>
添加完成之后,我們可以重新編譯一下項(xiàng)目他爸,發(fā)現(xiàn)在 Android Studio 主界面左下角(具體位置跟你的設(shè)置有關(guān))的 Build Variants
窗口中多了一些 variant 诊笤,正好就是對(duì)應(yīng)我們之前定義的 productFlavors 。
-
在 moulde 中的
src
文件夾下新建與productFlavors
中定義的不同渠道名稱一致的文件夾
_debug
和 _AAA
中的 JumpActivity
代碼不同鄙煤,所以從 main
中抽離出來(在
main
中相同包中不能出現(xiàn) JumpActivity
茶袒,否則報(bào)錯(cuò))。MainActivity
是不同版本之間一樣的亡资,所以仍然放在main
中向叉。</br>
java
文件夾中的文件,在其他版本和 main
中不能同時(shí)存在旷太,否則會(huì)報(bào)錯(cuò)销睁。而 res
文件夾中的文件可以同時(shí)存在存崖,其他版本會(huì)覆蓋 mian
中的文件。
我們還可以針對(duì)不同的版本配置 AndroidManifest.xml
清單文件来惧,它會(huì)與 main
清單文件中定義的內(nèi)容合并供搀。</br>
了解了這些,我們對(duì)不同版本的配置就很簡單了葛虐。比如不同版本的 app 圖標(biāo)不同屿脐,只需要在不同版本的 res\mipmap-xxx
文件夾中放入相同的名稱的不同圖片即可。如果需要不同版本的 app 名稱不同万栅,只需要在不同版本的 res\value
文件夾中的 strings.xml
中放入相同的名稱的不同 value 即可西疤。
示例Demo源碼下載
在這個(gè) demo 中,分別有四個(gè)不同的版本代碼需要管理扰她,可以 clone 下來自己操作一遍。