2015-02-24 48 views
8

我想申請不同的VersionCode來製作apk文件。 僅用於調試將其修復爲1,並釋放defaultConfig中指定的任何編號。使用不同的VersionCode進行調試/發佈android gradle build

下面的代碼給出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 
    } 
} 

回答

6

我也是,但我認爲defaultConfig.versionCode是當build.gradle被編譯設置。它是全局靜態變量,在編譯時分配,而不是運行時分配。

我想我們可以攔截gradle任務執行,並在運行時修改defaultConfig.versionCode


goooooooogle後,我發現這個工作對我來說:https://gist.github.com/keyboardsurfer/a6a5bcf2b62f9aa41ae2

4

晚的派對...

整個gradle這個文件中的任何任務執行之前評估,所以你基本上是改變默認versionCode,同時聲明debug configs。沒有直接的方法來重置versionCodebuildType,但在另一個答案的鏈接通過在構建變體上聲明任務來解決問題。

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