使用不同的VersionCode进行Debug / Release android gradle build

我想申请不同的VersionCode来制作apk文件。 对于debugging只修复它为1 ,并释放defaultConfig中指定的任何数字。

下面的代码给出mypackage-release-1.apk文件为assembleRelease工件,这不是预期的。 我预计mypackage-release-10111.apk

为什么debug { defaultConfig.versionCode=1 }会影响assembleRelease工件?

 defaultConfig { versionCode 10111 versionName '2.5.4' minSdkVersion 10 targetSdkVersion 21 } signingConfigs { debug { project.ext.loadSign = false defaultConfig.versionCode = 1 // Why this value applied to assembleRelease? } release { project.ext.loadSign = true applicationVariants.all { variant -> variant.outputs.each { output -> def file = output.outputFile output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionCode + ".apk")) } } } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } } 

Solutions Collecting From Web of "使用不同的VersionCode进行Debug / Release android gradle build"

我也是,但我认为build.gradlebuild.gradle编译时设置的。 它是全局静态variables,在编译时分配,而不是运行时分配。

我想我们可以拦截gradle任务执行,并在运行时修改defaultConfig.versionCode


goooooooogle之后,我发现这个为我工作: https ://gist.github.com/keyboardsurfer/a6a5bcf2b62f9aa41ae2

晚会上…

在执行任何任务之前,整个gradle文件都会被评估,所以在声明debugconfiguration的时候,基本上是改变了默认的versionCode 。 没有直接的方法来从buildType重置versionCode ,但是通过在构build变体上声明一个任务,另一个答案上的链接就可以做到这一点。

 android { ... defaultConfig { ... } buildTypes { ... } applicationVariants.all { variant -> def flavor = variant.mergedFlavor def versionCode = flavor.versionCode if (variant.buildType.isDebuggable()) { versionCode += 1 } flavor.versionCode = versionCode } }