如何在AndroidManifest中自动化版本代码递增?

时间:2011-02-08 11:24:01

标签: android svn version-control versioning

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

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

4 个答案:

答案 0 :(得分:4)

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

实现所需目标的最佳方法是从构建脚本中调用svnversion,然后将输出嵌入到清单文件中。您可以在版本控制下拥有manifest.template文件,构建脚本可以使用该文件生成真正的清单文件。在模板中放置占位符字,并将其替换为使用svnversion获得的修订号。

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

答案 1 :(得分:4)

我通过添加额外的构建目标来完成此操作 - 因此在构建项目时版本代码会增加,而不是在您提交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 > Tools > Ant Build,然后按下窗口中的小+按钮并添加新创建的文件。单击Ant Build窗口中的绿色“运行”按钮将立即运行该脚本。要在每次构建时运行脚本,您需要将'svn-revision'目标设置为默认目标。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

SVN方法很好,但不一定适合所有人。我更喜欢控制app versionName和versionCode increment ,所以我做了自己的Java简单应用来做到这一点

特点:

  • versionName应为 major.minor.point (由Android doc提供建议)
  • versionName可以保留,重置为1.0.0或递增(其中一个部分和尾随部分设置为0)
  • versionCode将替换为 Unix Time

可在此处获得: android manifest build number