《Gradle For Android(二) 多渠道打包與簽名配置》
轉(zhuǎn)載請(qǐng)注明來自 傻小孩b_移動(dòng)開發(fā)(http://www.reibang.com/users/d388bcf9c4d3)喜歡的可以關(guān)注我宵晚,不定期總結(jié)文章换衬!您的支持是我的動(dòng)力哈药版!
Gradle For Android 導(dǎo)讀
繼上一篇Gradle基礎(chǔ)篇后师倔,現(xiàn)在記錄下如何在gradle中進(jìn)行多渠道打包與簽名配置
身為程序猿,谷歌被墻是眾所周知的事情~因此,估計(jì)好多人都還沒見過google play store。也許是在玩pokemon go物臂,有特意去搞過吧哈~所以呢,現(xiàn)今國(guó)內(nèi)有許多應(yīng)用市場(chǎng)产上,什么小米棵磷、華為、360晋涣、百度等等仪媒,所以每次可能需要發(fā)版幾十個(gè)渠道包。但是gradle為我們提供productFlavors谢鹊,我們可以獨(dú)立對(duì)應(yīng)渠道進(jìn)行私有定制打包算吩。
哎呀,一下跑偏了〉瓒螅現(xiàn)在直接記錄下Gradle For Android(二)偎巢,gradle對(duì)多渠道管理以及對(duì)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梧躺,針對(duì)不同的渠道配置個(gè)性化apk
3似谁、BuildVariants:每一個(gè)buildtype和flavor組成一個(gè)buildvariant
一傲绣、多渠道個(gè)性化定制
(一)簡(jiǎn)單渠道定義
不做任何定制,只是提供渠道名稱巩踏,只需要在application中的build.gradle秃诵,android作用域中添加productFlavors,例如以下代碼:
productFlavors {//多渠道打包
xiaomi { //小米渠道
}
googlepaly { //google play 渠道
}
huawei { //華為渠道
}
baidu { //百度 渠道
}
}
如果沒有錯(cuò)誤情況塞琼,我們會(huì)在Android studio的BuildVariant看到對(duì)應(yīng)的渠道菠净,如圖所示:
(二)個(gè)性自定義
Gradle組件為多渠道打包提供了許多方便的方法,開發(fā)者可以根據(jù)不同的渠道配置打包不同的apk彪杉,例如文件名毅往、包名、編譯資源等等派近。在這里舉例下:
1攀唯、不同渠道編譯不同的包名
productFlavors {//多渠道打包
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個(gè)性定制,小米市場(chǎng)包名不同
}
googlepaly { //google play 渠道
applicationId 'com.yuan.agradle2'
}
}
打包結(jié)束后渴丸,我們輸出下包名看看結(jié)果:
2侯嘀、不同渠道編譯指定不同的資源類型
看過第一篇文章的筆者,不知道是否還記得sourceSets 這個(gè)字段谱轨,可以自定義指定編譯的資源路徑戒幔。渠道不同可否編譯資源不同?這個(gè)答案是肯定的土童,必須可以诗茎!(這里我demo沒有做出舉例,只是注釋)
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個(gè)性定制献汗,小米市場(chǎng)包名不同
//以下指定編譯資源
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 {
//...
}
二刃麸、簽名配置
簽名主要有兩種方式醒叁,手動(dòng)簽名打包與自動(dòng)簽名。現(xiàn)在分別舉例下兩種方式:
(一)手動(dòng)簽名打包
創(chuàng)建一個(gè)簽名文件,填入這些內(nèi)容即可:
使用剛剛簽名的文件把沼,輸入密碼進(jìn)行簽名打包:
選擇打包渠道:
等待一段時(shí)間后就可以查看結(jié)果了~
(二)自動(dòng)簽名
自動(dòng)簽名呢啊易,是在我們的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'
}
}
希望對(duì)有些開發(fā)者有幫助具體查看可以github上的demo捆愁,也歡迎加入開發(fā)交流群哈割去,詳情看個(gè)人簡(jiǎn)介。下一篇是對(duì)gradle的優(yōu)化昼丑,以及一些使用技巧呻逆,歡迎讀者閱讀
DEMO
Gradle For Android(二) 多渠道打包與簽名配置
傻小孩b mark共勉,寫給在成長(zhǎng)路上奮斗的你