Android:如何在ant命令行构建期间传递版本信息?

时间:2013-01-04 17:08:20

标签: android android-build

当我使用Ant在命令行中构建Android项目时,我想在AndroidManifest.xml文件中更新android:versionCode和android:versionName。有没有我可以使用属性文件注入版本号?

3 个答案:

答案 0 :(得分:9)

您可以通过多种方式设置版本信息,

  1. 作为命令行参数传递
  2. 使用属性文件。
  3. 要作为命令行参数传递,

     <target name="set-version-using-commandline-args">
        <!-- Load properties from "version.properties" file -->     
        <replaceregexp file="AndroidManifest.xml" match="android:versionCode(.*)" 
            replace='android:versionCode="${Version.Code}"'/>
        <replaceregexp file="AndroidManifest.xml" match="android:versionName(.*)" 
            replace='android:versionName="${Version.Name}"'/>       
    </target>
    

    然后像这样运行ant build,

    ant -DVersion.Code=100 -DVersion.Name=5.0.0.1201011 debug 
    

    如果要使用属性文件传递版本信息,请使用此目标

     <target name="set-version-using-file">
        <!-- Load properties from "version.properties" file -->             
        <property file="version.properties" />
    
        <replaceregexp file="AndroidManifest.xml" match="android:versionCode(.*)"
            replace='android:versionCode="${Version.Code}"'/>
        <replaceregexp file="AndroidManifest.xml" match="android:versionName(.*)"
            replace='android:versionName="${Version.Name}"'/>       
    </target>
    

    有关详细说明,请参阅此博客文章。 Android: How to version command line build?

答案 1 :(得分:2)

当然!首先,创建属性文件。说,spiffy.properties。接下来,您将使用Android Ant构建的custom_rules.xml文件。如果您还没有,请创建它。

在该文件的顶部附近,添加如下所示的行:

<property file="spiffy.properties"/>

现在,向-pre-build目标添加一个依赖项来调用它:

<target name="-set-manifest-values">
  <replaceregexp file="AndroidManifest.xml">
    <regexp pattern="android:versionName=&quot;.*&quot;"/>
    <substitution expression="android:versionName=&quot;${version.name}&quot;"/>
  </replaceregexp>
  <replaceregexp file="AndroidManifest.xml">
    <regexp pattern="android:versionCode=&quot;.*&quot;"/>
      <substitution expression="android:versionCode=&quot;${build.number}&quot;"/>
  </replaceregexp>
</target>

您的版本名称和内部版本号分别由${version.name}${build.number}指定。由于它们是属性,您还可以在命令行上或作为持续集成设置的一部分指定它们。

答案 2 :(得分:0)

通过Ruby更新AndroidManifest,请参阅https://gist.github.com/cybertk/24ce4d20d76f9d6a16c6

    File.open('AndroidManifest.xml', 'r+') do |f|
        manifest = f.read

        build = ENV['TRAVIS_BUILD_NUMBER'] || 0
        # Update version
        manifest = manifest.gsub(
            /android:versionCode=".*"/, "android:versionCode=\"#{build}\"")

        # Write back
        f.rewind
        f.truncate(0)
        f.write(manifest)
    end