Gradle For Android(二) 多渠道打包與簽名配置

《Gradle For Android(二) 多渠道打包與簽名配置》
轉載請註明來自 傻小孩bgold.xitu.io/user/57e089…喜歡的能夠關注我,不按期總結文章!您的支持是個人動力哈!java

Gradle For Android 導讀

繼上一篇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

1、多渠道個性化定製

(一)簡單渠道定義

不作任何定製,只是提供渠道名稱,只須要在application中的build.gradle,android做用域中添加productFlavors,例如如下代碼:app

productFlavors {//多渠道打包
    xiaomi { //小米渠道
    }
    googlepaly { //google play 渠道
    }
    huawei { //華爲渠道
    }
    baidu { //百度 渠道
    }
}複製代碼

若是沒有錯誤狀況,咱們會在Android studio的BuildVariant看到對應的渠道,如圖所示:post

buildvariant.png

(二)個性自定義

Gradle組件爲多渠道打包提供了許多方便的方法,開發者能夠根據不一樣的渠道配置打包不一樣的apk,例如文件名、包名、編譯資源等等。在這裏舉例下:gradle

一、不一樣渠道編譯不一樣的包名
productFlavors {//多渠道打包
    xiaomi { //小米渠道
        applicationId 'com.yuan.agradle1'//個性定製,小米市場包名不一樣
    }
    googlepaly { //google play 渠道
        applicationId 'com.yuan.agradle2'
    }
}複製代碼

打包結束後,咱們輸出下包名看看結果:優化

package_google.png

package_xiaomi.png

二、不一樣渠道編譯指定不一樣的資源類型

看過第一篇文章的筆者,不知道是否還記得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']
}複製代碼
三、自定義打包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)
        }
    }
}複製代碼
四、渠道的統一配置

若是須要在不一樣渠道統一配置,可使用productFlavors.all字段,例如如下:

productFlavors.all { 
        //...
}複製代碼

2、簽名配置

簽名主要有兩種方式,手動簽名打包與自動簽名。如今分別舉例下兩種方式:

(一)手動簽名打包

signed_1.png

建立一個簽名文件,填入這些內容便可:

signed_2.png

使用剛剛簽名的文件,輸入密碼進行簽名打包:

signed_3.png

選擇打包渠道:

signed_4.png

等待一段時間後就能夠查看結果了~

signed_5.png

(二)自動簽名

自動簽名呢,是在咱們的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共勉,寫給在成長路上奮鬥的你

相關文章
相關標籤/搜索