Unity 3D: What is the Android Bundle Version and Version Code and how do they relate? Unity 3D: What is the Android Bundle Version and Version Code and how do they relate? android android

Unity 3D: What is the Android Bundle Version and Version Code and how do they relate?


There's no "bundle version". That's an iOS/Mac term. Built Android apps are called packages.

Android has two places where a version is specified: version name (android:versionName in manifest) and version code (android:versionCode). They don't have to be corellated, but in practice they usually are. Google Market uses version code (not name) when you publish an update to make sure your update is later than the package currently published.

The version name is what the end users see. There's no limitation on its format; it's a free-text string, although the vast majority of apps stick to 1.2 or 1.2.3 patterns.

The way you corellate version name and version code is up to you. You can go with sequential version codes, or you can use a major*10000 + minor*100 + build formula - that's what Google does with their apps, so that v. 4.10.3 would have code 41003.


Update

In newer versions of Unity Bundle Version became just Version. Bundle Version Code still exists. Documentation on these values can be found in the Unity docs for Android Player settings (Android Player settings > Other settings > Identification): https://docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html#Identification

  • Version: Enter the build version number of the bundle, which identifies an iteration (released or unreleased) of the bundle. The version is specified in the common format of a string containing numbers separated by dots (eg, 4.3.2). (Shared between iOS and Android.)

  • Bundle Version Code: An internal version number. This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions. This is not the version number shown to users; that number is set by the versionName attribute. The value must be set as an integer, such as “100”. You can define it however you want, as long as each successive version has a higher number.

    For example, it could be a build number. Or you could translate a version number in “x.y” format to an integer by encoding the “x” and “y” separately in the lower and upper 16 bits. Or you could simply increase the number by one each time a new version is released.

    Keep this number under 100000 if Split APKs by target architecture is enabled. Each APK must have a unique version code so Unity adds 100000 to the number for ARMv7, and 200000 for ARM64.

Original answer

Unity has the answer in their Manual of Player Settings page: http://docs.unity3d.com/Manual/class-PlayerSettings.html (Update: this link no longer contains the information below):

  • Bundle Version: Specifies the build version number of the bundle, which identifies an iteration (released or unreleased) of thebundle. The version is specified in the common format of a stringcontaining numbers separated by dots (eg, 4.3.2). (This is sharedbetween iOS and Android.)

  • Bundle Version Code: An internal version number. This number is used only to determine whether one version is more recent thananother, with higher numbers indicating more recent versions. This isnot the version number shown to users; that number is set by theversionName attribute. The value must be set as an integer, such as“100”. You can define it however you want, as long as each successiveversion has a higher number. For example, it could be a build number.Or you could translate a version number in “x.y” format to an integerby encoding the “x” and “y” separately in the lower and upper 16 bits.Or you could simply increase the number by one each time a new versionis released.


This does not directly address the question but is related (and related to the answer by ArianJM).

I came to this question as a result of a problem I just had uploading a new version to the Amazon Appstore.

The content on the referenced Unity Manual page from ArianJM has changed and (at least for version 5.4) no longer contains any information about Bundle Version or Bundle Version Code.

In Unity 5.4:

Bundle Version is now Version. This field is identified by the Amazon Appstore as Version name.

Bundle Version Code is still Bundle Version Code. This field isidentified by the Amazon Appstore as Version code. This field only allows numbers.

I am in the process of uploading a new version to the Amazon Appstore and although I updated the Version in Unity to 1.1, the Bundle Version Code was not updated and as a result was rejected by the Amazon Appstore because it was the same as the previous Bundle Version Code (Version code in Amazon Appstore).

I've since updated the Bundle Version Code in Unity - but could not update it to 1.1 or 1_1 because the field is strictly numeric - and so instead updated it to 2.

Which I believe brings us full circle to one part of the original question:Is there a right way to number the bundle versions?

Although arbitrarily changing it to 2 in my case is clearly not much of a scheme - it is both different and higher than the previous number and, as such, works.

It's not much of a plan but the lack of current documentation by Unity addressing these fields - and the similar-but-different field names between Unity and the Amazon Appstore seems to lead to these ad-hoc decisions.