Android versionName / versionCode(Manifest)的最大长度

时间:2014-06-16 14:36:31

标签: java android android-manifest manifest maxlength

我试图找出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

是否存在最大值,或者如果没有最大值,是否存在某些规则,它是否会允许任何内容?

4 个答案:

答案 0 :(得分:14)

基于android documentation:

android:versionCode - 一个integer值,表示相对于其他版本的应用程序代码版本。

编辑 - Android文档明确指出 -

  

警告:android:versionCode的最大可能值是MAXINT   (2147483647)。但是,如果您上传的是具有此值的应用,则表示您的应用   无法更新。

基于oracle documentation:

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

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

关于String最大长度,this SO question可能对您有帮助。

答案 1 :(得分:9)

2016年11月11日更新(UTC):

docs已更新。不是旧versionCode值或2000000000。

  

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

在这里交叉发布可见度。

最近谷歌似乎发生了一次变化,最多只有 <!-- server action : can be called from menu and open a view from a python methode so we can change --> <!-- server action : the context of the action --> <record id="idOfServerAction" model="ir.actions.server"> <field name="name">Action Title</field> <field name="condition">True</field> <field name="type">ir.actions.server</field> <field name="model_id" ref="model_modelName" /> <!--Ex ref='model_res_users --> <field name="code">action = self.MethodeName(cr, uid, None, context)</field> <!-- EX: action = self.AddUser(cr, uid, None, context) --> </record> <menuitem id="idOfMenuItem" name="Title of the menu" action="idOfServerAction" /> 达到200,000,000。

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

PS:对于那些计划提供official documentation所提到的最大值为2147483647的人,请在我引用的帖子中先阅读答案。它提到截至当前日期(2016年10月8日),它仍未更新。

答案 2 :(得分:4)

让我们看一下the website

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值以显示给用户。

这是一个字符串,因此它没有最大值。

答案 3 :(得分:0)

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

对于Android,文档明确指出最大版本代码为2100000000(21.0000.0000),所以PANIK! =)

对于我的新版本,我正在考虑使用以下版本系统:yy.1ddd.hhnn,其中ddd是一年中的某一天(从1到366)。由于我不能使用20以外的任何主要版本,因此我的版本将是一年中的第1个(并且我只能将应用程序更新9年以上)。

因此,请谨慎选择版本,否则,您将无法再更新应用程序(至少在不更改应用程序ID的情况下,但这将是一个全新的应用程序,并且您将丢失所有内容(评论等))