我正在以发布模式构建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"
。我在<integer name="app_version_code">3</integer>
中定义了res/values/strings.xml
。
我很确定这曾经有用,但现在似乎没有。如果我用硬编码的“3”替换@integer引用,它就可以工作。不应该@integer be supported?
答案 0 :(得分:2)
据我所知,没有,你不能这样做。
See this Google Groups discussion和this Stack Overflow question了解使用ant build脚本获得类似结果的一些想法。
如果您查看Android documentation,它会明确指出您可以使用versionName
的资源,但对versionCode
说不是这样的话}:
android:versionCode
内部版本号。此数字仅用于确定 一个版本是否比另一个版本更新,数字更高 表示更新的版本。这不是显示的版本号 对用户;该号码由versionName属性设置。
该值必须设置为整数,例如“100”。你可以定义它 但是你想要,只要每个连续的版本都有更高的版本 数。例如,它可以是内部版本号。或者你可以 通过编码将“x.y”格式的版本号转换为整数 低位和高位16位分别为“x”和“y”。或者您 每次新版本时,可以简单地将数字增加一个 释放。
android:versionName
向用户显示的版本号。 此属性可以设置为原始属性 字符串或作为字符串资源的引用。字符串没有其他 目的而不是向用户显示。 versionCode属性成立 内部使用的重要版本号。