《Gradle For Android(二) 多渠道打包與簽名配置》
轉(zhuǎn)載請注明來自 傻小孩b_移動開發(fā)(http://www.itdecent.cn/users/d388bcf9c4d3)喜歡的可以關(guān)注我,不定期總結(jié)文章!您的支持是我的動力哈!
Gradle For Android 導(dǎo)讀
繼上一篇Gradle基礎(chǔ)篇后,現(xiàn)在記錄下如何在gradle中進(jìn)行多渠道打包與簽名配置
身為程序猿,谷歌被墻是眾所周知的事情~因此,估計(jì)好多人都還沒見過google play store。也許是在玩pokemon go,有特意去搞過吧哈~所以呢,現(xiàn)今國內(nèi)有許多應(yīng)用市場,什么小米、華為、360、百度等等,所以每次可能需要發(fā)版幾十個(gè)渠道包。但是gradle為我們提供productFlavors,我們可以獨(dú)立對應(yīng)渠道進(jìn)行私有定制打包。
哎呀,一下跑偏了?,F(xiàn)在直接記錄下Gradle For Android(二),gradle對多渠道管理以及對apk進(jìn)行簽名信息配置的流程,剛剛接觸的可以轉(zhuǎn)身到第一篇文章,謝謝~
前提
首先得了解下BuildTypes、Flavors、BuildVariants三個(gè)定義:
1、BuildTypes : 構(gòu)建類型,AndroidStudio的Gradle組件默認(rèn)提供給了“debug”“release”兩個(gè)配置。
2、Flavors : 產(chǎn)品渠道,可以根據(jù)productFlavors,針對不同的渠道配置個(gè)性化apk
3、BuildVariants:每一個(gè)buildtype和flavor組成一個(gè)buildvariant
一、多渠道個(gè)性化定制
(一)簡單渠道定義
不做任何定制,只是提供渠道名稱,只需要在application中的build.gradle,android作用域中添加productFlavors,例如以下代碼:
productFlavors {//多渠道打包
xiaomi { //小米渠道
}
googlepaly { //google play 渠道
}
huawei { //華為渠道
}
baidu { //百度 渠道
}
}
如果沒有錯(cuò)誤情況,我們會在Android studio的BuildVariant看到對應(yīng)的渠道,如圖所示:

(二)個(gè)性自定義
Gradle組件為多渠道打包提供了許多方便的方法,開發(fā)者可以根據(jù)不同的渠道配置打包不同的apk,例如文件名、包名、編譯資源等等。在這里舉例下:
1、不同渠道編譯不同的包名
productFlavors {//多渠道打包
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個(gè)性定制,小米市場包名不同
}
googlepaly { //google play 渠道
applicationId 'com.yuan.agradle2'
}
}
打包結(jié)束后,我們輸出下包名看看結(jié)果:


2、不同渠道編譯指定不同的資源類型
看過第一篇文章的筆者,不知道是否還記得sourceSets 這個(gè)字段,可以自定義指定編譯的資源路徑。渠道不同可否編譯資源不同?這個(gè)答案是肯定的,必須可以!(這里我demo沒有做出舉例,只是注釋)
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個(gè)性定制,小米市場包名不同
//以下指定編譯資源
java.srcDirs = ['src/main1', 'src/main1/java/']
res.srcDirs = ['src/main1/res']
assets.srcDirs = ['assets1']
}
googlepaly { //google play 渠道
applicationId 'com.yuan.agradle2'
//以下指定編譯資源
java.srcDirs = ['src/main2', 'src/main2/java/']
res.srcDirs = ['src/main2/res']
assets.srcDirs = ['assets2']
}
3、自定義打包apk名稱
寫的兩個(gè)方法我就不粘貼了哈,具體看demo
//修改輸出apk名字
applicationVariants.all { variant ->
if (variant.buildType.name.equals('release')) {
variant.outputs.each { output ->
def appName = 'AGradle'
def oldFile = output.outputFile
def buildName
def releaseApkName
variant.productFlavors.each { product ->
buildName = product.name
}
releaseApkName = appName + getVersionByMainfest() + '-' + buildName + '-' + getNowTime() + '.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
}
}
4、渠道的統(tǒng)一配置
如果需要在不同渠道統(tǒng)一配置,可以使用productFlavors.all字段,例如以下:
productFlavors.all {
//...
}
二、簽名配置
簽名主要有兩種方式,手動簽名打包與自動簽名?,F(xiàn)在分別舉例下兩種方式:
(一)手動簽名打包

創(chuàng)建一個(gè)簽名文件,填入這些內(nèi)容即可:

使用剛剛簽名的文件,輸入密碼進(jìn)行簽名打包:

選擇打包渠道:

等待一段時(shí)間后就可以查看結(jié)果了~

(二)自動簽名
自動簽名呢,是在我們的application中的build.gradle,先配置好簽名文件信息,當(dāng)然我們要先創(chuàng)建好一個(gè)簽名文件哈,具體配置代碼如下:
signingConfigs {
debug {
keyAlias 'yuan'
keyPassword '12345678'
storeFile file("../agradle.jks")//這里我放在project根目錄下,根據(jù)路徑配置
storePassword '12345678'
}
release {
keyAlias 'yuan'
keyPassword '12345678'
storeFile file("../agradle.jks")
storePassword '12345678'
}
}
希望對有些開發(fā)者有幫助具體查看可以github上的demo,也歡迎加入開發(fā)交流群哈,詳情看個(gè)人簡介。下一篇是對gradle的優(yōu)化,以及一些使用技巧,歡迎讀者閱讀
DEMO
Gradle For Android(二) 多渠道打包與簽名配置
傻小孩b mark共勉,寫給在成長路上奮斗的你