3

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

4

3 回答 3

9

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

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

要作为命令行参数传递,

 <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构建,

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:如何对命令行版本进行版本控制?

于 2013-01-07T19:56:10.350 回答
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}。由于它们是属性,因此您还可以在命令行上或作为持续集成设置的一部分指定它们。

于 2013-01-07T19:58:38.003 回答
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
于 2014-10-22T09:01:40.423 回答