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

傻小孩b發表於2016-10-23

《Gradle For Android(二) 多渠道打包與簽名配置》
轉載請註明來自 傻小孩bgold.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  For Android(二) 多渠道打包與簽名配置
buildvariant.png

(二)個性自定義

Gradle元件為多渠道打包提供了許多方便的方法,開發者可以根據不同的渠道配置打包不同的apk,例如檔名、包名、編譯資源等等。在這裡舉例下:

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

打包結束後,我們輸出下包名看看結果:

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

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

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 { 
        //...
}複製程式碼

二、簽名配置

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

(一)手動簽名打包

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

建立一個簽名檔案,填入這些內容即可:

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

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

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

選擇打包渠道:

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

等待一段時間後就可以檢視結果了~

Gradle  For Android(二) 多渠道打包與簽名配置
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共勉,寫給在成長路上奮鬥的你

相關文章