【问题标题】:Reference an integer resource for Android manifest versionCode引用 Android 清单版本代码的整数资源
【发布时间】:2011-05-16 13:22:53
【问题描述】:

在我的 Android 应用中:

  • 在构建过程中使用脚本生成递增的构建编号(整数)(使用来自 SVN 修订版的整数)
  • 我生成了一个定义为整数的 Android 资源文件: 399

  • 我使用上面生成的资源在 UI 上展示了这一点

  • 我在 Manifest 中为 versionCode 元素引用整数

一切正常,但是当我尝试上传到 Market 时出现此错误:

“文件无效:获取'android:versionCode'属性时出错:属性不是整数值”

问题: 对于 Market,versionCode 是否必须是直接在清单中的“文字”整数,或者是否有某种方法可以引用外部生成的整数而不是一直(手动或自动)触摸我的清单。

谢谢 (顺便说一句:我刚刚意识到该方案可能会导致我在发布补丁时出现问题,所以我可能会生成更大的数字或其他东西,但仍然希望得到这个问题的答案)

【问题讨论】:

    标签: android android-manifest google-play


    【解决方案1】:

    最后,这就是我所做的:

    我在我的版本控制系统中使用此格式的版本号创建了一个标签

    X.YY.ZZ 其中它们都是整数,例如 1.20.00,并保留最后两位数以用于计划外的补丁版本,可能会在发布更高版本后在分支上发布......

    因此,如果我先发布 1.20.00 再发布 1.23.00,我仍然可以返回并为 1.22.00 发布一个名为 1.22.01 的补丁。

    我有一个构建步骤,它获取标签名称并为我在 UI 中使用的 Android 生成字符串资源“1.22.00”。它还将它生成为数字 12200,我将其用作版本号。

    但是,我不尝试直接在清单中包含这个版本号,我通过为版本代码设置一个 ant 属性来为包设置它,如果定义了 ant 构建会拾取该属性并用于创建 .apk。

    所以我得到的 Android Market 整数一直在增加,但旧版本的用户可以安装补丁版本,但如果你有更新的官方版本,则无法安装补丁版本。

    即如果您有 1.20.00,则可以安装补丁 1.20.01,但如果用户已移至 1.23.00,则他们无法安装 1.20.01 补丁...

    设置你可以使用的属性; project.setProperty("version.name", versionName); project.setProperty("version.code", versionCode);

    如果设置了这些属性,那么 Android 构建系统(旧的和新的)将获取属性值并使用它,不需要做任何其他特殊的事情。

    只需确保使用预构建/预编译 ant 扩展点之一进行设置。

    在 custom_rules.xml 的新构建系统(Platform Tools >= 12)中我已经添加了

    <project name="custom" default="help">      
        <import file="build_info.xml" />
        <target name="-pre-build" depends="build-info" />
    </project>
    

    其中 build_info 是我自己的 ant 项目,它根据标签名称计算版本名称/编号(如果您在标签中构建......)。

    【讨论】:

    • 你是如何在apk中设置versionCode的?
    • 我现在看到了
      31415'
      触发 aapt 在 'main_rules.xml' 中设置的版本代码
    • 使用那个方案有点危险。例如 12200 可能是 1.22.00,如您的示例所示,但也可能是 12.20.0。如果您小心地始终允许版本仅达到 99 并且始终将数字填充为 0,那么它可以工作。否则您的应用可能不会更新,因为较新的版本似乎具有较低的 rev #。
    • @runamok,转换成整数(012200 -> 12200)时左边的0不会丢失吗?
    • @runamock 当然,我只是把它放在那里是为了清楚它如何映射到数字 1.20.00 与 10.20.00 的主要部分的两位数,并且更容易判断是否是版本“1”或“10”
    【解决方案2】:

    根据我阅读的所有内容,Google Play 目前要求 android:versionCode 是 32 位整数,而不是资源。和你一样,我也用 @integer 资源初始化 android:versionCode。

    为了解决市场的限制,我们的构建脚本解析 @integer 值并将其直接注入到 android:versionCode 以进行发布构建。这对我们来说是一个简单的解决方案。使用 ant.properties 和 build.xml -pre-build 选项实现这一目标的方法要复杂得多,但是,这超出了我的需要。

    有关更多信息,请参阅:

    为 Android 清单版本代码引用整数资源 https://groups.google.com/d/msg/android-developers/1dt0yxyNPsk/c9c6PlG84iwJ

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 2019-07-22
      • 1970-01-01
      • 2021-02-16
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多