2015-02-24 17 views
8

Vorrei applicare VersionCode diversi per rendere apk file. Per il debug, correggerlo solo su 1 e per rilasciare qualsiasi numero specificato in defaultConfig.Usa versioneCodice diversa per Debug/Release build gradle android

Il codice riportato di seguito fornisce il file mypackage-release-1.apk come assemblaRelease artefatto, che non è previsto. Mi aspettavo mypackage-release-10111.apk per quello.

perché la riga debug { defaultConfig.versionCode=1 } influisce su arteRelease artefatto?

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 
    } 
} 

risposta

6

Anche a me, ma credo che defaultConfig.versionCode è stato fissato quando build.gradle essere la compilazione. È una variabile statica globale e assegnata al compiletime, non al runtime.

Penso che possiamo intercettare l'esecuzione dell'attività gradle e modificare defaultConfig.versionCode in fase di esecuzione.


Dopo goooooooogle, ho trovato questo funziona per me: https://gist.github.com/keyboardsurfer/a6a5bcf2b62f9aa41ae2

4

tardi sul partito ...

L'intero file Gradle valutata prima di ogni esecuzione dell'attività, quindi si sono fondamentalmente cambiando il predefinito versionCode durante la dichiarazione delle configurazioni debug. Non esiste un modo diretto per reimpostare versionCode da buildType, ma il collegamento sull'altra risposta esegue il trucco dichiarando un'attività sulle varianti di creazione.

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