前段時(shí)間弄新項(xiàng)目的時(shí)候需要配置打包平臺(tái),然后就研究了一下,之前由于都用Android studio 進(jìn)行構(gòu)建項(xiàng)目,所以很少用命令行,久而久之對(duì)于這些有點(diǎn)陌生。
先上第一張圖:

它是整個(gè)工程的一個(gè)目錄,其實(shí)也就有多少個(gè)module就有多少個(gè)
build.gradle,第一個(gè)代表這整個(gè)project的build.gradle,那么咱們看看每個(gè)目錄下面都有什么呢?

看到了吧,其實(shí)每個(gè)目錄下面都是一堆task,這個(gè)task 有的是Android 給你預(yù)設(shè)好的,有的是自己的自定義的
那么我把a(bǔ)pp/build.gradle里面的代碼改一下成如下:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dev{
minifyEnabled false
}
}
flavorDimensions "default"
productFlavors{
black{
}
blue{
}
}
注意 buildType 類型的
debug是默認(rèn)的,你不寫(xiě)也會(huì)默認(rèn)存在。
上面的代碼中主要增加了 dev,productFlavors { black,blue}
那么咱們?cè)賮?lái)看看現(xiàn)在的gradle 發(fā)生了什么變化。

是不是多出來(lái)幾種。再看other里面。

哇,竟然進(jìn)行了排序組合,這就是productFlavors的風(fēng)味的作用了。
進(jìn)入正題:實(shí)際的表現(xiàn)
1.運(yùn)行 ./gradlew assemble 的結(jié)果
會(huì)在output/apk 文件夾下生產(chǎn)
app-black-debug.apk,
app-black-dev.apk,
app-black-release.apk,
app-blue-debug.apk,
app-blue-dev.apk,
app-blue-release.apk,
等6種組合
2.運(yùn)行 ./gradlew assembleDebug 的結(jié)果
會(huì)在output/apk 文件夾下生產(chǎn)
app-black-debug.apk,
app-blue-debug.apk,
等2種組合
3.運(yùn)行 ./gradlew assembleBlack 的結(jié)果
會(huì)在output/apk 文件夾下生產(chǎn)
app-black-debug.apk,
app-black-dev.apk,
app-black-release.apk,
等3種組合
4.運(yùn)行 ./gradlew assembleBlackDebug 的結(jié)果
會(huì)在output/apk 文件夾下生產(chǎn)
app-black-debug.apk,
等1種組合
想必你也能總結(jié)出規(guī)律,如果只用assemble的話,gradle 會(huì)把 buildType 和productFlavors 組合打包,很顯然命令越清晰,打的包就越精確,這一塊也是多渠道打包的要點(diǎn),主要是通過(guò)配置productFlavots去進(jìn)行多渠道打包,bulidType 控制著打出的包是debug 類型還是release類型
還有交給大家一個(gè)小技巧,大家有沒(méi)有發(fā)現(xiàn)這樣的命令是不是很長(zhǎng) 啊,在用的過(guò)程中這么長(zhǎng)很不方便,gradle 為大家考慮了這件事情,大家只需要打出命令的首字母就行,比如:
./gradlew assembleRedRelease 就可以用 ./gradlew aRR 代替,注意:bulidType productFlavors 里面最后不要出現(xiàn)首字母一樣的類型,不然gradle 沒(méi)法區(qū)分,我上面舉的例子就不恰當(dāng),./gradlew aBD,gralde 就區(qū)分不出 是 assembleBlackDebug 、assembleBlackDev、assembleBlueDebug、 assembleBlueDev