Unity 3D:什么是Android Bundle版本和版本代码,它们之间有什么关系?

26

a) Android捆绑版本和版本代码代表什么?

b) 捆绑版本和版本代码之间有什么区别?

i) 假设我的捆绑版本是0.137,版本代码与此有何关系?版本代码可以只是137吗?

ii) 当我发布捆绑版本1.0时会发生什么?我可以将版本代码称为10吗?

c) 它们如何相关?编写捆绑版本的正确方式是什么?


注意:似乎没有一个来源解释搜索时的区别。到目前为止,我一直很随意地给我的捆绑编号,但我想弄清楚如何正确地做这件事。

这些名称似乎是特定于Unity的,但即使从那个页面上我也不确定这些参数是关于什么的......


你是在说android:versionCode和android:versionName吗? - dymmeh
1
什么是“bundle version”?我不知道安卓中有这个名字的概念。 - CommonsWare
1
这可能是一个关于Unity的问题... http://unity3d.com/support/documentation/Components/class-PlayerSettings.html - ina
4个回答

28

没有"bundle version"这个术语,这是iOS/Mac的术语。构建好的Android应用程序称为packages。

在Android中,有两个地方指定版本: 版本名称(manifest中的android:versionName)和版本号码(android:versionCode)。它们不必关联,但实际上它们通常是相关的。在发布更新时,Google Market使用版本号码(而不是名称),以确保您的更新比当前发布的软件包更晚。

版本名称是最终用户看到的内容。它的格式没有限制;它是一个自由文本字符串,尽管绝大多数应用程序都遵循1.2或1.2.3的模式。

您可以自行决定如何关联版本名称和版本号码。您可以使用顺序版本号码,也可以使用major*10000 + minor*100 + build公式 - 这就是Google在其应用程序中所做的,因此v. 4.10.3将具有代码41003。


8
回答不错,但是提问者要求的是Unity播放器设置。_Bundle Version_将被用来填充android:versionName。请参考这篇博客文章以获取详细说明。 - Kay

18

更新

在新版本的Unity中,Bundle Version 已更名为 Version。但 Bundle Version Code 仍然存在。Android Player设置文档可以在Unity文档中找到有关这些值的说明(Android Player settings > Other settings > Identification):https://docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html#Identification

  • Version: 输入捆绑包的构建版本号,用于标识捆绑包的迭代(发布或未发布)。该版本号以数字点分隔的通用格式指定(例如4.3.2)。 (适用于iOS和Android平台。)

  • Bundle Version Code:内部版本号。此号码仅用于确定一个版本是否比另一个版本更新,较高的数字表示更新的版本。这不是向用户显示的版本号;该数字由versionName属性设置。该值必须设置为整数,例如“100”。您可以按任意方式定义它,只要每个后续版本具有更高的数字。

    例如,它可以是构建号。或者您可以通过在低16位和高16位中分别编码“x”和“y”来将“x.y”格式的版本号转换为整数。或者每次发布新版本时,您可以简单地将数字增加一。

    如果启用了Split APKs by target architecture,请保持此数字低于100000。每个APK必须具有唯一的版本代码,因此Unity会将数字添加到ARMv7的数字中100000,而对于ARM64则是200000。

原始答案

Unity在他们的Player Settings页面的手册中已经给出了答案:http://docs.unity3d.com/Manual/class-PlayerSettings.html更新:此链接不再包含以下信息):

  • Bundle版本号:指定bundle的构建版本号,用于识别一个迭代(已发布或未发布)的bundle。版本号采用由数字点号分隔的字符串的通用格式表示(例如4.3.2)。 (此内容适用于iOS和Android。)

  • Bundle版本码:内部版本号。仅用于确定一个版本是否比另一个版本更新,较高的数字表示更新的版本。这不是向用户展示的版本号;该号码由versionName属性设置。该值必须设置为一个整数,例如“100”。您可以按任何方式定义它,只要每个后续版本都具有更高的编号即可。例如,它可以是一个构建号。或者,您可以通过在低16位和高16位中单独编码“x”和“y”来将“x.y”格式的版本号转换为整数。或者,您可以每次发布新版本时将该数字增加一。


2
这并没有直接回答问题,但与ArianJM的回答相关。
我遇到了一个问题,因为我刚刚上传了Amazon应用商店的新版本。
ArianJM参考Unity手册页面的内容已经变化,并且(至少对于版本5.4)不再包含有关Bundle Version或Bundle Version Code的任何信息。
在Unity 5.4中:
Bundle Version现在是“Version”。这个字段被Amazon Appstore识别为“Version name”。
Bundle Version Code仍然是“Bundle Version Code”。这个字段被Amazon Appstore标识为“Version code”。这个字段只允许数字。
我正在上传Amazon应用商店的新版本,虽然我在Unity中将版本更新为1.1,但Bundle Version Code没有更新,结果被Amazon应用商店拒绝,因为它与先前的Bundle Version Code相同(Amazon应用商店中的版本代码)。
此后,我已经在Unity中更新了Bundle Version Code,但无法将其更新为1.1或1_1,因为该字段严格限制为数字,因此我将其更新为2。
我认为这使我们完全回到了原始问题的一部分:是否有正确的方法来编号包版本?
虽然在我的情况下任意更改为2显然不是什么好的方案,但它既不同又高于以前的数字,并且可以工作。
这不是一个很好的计划,但Unity目前缺乏有关这些字段的相关文档,以及Unity和Amazon应用商店之间类似但不同的字段名称,似乎导致了这些临时决策。

注意:在播放器设置中有两个“版本”(Version)。顶部的那个与您公司名称相邻的将更改下面的Android“版本”。 “Bundle Version Code”是重要的版本号。Google Play控制台所称的“版本代码”就是Unity所称的“Bundle Version Number”。 - st4rdog

0
我在Unity中的版本代码中有一个随机的长数字,例如2480382,然后我将其更改为数字3,与应用程序版本号相同,Google Play接受了它。因此,我猜保持相同的数字会更加安全,并且尽量不要将版本命名为2.1.2之类的,因为它们会添加额外的0,从而导致出现错误,即APK太高等等。。所以最好将其保持为1、2、3。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接