1. 程式人生 > >Gradle 打多渠道包

Gradle 打多渠道包

使用gradle 打多渠道包記錄經驗
如下圖可見,每個渠道是包含debug 和realse版本的。
通過列印BASE_URL 發現在渠道和版本中都可以修改BuildConfig的常量,這樣一次可以打出多個伺服器的測試包了

 

打包程式碼如下:

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.administrator.test"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
flavorDimensions "versionCode"
}
signingConfigs {
debug {
keyAlias 'test'
keyPassword '123456'
storeFile file('E:/Test/app/test.jks')
storePassword '123456'
}

release {
keyAlias 'test'
keyPassword '123456'
storeFile file('E:/Test/app/test.jks')
storePassword '123456'
}
}
productFlavors {
ceshi {
applicationId "com.example.test1"
buildConfigField 'String', 'BASE_URL', '"測試版本"'
}
zhenshi {
applicationId "com.example.test2"
buildConfigField 'String', 'BASE_URL', '"正式版本"'
}
}
buildTypes {

release {
signingConfig signingConfigs.release
minifyEnabled false
buildConfigField 'String', 'ABC', '"Relase正式版本"'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

debug {
signingConfig signingConfigs.release
minifyEnabled false
buildConfigField 'String', 'ABC', '"Debug測試版本"'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

}
lintOptions {
disable 'GoogleAppIndexingWarning'
}

applicationVariants.all { variant ->//批量修改Apk名字
variant.outputs.all { output ->
if (!variant.buildType.isDebuggable()) {
//獲取簽名的名字 variant.signingConfig.name
//要被替換的源字串
def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
//替換的字串
def replaceFile = "_V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}_${getCurrentTime()}"
outputFileName = output.outputFile.name.replace(sourceFile, replaceFile);
//遺留問題:如何獲取當前module的name,如CodeBooke這個名字怎麼獲取到
}
}
}

}
//獲取當前時間
def getCurrentTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}