前言
一般情況下我們apk有debug和release兩種包,這是因為buildTypes有debug release兩種類型行嗤,gradle還提供了多渠道打包區(qū)別打不同功能apk版本鱼冀,在productFlavors中設(shè)置,我們項目中三個版本,因此道理上講我們可以打出6種類型的apk。在AS左下角的buil variant工具欄可以查看邀窃。
需求
根據(jù)productFlavors的不同,不同版本可以配置各種的appname packname applocationid 等等假哎,這些配置都是在gradle文件中配置即可,那是否能實現(xiàn)不同版本調(diào)用不同的java代碼么鞍历。答案也是肯定的舵抹,同理debug和release版本也可以實現(xiàn)編譯不同的代碼。
原理
gradle在編譯之前劣砍,會對工程進(jìn)行合并(merge)惧蛹,其中Java代碼的merge方式是目錄整合。具體是把main目錄的Java文件 + 當(dāng)前buildType目錄的Java文件 + 當(dāng)前productFlavor目錄的文件直接整合到同一個目錄刑枝。
實現(xiàn)
![](https://static.dingtalk.com/media/lALOmjLmFc0Brs0BWA_344_430.png_620x10000q90g.jpg)
在src目錄下新建main的同級目錄debug和release香嗓,分別在里建java目錄,java目錄放各種不同的java代碼装畅。
注意
- 編譯會經(jīng)常會出現(xiàn)報類名重復(fù)錯誤靠娱,release目錄下的java目錄未變色。此時只需注意原理中所講的掠兄,比如打包是debug包會首先講debug和main目錄下的代碼merge再編譯像云,因此當(dāng)然debug和main下不能存在相同的類名。release包也同理
- debug和release下代碼報名路徑必須一致蚂夕,比如main中調(diào)用了MySettingActivity.java這個類迅诬,impor導(dǎo)包時如果報名不一致debug包可以導(dǎo),release包必然倒不了啦婿牍。
總結(jié)
怕出鍋侈贷,就老實切換build variant模式,看編譯是否通過等脂。俏蛮。因為默認(rèn)都是debug模式的,一般往往release模式需要特別調(diào)慎菲。