【问题标题】:How to automate version code incrementing in AndroidManifest?如何在 AndroidManifest 中自动增加版本代码?
【发布时间】:2011-06-23 09:01:49
【问题描述】:

我有上传到 Subversion/SVN 存储库的应用程序。是否可以使用脚本以某种方式更改存储在AndroidManifest 中的应用程序版本代码?我的意思是在结帐/更新期间/之后?

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="mypackage"
          android:versionCode="100000"
          android:versionName="1.0">

【问题讨论】:

    标签: android svn version-control versioning


    【解决方案1】:

    SVN 有keyword substitution,您可以使用它来将修订号放入文件中。但是,这将导致清单文件本身上次更改时的修订,这不是您想要的。

    实现您想要的最佳方式是从您的构建脚本中调用svnversion,然后将输出嵌入到清单文件中。您可以在版本控制下拥有一个manifest.template 文件,您的构建脚本可以使用它来生成真正的清单文件。在模板中放一个占位符,用svnversion得到的修订号代替。

    编辑:在 Eclipse 中你可能会use an Ant script, and invoke it before the normal build。链接的示例会生成一个带有修订号的类文件,但您也可以以非常相似的方式生成一个清单文件。

    【讨论】:

    • 如果他们使用 Eclipse,有什么想法可以做到这一点吗?
    • 我也很高兴知道如何使用 Intellij IDEA
    • @barmaley:IDEA 对执行 ant 脚本也有类似的支持,请参阅 Intellij And and Maven Integration
    【解决方案2】:

    您可以在构建时使用默认 Android 构建脚本提供的 xpath Ant 目标来获取当前值,然后使用 Ant 替换。

    【讨论】:

      【解决方案3】:

      我通过添加一个额外的构建目标来做到这一点 - 因此版本代码在您构建项目时递增,而不是在您提交到 SVN 时递增。这些是让它在 IntelliJ IDEA 中工作的说明。

      首先,在项目的根目录中添加一个名为svn-revision.build.xml 的新文件,其内容如下:

      <project default="svn-revision">
          <target name="svn-revision">
              <exec executable="sh" outputproperty="revision">
                  <arg value="-c" />
                  <arg value="svnversion | sed -e 's/^[^:]*://;s/[A-Za-z]//'" />
              </exec>
              <echo>Revision (app): ${revision}</echo>
              <replaceregexp file="AndroidManifest.xml" match='android:versionCode="([^".]+)(\.[^"]*)?"' replace='android:versionCode="${revision}"' />
          </target>
      </project>
      

      然后在菜单中转到View &gt; Tools &gt; Ant Build,然后按窗口中的小+ 按钮并添加新创建的文件。单击 Ant Build 窗口中的绿色“运行”按钮将立即运行脚本。要让脚本在每次构建时都运行,您需要将“svn-revision”目标设置为默认目标。

      【讨论】:

        【解决方案4】:

        SVN 方法很好,但不一定适合所有人。我确实更喜欢控制应用程序版本名称和版本代码增量,所以我做了我自己的 Java 简单应用程序来做到这一点

        特点:

        • versionName 应该是 ma​​jor.minor.point(根据 Android 文档的建议)
        • versionName 可以保留、重置为 1.0.0 或递增(其中一个部分和尾随部分设置为 0)
        • versionCode 将替换为 Unix 时间

        可在此处获得: android manifest build number

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-16
          • 2013-05-01
          • 2011-10-09
          • 2011-01-10
          • 2011-09-11
          • 1970-01-01
          相关资源
          最近更新 更多