【问题标题】:Android: "update version 0 is older than installed version"Android:“更新版本 0 比安装版本旧”
【发布时间】:2013-06-28 22:39:38
【问题描述】:

我正在构建一个发布模式的 Android 应用。我第一次在设备上安装它时,它工作正常。但是,如果我从相同的源重建它,用相同的密钥对其进行签名,然后重新安装,它就会失败。我在日志中收到以下错误:

W/InstallAppProgress(30456): Replacing package:com.mycompany.myapp
W/ActivityManager(26370): No content provider found for permission revoke: file:///storage/emulated/0/Download/MyApp-17.apk
W/PackageManager(26370): Can't install update of com.mycompany.myapp update version 0 is older than installed version 3

应用程序的版本代码设置为 3,我两次都构建它。它从哪里得到更新是“版本 0”的想法?

更新:我的清单文件中有这个:android:versionCode="@integer/app_version_code"。我在res/values/strings.xml 中定义了<integer name="app_version_code">3</integer>

我很确定这曾经可以工作,但现在似乎不行了。如果我用硬编码的“3”替换@integer 引用,它就可以工作。不应该@integer be supported吗?

【问题讨论】:

  • 你能发布你的清单吗?
  • 你确定 Manifest 声明了正确的 versionCode?​​span>
  • 在检查清单后更新了帖子。

标签: android


【解决方案1】:

据我所知,,你不能那样做。

See this Google Groups discussionthis Stack Overflow question 了解使用 ant 构建脚本实现类似结果的一些想法。

如果您查看Android documentation,它特别指出您可以versionName 使用资源,但对于versionCode 没有这样的说法:

android:versionCode

内部版本号。此数字仅用于确定 一个版本是否比另一个版本更新,数字更高 表示更新的版本。这不是显示的版本号 给用户;该数字由 versionName 属性设置。

该值必须设置为整数,例如“100”。你可以定义它 无论你想要什么,只要每个后续版本都有更高的 数字。例如,它可以是内部版本号。或者你可以 通过编码将“x.y”格式的版本号转换为整数 "x" 和 "y" 分别位于低 16 位和高 16 位。或者您 每次发布新版本时,可以简单地将数字增加一 发布。

android:versionName

向用户显示的版本号。 该属性可以设置为原始 字符串或作为对字符串资源的引用。该字符串没有其他 目的而不是向用户展示。 versionCode 属性持有 内部使用的重要版本号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 2014-06-03
    • 1970-01-01
    • 2012-09-16
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多