Android版本名称/版本代码(清单文件)的最大长度是多少?

13

我正在尝试查找android清单文件中android:versionName和android:versionCode属性的最大长度是多少?

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.xxxx.xxxx"
          android:versionCode="185"           <--- THIS ATTRIBUTE
          android:versionName="1.0.185">      <--- AND THIS ATTRIBUTE

是否存在最大值?如果没有最大值,它是否几乎允许任何值?是否有一定的规则限制?


1
想知道,这个实验有什么具体的原因吗? - kosa
我知道这是一个奇怪的请求;-) - 我基本上想将应用程序错误记录到外部数据库中,因此了解设置数据库字段的最大长度将非常有用。 - Apqu
4个回答

15

根据安卓文档:

android:versionCode — 一个整数值,表示应用代码的版本,相对于其他版本。

编辑 - 安卓文档明确说明 -

警告:android:versionCode 的最大可能值为MAXINT(2147483647)。但是,如果你上传了一个带有此值的应用程序,你的应用程序将永远无法更新。

基于Oracle文档:

默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2^31,最大值为(2^31)-1。在Java SE8及更高版本中,可以使用int数据类型表示无符号32位整数,其最小值为0,最大值为(2^32)-1。

android:versionName — 一个string值,表示应用程序代码的发布版本,应向用户显示。

关于String的最大长度,这个SO问题可能会对您有所帮助。


你能把 x.x.x.x.x.x / x_x_x_x_x_x 放进去吗?还是这个标准是 "x.x.x"? - user3402040
你可以将versionName设置为任何你想要的值。这个字符串除了展示给用户以外不会被用到任何其他地方。 - PIXP

10

更新于2016年8月11日(协调世界时):

文档已经更新。不再使用旧的MAX_INT值或者是20亿的值。

警告:Google Play允许的最大versionCode值为2100000000


在这里转发以便更多人看到。

看起来Google最近有所改变,将最大versionCode值仅限制到了20亿。

参考文章:Google Play Developer Console error: The version code of your APK is high and you risk not being able to update your APK


附注:对于那些打算提供参考官方文档的人来说,其中提到的最大值为2147483647,请先阅读我引用的文章的答案。它指出截至当前日期(2016年8月10日),该文档仍未更新。


这个还是有效的吗?在API 28中,现在有一个返回64位整数的getLongVersionCode():https://developer.android.com/reference/android/content/pm/PackageInfo#getLongVersionCode/ 然而,在Google文档中,他们仍然使用数字2100000000。 - farindk
@farindk getLongVersionCode() 来自 docs - 将 versionCode 和 versionCodeMajor 组合在一起,返回一个单独的 long 值。versionCodeMajor 位于高32位 -- 它仅返回您在属性中设置的内容,不确定限制。 - AL.
当然可以,但如果它仍然是相同的32位限制,那么为什么要在API 28中将其扩展到64位呢?要么他们计划在未来增加它,要么存在文档不一致性。 - farindk
我认为直接向谷歌员工提问会得到更好的答案。可以发送一封询问邮件,但他们可能不会回复具体的内容。 - AL.

4
让我们看看这个网站versionCode是一个整数 versionName是一个字符串 android:versionCode——一个整数值,表示应用程序代码的版本相对于其他版本。该值是一个整数,以便其他应用程序可以通过编程方式评估它,例如检查升级或降级关系。您可以将该值设置为任何整数,但您应确保每个发布版本的应用程序使用更大的值。系统不强制执行此行为,但随着连续版本的增加,增加该值是规范的。通常,您会将应用程序的第一个版本发布时,将versionCode设置为1,然后随着每个版本的发布而单调递增,无论该发布是否构成主要或次要发布。这意味着android:versionCode值不一定与用户可见的应用程序发布版本具有强烈的相似性(请参阅下面的android:versionName)。应用程序和发布服务不应向用户显示此版本值。
因此,版本代码是一个整数。它没有指定标志或位数,但我们可以假设它不能为负,并猜测为32位。所以我们可以猜测它可以在0到2^32之间。Java默认具有带符号的32位整数,因此该值提供从-2^31到2^31的值。当然,如果它是64位整数,则应该介于0和2^64之间。
android:versionName——一个字符串值,表示应用程序代码的发布版本,应向用户显示。该值是一个字符串,以便您可以将应用程序版本描述为字符串或任何其他类型的绝对或相对版本标识符。与android:versionCode一样,系统不使用此值进行任何内部目的,而只是为了使应用程序能够将其显示给用户。出版服务还可以提取android:versionName值以供用户显示。
这个是一个字符串,因此没有最大值。

0

我有一个应用程序,其版本字符串和代码格式为yy.mmmm.hhnn,因此,现在,6月28日19:50生成版本20.0728.1950。我在Android和iOS中从未遇到过这个版本控制系统的任何问题,因此直到20.9999.9999的版本都可以使用

对于Android,文档明确说明最大版本代码为2100000000(21.0000.0000),所以要小心!=)

对于我的新版本,我考虑使用这个版本系统:yy.1ddd.hhnn,其中ddd是一年中的日期(从1到366)。由于我不能使用除20之外的任何主要版本,我的版本将是该年份前一天的版本(我只能更新9年的应用程序)。

因此,在选择版本时要小心,否则您将无法再次更新应用程序(至少不更改应用程序ID,但那将是一个全新的应用程序,您将失去所有内容(评论等))。


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