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

如何在AndroidManifest中自动增加版本代码?,android,svn,version-control,versioning,Android,Svn,Version Control,Versioning,我有一个上传到Subversion/SVN repo的应用程序。是否可以使用脚本以某种方式更改存储在AndroidManifest中的应用程序版本代码?我的意思是在结账/更新期间/之后 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="mypackage" android:versionCode="100000" androi

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

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

SVN提供了一个可用于将修订号放入文件中的文件。但是,这将导致在清单文件本身上次更改时进行修订,这不是您想要的

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


编辑:在Eclipse中,您可能会。链接的示例生成了一个带有修订号的类文件,但您也可以以非常类似的方式生成清单文件。

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

我通过添加一个额外的构建目标实现了这一点,因此在构建项目时,版本代码会增加,而不是在提交给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>

修订版(应用程序):${Revision}

然后在菜单中转到
视图>工具>Ant Build
,然后按下窗口中的小
+
按钮并添加新创建的文件。单击Ant Build窗口中的绿色“run”按钮将立即运行脚本。要使脚本在每次构建时运行,需要将“svn修订版”目标设置为默认目标。

svn方法很好,但不一定适合所有人。我更喜欢对应用程序versionName和versionCode increment进行控制,所以我开发了自己的Java simple应用程序来实现这一点

特点:

  • versionName应该是major.minor.point(根据Android文档的建议)
  • versionName可以保留、重置为1.0.0或递增(其中一个部分和尾部部分设置为0)
  • versionCode将被Unix时间取代
可从以下网址获得:

如果使用Eclipse,您对如何实现这一点有什么想法吗?我也很高兴知道如何使用Intellij实现这一点IDEA@barmaley:IDEA对执行ant脚本有类似的支持,请参阅