《Gradle For Android(二) 多渠道打包與簽名配置》
轉載請註明來自 傻小孩b(gold.xitu.io/user/57e089…喜歡的能夠關注我,不按期總結文章!您的支持是個人動力哈!java
繼上一篇Gradle基礎篇後,如今記錄下如何在gradle中進行多渠道打包與簽名配置android
身爲程序猿,谷歌被牆是衆所周知的事情~所以,估計好多人都還沒見過google play store。也許是在玩pokemon go,有特地去搞過吧哈~因此呢,現今國內有許多應用市場,什麼小米、華爲、360、百度等等,因此每次可能須要發版幾十個渠道包。可是gradle爲咱們提供productFlavors,咱們能夠獨立對應渠道進行私有定製打包。git
哎呀,一下跑偏了。如今直接記錄下Gradle For Android(二),gradle對多渠道管理以及對apk進行簽名信息配置的流程,剛剛接觸的能夠轉身到第一篇文章,謝謝~github
首先得了解下BuildTypes、Flavors、BuildVariants三個定義:
一、BuildTypes : 構建類型,AndroidStudio的Gradle組件默認提供給了「debug」「release」兩個配置。
二、Flavors : 產品渠道,能夠根據productFlavors,針對不一樣的渠道配置個性化apk
三、BuildVariants:每個buildtype和flavor組成一個buildvariantapi
不作任何定製,只是提供渠道名稱,只須要在application中的build.gradle,android做用域中添加productFlavors,例如如下代碼:app
productFlavors {//多渠道打包
xiaomi { //小米渠道
}
googlepaly { //google play 渠道
}
huawei { //華爲渠道
}
baidu { //百度 渠道
}
}複製代碼
若是沒有錯誤狀況,咱們會在Android studio的BuildVariant看到對應的渠道,如圖所示:post
Gradle組件爲多渠道打包提供了許多方便的方法,開發者能夠根據不一樣的渠道配置打包不一樣的apk,例如文件名、包名、編譯資源等等。在這裏舉例下:gradle
productFlavors {//多渠道打包
xiaomi { //小米渠道
applicationId 'com.yuan.agradle1'//個性定製,小米市場包名不一樣
}
googlepaly { //google play 渠道
applicationId 'com.yuan.agradle2'
}
}複製代碼
打包結束後,咱們輸出下包名看看結果:優化
看過第一篇文章的筆者,不知道是否還記得sourceSets 這個字段,能夠自定義指定編譯的資源路徑。渠道不一樣能否編譯資源不一樣?這個答案是確定的,必須能夠!(這裏我demo沒有作出舉例,只是註釋)ui
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']
}複製代碼
寫的兩個方法我就不粘貼了哈,具體看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)
}
}
}複製代碼
若是須要在不一樣渠道統一配置,可使用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的優化,以及一些使用技巧,歡迎讀者閱讀~
Gradle For Android(二) 多渠道打包與簽名配置
傻小孩b mark共勉,寫給在成長路上奮鬥的你