Android:"更新版本0比安装版本旧"

JW.*_*JW. 5 android

我正在以发布模式构建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
Run Code Online (Sandbox Code Playgroud)

应用程序的版本代码设置为3,这两次都是我构建的.在哪里知道更新是"版本0"?

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

我很确定这曾经有用,但现在似乎没有.如果我用硬编码的"3"替换@integer引用,它就可以工作.不应该支持 @integer 吗?

Nat*_*ate 2

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

请参阅此 Google 群组讨论此 Stack Overflow 问题,了解使用 ant 构建脚本实现类似结果的一些想法。

如果您查看Android 文档,它会特别指出您可以使用 的资源versionName,但没有说明versionCode

android:versionCode

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

该值必须设置为整数,例如“100”。您可以根据需要定义它,只要每个连续版本都有更高的编号即可。例如,它可以是内部版本号。或者,您可以通过在低 16 位和高 16 位中分别编码“x”和“y”,将“xy”格式的版本号转换为整数。或者,您可以在每次发布新版本时将数字增加 1。

android:versionName

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