Android Manifest中的versionCode vs versionName

我的应用在android市场上的版本代码为2,版本名称为1.1

但是,今天更新的时候,我在manifest里把版本码改成了3,但是错误的把我的版本名改成了1.0.1,并把apk上传到了市场。

现在,我的应用程序的用户会在他们的手机上收到更新通知吗?还是我要重做一遍?

208299 次浏览

我将给你我对我所能找到的关于这个主题的唯一文件的解释。

“例如检查升级或降级关系。”你可以降级一个应用程序。

你应该确保应用程序的每个后续版本都使用更大的值。系统不会强制执行这种行为”<-这个数字确实应该增加,但你仍然可以降级一个应用程序。

android:versionCode -一个整数值,代表应用程序代码的版本,相对于其他版本。该值为整数,以便其他应用程序可以以编程方式计算它,例如检查升级或降级关系。您可以将该值设置为您想要的任何整数,但是您应该确保应用程序的每个后续版本都使用更大的值。系统不会强制执行这种行为,但是随着连续的发布而增加值是规范的。通常,在发布应用程序的第一个版本时,将versionCode设置为1,然后在每次发布时单调地增加该值,而不管该发布是主要发行版还是次要发行版。这意味着android:versionCode值不一定与用户可见的应用程序发布版本有很强的相似性(参见下面的android:versionName)。应用程序和发布服务不应该向用户显示此版本值。

参考链接

android: versionCode

内部版本号。此数字仅用于确定一个版本是否比另一个版本更新,数值越大表示更新版本。这不是显示给用户的版本号;该数字由versionName属性设置。 取值必须为整数,例如“100”。您可以任意定义它,只要每个后续版本都有一个更高的数字。[…]< / p >

android: versionName

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

读到这里,很明显versionName只是显示给用户的东西,versionCode才是重要的。只要不断增加,一切都会好起来的。

不需要反转你的步骤。当您增加VersionCode时,这意味着您的应用程序已经升级了。VersionName只是一个字符串,为了便于用户阅读而呈现给用户。谷歌play不会根据VersionName采取任何行动。

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

该值为整数,以便其他应用程序可以以编程方式计算它,例如检查升级或降级关系。您可以将该值设置为您想要的任何整数,但是您应该确保应用程序的每个后续版本都使用更大的值。系统不会强制执行这种行为,但是随着连续的发布而增加值是规范的。

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

该值是一个字符串,以便您可以将应用程序版本描述为..字符串,或作为任何其他类型的绝对或相对版本标识符。

与android:versionCode一样,系统不会将此值用于任何内部目的,除了允许应用程序将其显示给用户。发布服务也可以提取android:versionName值以显示给用户。

通常,在发布应用程序的第一个版本时,将versionCode设置为1,然后在每次发布时单调地增加该值,而不管该发布是主要发行版还是次要发行版。这意味着android:versionCode值不一定与用户可见的应用程序发布版本有很强的相似性(参见下面的android:versionName)。应用程序和发布服务不应该向用户显示此版本值。

它确实基于versionCode而不是versionName。然而,我注意到,改变AndroidManifest.xml中的versionCode对于Android Studio - Gradle构建系统是不够的。我需要在build.gradle中更改它。

< >强版本代码 表示你的代码的版本,android操作系统通过使用这个变量来检查是否更新这个代码是旧的还是新的

< >强版本名称 表示版本名称,格式为-

(主要),(小)。(点)

字符串,仅用于可读字符串,功能版本代码已被OS使用。

版本的代码被谷歌播放商店用于新的更新。并且版本名称显示给用户。 如果你增加了版本的代码,那么更新将对所有用户可见

更详细的信息,你给2分钟阅读这篇文章https://developer.android.com/studio/publish/versioning.html

版本的代码 -这是一个正整数,用于与其他版本代码进行比较。它不会显示给用户,只是在某种程度上用于记录。您可以将它设置为您喜欢的任何整数,但建议您在后续版本中线性递增它。

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

例如:假设你发布一个应用程序,它的初始versionCode可以是1,versionName也可以是1。一旦你对应用程序做了一些小的改变,想要发布一个更新,你可以将versionName设置为“1.1”(因为变化不是很大),而从逻辑上讲,你的versionCode应该是2(不管改变的大小)。

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

希望这能有所帮助。

你可以阅读更多关于它在这里

给定一个版本号MAJOR.MINOR。PATCH,增加:


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

版本代码;版本名称

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

Tanoh中的回答可能需要一些澄清。 VersionCode相当于一个构建号。所以一款应用在发布前通常会经历多次迭代。其中一些迭代可能会以alpha、beta和实际版本的形式出现在谷歌Play商店。每个后续迭代都必须有一个递增的versionCode。但是,通常只在公共版本之间增加versionName。这两个数字都很重要。你的用户需要知道他们手机上的版本是否是最新的(versionName), Play Store和CI系统(如bitrise)依赖于和/或更新构建号(versionCode)

我猜用户仍然会收到更新通知,因为你增加了你的版本代码。但是您的版本名将显示为1.0.1给用户。

在我的情况下,我向最终用户显示我的应用程序的版本,我在Manifest文件和build.grade中添加版本名称和版本代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mydomain.myproject"
android:versionCode="9106"
android:versionName="9.1.06">


...
</manifest

之后,我将这个变量用于我的活动或片段

try
{
versionName =  getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName;


}
catch (PackageManager.NameNotFoundException e) {
versionName ="";


}
catch (ActivityNotFoundException e)
{
//e.printStackTrace();
versionName ="";
}