Gradle+Walle全新二代簽名打包工具

weixin_34008784發表於2017-07-13
每次記錄一點點..

What ?

Android7.0推出新的應用簽名方案,它能提供更快的應用安裝時間和更多針對未授權 APK 檔案更改的保護。

Why ?

通過gradle配置多個渠道的應用包,注入相應的渠道號並簽名,以解決不同應用商城的發包問題,取代上傳一個應用商城,發一個包的尷尬場景,或者是同時發多個包的耗時長的問題。

How ?

1.要了解移步GitHub:點我訪問
2.配置方法:
在工程專案gradle中進入如下配置:

   dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'com.meituan.android.walle:plugin:1.1.3'
   }

同時在,module專案的gradle中目錄進行如下配置

apply plugin: 'walle'

在gradle的依賴庫列表中再新增依賴

compile 'com.meituan.android.walle:library:1.1.3'  //多渠道打包2代簽名

3.建立輸出目錄
在module專案的gradle檔案配置打包之後的輸出目錄(與dependencies程式碼塊同級):

def getDate() {
    def date = new Date()
    def formattedDate = date.format('MM_dd_HH_mm')
    return formattedDate
};
walle {
    // 指定渠道包的輸出路徑
    apkOutputFolder = new File("${project.rootDir}/release/" + getDate());
    // 定製渠道包的APK的檔名稱
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-
    v${versionName}-${versionCode}-${buildTime}-${fileSHA1}.apk';
    // 渠道配置檔案
    channelFile = new File("${project.rootDir}/config/markets.txt")
}

為了保證簽名的安全性,我們將簽名檔案和簽名資訊同樣配置到gradle中(與上段程式碼層級相同)。

def getSignInfo(propFileName) {
    def com.android.build.gradle.internal.dsl.SigningConfig signingConfig = new com.android.build.gradle.internal.dsl.SigningConfig("signInfo")
    File propFile = file(propFileName);
    if (propFile.exists()) {
        def Properties props = new Properties()
        props.load(new FileInputStream(propFile))
        signingConfig.v2SigningEnabled = props['V2SIGNINGENABLED']
        signingConfig.storeFile = file(props['STORE_FILE'])
        signingConfig.storePassword = props['STORE_PASSWORD']
        signingConfig.keyAlias = props['KEY_ALIAS']
        signingConfig.keyPassword = props['KEY_PASSWORD']
        println('signConfig is exits')
    } else {
        println('sign config is null')
        signingConfig = null
    }
    return signingConfig;
}

檔案儲存位置依照個人習慣,但是要注意獲取檔案的路徑是否正確。


5329011-46efe0d2bfd83683.png
image.png

附上markets.txt、releasesign.properties,檔案截圖

5329011-c10f2ce89ecfe7f6.png
releasesign.properties檔案截圖
5329011-02e3cf8829042413.png
markets.txt檔案截圖

在配置檔案處理好之後,在gradle檔案進行相關的程式碼配置(module專案中的gradle->android中配置)

 buildTypes {
        release {
            //實現自動簽名
            signingConfig getSignInfo("../config/releasesign.properties");
        }
        debug {
            //實現自動簽名
            signingConfig getSignInfo("../config/releasesign.properties");
        }
    }
編譯、打包、輸出
5329011-1406920fe7cf1bf2.png
兩個打包選項,分別對應著gradle中配置打包選項

在控制檯出現了success字樣時候就表明著打包編譯的成功了。
可以在工程所在的磁碟裡面找到所打包好的正式包或者渠道包

5329011-72411e9a5b30eacc.png
儲存路徑與gradle配置的路徑有關

注意事項(如果不發360市場,請直接無視)

當打包並簽名好了的渠道包上傳至360市場時候,360會自己進行加固並且簽名處理,然而360的操作會把打好的渠道包的渠道號,給弄丟。所以360市場包,打好之後需要單獨拎出來處理。
解決方法參見:解決方法

相關文章