2015-02-24 7 views
8

Chciałbym zastosować inny VersionCode, aby plik apk. W przypadku debugowania napraw to tylko na 1 i zwolnij bez względu na liczbę określoną w defaultConfig.Użyj innego VersionCode do debugowania/wydania Android gradle build

Poniższy kod podaje plik mypackage-release-1.apk jako assembleraRelease artefakt, którego się nie spodziewałem. Spodziewałem się za to mypackage-release-10111.apk.

dlaczego linia debug { defaultConfig.versionCode=1 } wpływa na artefakt złożonyRelease?

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

Odpowiedz

6

Mnie też, ale myślę defaultConfig.versionCode został ustawiony podczas build.gradle być kompilacji. Jest to globalna zmienna statyczna i przypisana w czasie kompilacji, a nie w czasie wykonywania.

Myślę, że możemy przechwycić gradle wykonanie zadania i zmodyfikować defaultConfig.versionCode w czasie wykonywania.


Po goooooooogle, znalazłem ten działa dla mnie: https://gist.github.com/keyboardsurfer/a6a5bcf2b62f9aa41ae2

4

późno na imprezie ...

Cały plik Gradle oceniane przed każdym wykonaniem zadań, dzięki czemu są w zasadzie zmieniając domyślnie versionCode podczas deklarowania konfiguracji debug. Nie ma bezpośredniej metody resetowania versionCode z buildType, ale link drugiej odpowiedzi rozwiązuje zadeklarowanie zadania w wariantach kompilacji.

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