1. 程式人生 > >專案build.gradle的那些事(小記)

專案build.gradle的那些事(小記)

忙碌的2017.12已過,接著迎接忙碌的2018....

很久沒寫東西了,今天想跟著經驗寫最近對build.gradle的一些認為值得記錄的東西。

一、關於簽名

以前很多人都喜歡直接把簽名的資訊直接寫在gradle,但是這樣的做法不是太好,我們可以這樣做,用一個檔案專門存下簽名的配置資訊,此處姑且叫signing.properties,大致資訊如下:放在和build.gradle同一級別目錄下即可。

KEYSTORE_FILE = keystore存放路徑
KEYSTORE_PASSWORD = keystore密碼
KEY_ALIAS = key別名
KEY_PASSWORD = key密碼

接下來我們在專案的build.gradle中讀取這個檔案:

Properties props = new Properties()
props.load(new FileInputStream(file("signing.properties")))

signingConfigs {
        release {
            keyAlias props['KEY_ALIAS']
            keyPassword props['KEY_PASSWORD']
            storeFile file(props['KEYSTORE_FILE'])
            storePassword props['KEYSTORE_PASSWORD']
        }
}

二、生成名字特定的包.apk,如xxx+版本_日期.apk --> test1.1.0_20180108.apk,test1.1.0_20180108_debug.apk

目前我使用的兩種:

1.

 //生成debug包和release包名字定義,release包:名稱+版本+日期.apk,debug包:名稱+版本+日期+debug.apk
    applicationVariants.all{ variant->
        variant.outputs.each { output->
            def oldFile = output.outputFile
            if(variant.buildType.name.equals('release')){
                def releaseApkName = 'test' + defaultConfig.versionName + '-'+buildTime()+'.apk'
                output.outputFile = new File(oldFile.parent, releaseApkName)
            }else {
                def debugApkName = 'test' + defaultConfig.versionName + '-'+buildTime()+'-debug.apk'
                output.outputFile = new File(oldFile.parent, debugApkName)
            }
        }
    }

def buildTime() {
    def df = new SimpleDateFormat("yyyyMMdd")
    df.setTimeZone(TimeZone.getDefault())
    return df.format(new Date())
}

2.

//第二種方法 -- 生成debug包和release包名字定義,release包:名稱+版本+日期.apk,debug包:名稱+版本+日期+debug.apk
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                if (variant.buildType.name.equals('release')) {
                    def fileName = outputFile.name.replace("app", "test" + "_v${variant.versionName}_${buildTime()}")
                    outputFileName = fileName
                } else {
                    def fileName = outputFile.name.replace("app", "test_debug" + "_v${variant.versionName}_${buildTime()}")
                    outputFileName = fileName
                }             }
        }
    }
三、方法數超過64k的問題 現在專案都比較大,很容易出現方法數超過64k,當超過的時候As就無法執行,解決的方法是在build.gradle中加入: defaultConfig {        ...............
        multiDexEnabled true        ...............
} 或者: compile 'com.android.support:multidex:1.0.0' 然後在你寫應用入口的XXApplication中繼承MultiDexApplication,如: public class BaseApplication extends MultiDexApplication {

    /** 啟用MultiDex*/
 @Override
 protected void attachBaseContext(Context base) {
  super.attachBaseContext(base);
  MultiDex.install(this);
 } }

好啦,2018繼續前進,開發知識面要繼續拓寬!