《Gradle For Android(二) 多渠道打包與簽名配置》
轉載請註明來自 傻小孩b(gold.xitu.io/user/57e089…喜歡的可以關注我,不定期總結文章!您的支援是我的動力哈!
Gradle For Android 導讀
繼上一篇Gradle基礎篇後,現在記錄下如何在gradle中進行多渠道打包與簽名配置
身為程式猿,谷歌被牆是眾所周知的事情~因此,估計好多人都還沒見過google play store。也許是在玩pokemon go,有特意去搞過吧哈~所以呢,現今國內有許多應用市場,什麼小米、華為、360、百度等等,所以每次可能需要發版幾十個渠道包。但是gradle為我們提供productFlavors,我們可以獨立對應渠道進行私有定製打包。
哎呀,一下跑偏了。現在直接記錄下Gradle For Android(二),gradle對多渠道管理以及對apk進行簽名資訊配置的流程,剛剛接觸的可以轉身到第一篇文章,謝謝~
前提
首先得了解下BuildTypes、Flavors、BuildVariants三個定義:
1、BuildTypes : 構建型別,AndroidStudio的Gradle元件預設提供給了“debug”“release”兩個配置。
2、Flavors : 產品渠道,可以根據productFlavors,針對不同的渠道配置個性化apk
3、BuildVariants:每一個buildtype和flavor組成一個buildvariant
一、多渠道個性化定製
(一)簡單渠道定義
不做任何定製,只是提供渠道名稱,只需要在application中的build.gradle,android作用域中新增productFlavors,例如以下程式碼:
productFlavors {//多渠道打包
xiaomi { //小米渠道
}
googlepaly { //google play 渠道
}
huawei { //華為渠道
}
baidu { //百度 渠道
}
}複製程式碼
如果沒有錯誤情況,我們會在Android studio的BuildVariant看到對應的渠道,如圖所示:
(二)個性自定義
Gradle元件為多渠道打包提供了許多方便的方法,開發者可以根據不同的渠道配置打包不同的apk,例如檔名、包名、編譯資源等等。在這裡舉例下:
1、不同渠道編譯不同的包名
productFlavors {//多渠道打包
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個性定製,小米市場包名不同
}
googlepaly { //google play 渠道
applicationId 'com.yuan.agradle2'
}
}複製程式碼
打包結束後,我們輸出下包名看看結果:
2、不同渠道編譯指定不同的資源型別
看過第一篇文章的筆者,不知道是否還記得sourceSets 這個欄位,可以自定義指定編譯的資源路徑。渠道不同可否編譯資源不同?這個答案是肯定的,必須可以!(這裡我demo沒有做出舉例,只是註釋)
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個性定製,小米市場包名不同
//以下指定編譯資源
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名稱
寫的兩個方法我就不貼上了哈,具體看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、渠道的統一配置
如果需要在不同渠道統一配置,可以使用productFlavors.all欄位,例如以下:
productFlavors.all {
//...
}複製程式碼
二、簽名配置
簽名主要有兩種方式,手動簽名打包與自動簽名。現在分別舉例下兩種方式:
(一)手動簽名打包
建立一個簽名檔案,填入這些內容即可:
使用剛剛簽名的檔案,輸入密碼進行簽名打包:
選擇打包渠道:
等待一段時間後就可以檢視結果了~
(二)自動簽名
自動簽名呢,是在我們的application中的build.gradle,先配置好籤名檔案資訊,當然我們要先建立好一個簽名檔案哈,具體配置程式碼如下:
signingConfigs {
debug {
keyAlias 'yuan'
keyPassword '12345678'
storeFile file("../agradle.jks")//這裡我放在project根目錄下,根據路徑配置
storePassword '12345678'
}
release {
keyAlias 'yuan'
keyPassword '12345678'
storeFile file("../agradle.jks")
storePassword '12345678'
}
}複製程式碼
希望對有些開發者有幫助~具體檢視可以github上的demo,也歡迎加入開發交流群哈,詳情看個人簡介。下一篇是對gradle的優化,以及一些使用技巧,歡迎讀者閱讀~
DEMO
Gradle For Android(二) 多渠道打包與簽名配置
傻小孩b mark共勉,寫給在成長路上奮鬥的你