Android清单文件中的versionCode和versionName有什么区别?

294
我在安卓应用市场发布的应用版本代码为2,版本名称为1.1。今天更新时,我在清单文件中将版本代码更改为3,但错误地将版本名称更改为1.0.1并上传到市场。现在,我的应用程序用户是否会在手机上收到更新通知?还是我需要重新操作一遍?

1
试试这个链接,它会帮助你的:http://developer.android.com/tools/publishing/versioning.html#minsdkversion - MPG
他们应该会根据你增加的版本代码来更新,理论上这个版本代码会被用作更新标记。 - superUser
@user838522,您能否将得票最多的答案标记为所选答案? - xarlymg89
@CarlosAlbertoMartínezGadea:user838522 最后一次出现是在2013年。 - serv-inc
13个回答

693

参考链接

android:versionCode

内部版本号。此数字仅用于确定一个版本是否比另一个版本更新,较高的数字表示更近期的版本。这不是向用户显示的版本号;该版本号由versionName属性设置。 值必须设置为整数,例如“100”。您可以根据需要定义它,只要每个后续版本都具有更高的数字即可。[...]

android:versionName

向用户显示的版本名称。此属性可以设置为原始字符串或对字符串资源的引用。该字符串除了向用户显示之外没有其他用途。versionCode属性保存内部使用的重要版本号。

从中可以清楚地看出,versionName只是向用户显示的内容,versionCode才是重要的。只需不断增加它,一切都应该没问题。


2
这意味着两者之间没有数学关系。是吗? - Vinil Chandran
这解释了静默更新,看起来是相同的版本。 - E. Sundin
31
请注意:这里只是添加一条注释,Google Play 允许的 versionCode 最大值为 2100000000。 - Atul
2
在Play商店中,更新版本与之前的版本之间必须保持版本代码差异为1吗? - Sivaram Boina
2
@sivaram 不是的,一点也不是。 - Unknown
@VinilChandran!是的,这两者之间没有数学关系。但是在未来为了自我理解,将它们联系起来是一个好习惯。 例如 versionCode:1 versionName:1.0, versionCode:2 versionName:1.1 等。 - Mudassir

34
不需要倒退你的步骤。由于你增加了VersionCode,这意味着你的应用已经升级了。VersionName只是一个字符串,用于向用户展示以供用户阅读。Google Play并不根据VersionName采取任何行动。

33

版本号 - 是一个正整数,用于与其他版本号进行比较。它不会显示给用户,只是一种记录方式。您可以将其设置为任何整数,但建议您线性递增以获取后续版本。

版本名称 - 这是用户看到的版本字符串,不用于内部比较或其他用途,只供用户查看。

例如:假设您发布了一个应用程序,其初始versionCode可能为1,versionName也可能为1。一旦您对应用程序进行了一些小更改并希望发布更新,则应将versionName设置为“1.1”(由于更改不是主要的),而逻辑上您的versionCode应该是2(无论更改的大小如何)。

假设在另一种情况下,您发布了一个完全改进的应用程序版本,则可以将versionCode和versionName都设置为“2”。

希望这有所帮助。

您可以在此处阅读更多信息。


如果您发布了一个完全改版的应用程序,您可以将versionCode和versionName设置为“2”。如果此时versionCode为137,那么您仍然可以将其设置为2吗? - Jeppe
你仍然可以将versionName设置为2。但是当你的versionCode已经达到137时,将其保留在2有什么意义呢? - The concise

9

版本号(Version code) 是 Google Play Store 用于新的应用更新,而版本名称(Version name)则向用户展示。

如果您增加了版本号,那么所有用户都将看到应用更新。

如果您需要更详细的信息,请花费两分钟阅读此文章:https://developer.android.com/studio/publish/versioning.html


8

给定一个版本号 MAJOR.MINOR.PATCH,按照以下规则进行版本号的更新:


  • 当你进行不兼容的 API 更改时,增加 MAJOR 版本号。
  • 当你以向后兼容的方式添加功能时,增加 MINOR 版本号。
  • 当你进行向后兼容的错误修复时,增加 PATCH 版本号。

版本代码和版本名称

正如您所知,在 Android 上,您必须为应用程序定义两个版本字段:版本代码(android:versionCode)和版本名称(android:versionName)。版本代码是表示应用程序代码版本的递增整数值。版本名称是一串字符串,代表向用户显示的“友好”版本名称。


7
我将为您解释我在该主题上找到的唯一文档的含义。
例如,要检查升级或降级关系。<- 您可以降级应用程序。
您应确保应用程序的每个连续发布使用更大的整数值。系统不强制执行此行为,但数字真的应该增加,尽管您仍然可以降级应用程序。
android:versionCode - 一个表示应用程序代码版本相对于其他版本的整数值。该值是一个整数,以便其他应用程序可以通过编程方式评估它,例如检查升级或降级关系。您可以将该值设置为任何整数,但是您应确保每个连续发布的应用程序都使用更大的值。系统不强制执行此行为,但随着每次发布逐渐增加该值是规范的。通常,您会将应用程序的第一个版本发布时将versionCode设置为1,然后随着每个发布而单调地增加该值,无论该发布是否构成主要或次要发布。这意味着android:versionCode值未必与用户可见的应用程序发布版本具有很强的相似性(请参见下面的android:versionName)。应用程序和发布服务不应向用户显示此版本值。

2
那我现在就可以这样留下吗?因为我认为安卓系统是基于版本代码而不是版本号来检查应用程序更新的。如果我错了请纠正我。 - user838522

6
android:versionCode — 一个整数值,代表应用程序代码的版本,相对于其他版本而言。
该值是一个整数,以便其他应用程序可以通过编程方式评估它,例如检查升级或降级关系。您可以将值设置为任何整数,但是您应该确保每个连续发布的应用程序都使用更大的值。系统不强制执行此行为,但是随着连续发布的增加,增加值是规范的。 android:versionName — 一个字符串值,表示应用程序代码的发布版本,应显示给用户。
该值是一个字符串,因此您可以将应用程序版本描述为字符串,或作为任何其他类型的绝对或相对版本标识符。
与android:versionCode一样,系统不会将此值用于任何内部目的,除了使应用程序能够向用户显示它。发布服务还可以提取android:versionName值以显示给用户。
通常,您将使用将versionCode设置为1来发布应用程序的第一个版本,然后随着每个版本的发布单调地增加该值,无论发布是否构成主要或次要发布。这意味着android:versionCode值不一定与对用户可见的应用程序发布版本具有强烈的相似性(请参见下面的android:versionName)。应用程序和发布服务不应向用户显示此版本值。

5

版本代码 表示你的代码版本,Android操作系统通过使用这个变量检查更新,判断该代码是否过时。

版本名称 以以下格式表示版本名称:

(主版本号).(次版本号).(点数)

版本名称是一个字符串,仅用于可读的字符串,实际上操作系统使用版本代码。


5

实际上,它是基于versionCode而不是versionName。但是,我注意到在Android Studio - Gradle构建系统中,仅更改AndroidManifest.xml中的versionCode并不足够。我需要在build.gradle中进行更改。


2
答案来自Tanoh,可能需要一些澄清。 VersionCode 相当于构建号。因此,在发布之前,应用程序通常会经历许多迭代。其中的一些迭代可能以 alpha、beta 和实际发布的形式出现在 Google Play 商店中。每个后续迭代必须具有递增的 versionCode。然而,通常只有在公共发布之间才增加 versionName。这两个数字都很重要。您的用户需要知道他们手机上的版本是否是最新版本(versionName),而 Play 商店和 CI 系统(如 Bitrise)则依赖并/或更新构建号(versionCode)。

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