2011-02-08 59 views
9

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

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

回答

4

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

要达到目标的最佳方法是从构建脚本中调用svnversion,并将输出嵌入到清单文件中。您可以在版本控制下使用manifest.template文件,您的构建脚本可以使用该文件生成真实的清单文件。在模板中放置一个占位符字,并用svnversion获取的修订号替换它。

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

+0

一个会如何,如果他们使用Eclipse做任何想法? – Felix 2011-02-08 13:00:18

+0

我也很高兴知道如何使用Intellij IDEA – barmaley 2011-02-09 06:22:32

0

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

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”目标设置为默认目标。

0

SVN方法很好,但不一定适合每个人。我不喜欢对应用程序和的versionName增量的versionCode控制,我做了我自己的Java简单的应用程序做

特点:

  • 的versionName应该是major.minor.point(由Android DOC)
  • 的versionName可以保存为宜,复位到1.0.0,或增加(它的一个单个部分和后沿部分(一个或多个)
  • 的versionCode将由替换被/被设置为0) Unix时间

可在这里: android manifest build number