当我使用Ant在命令行中构建Android项目时,我想在AndroidManifest.xml文件中更新android:versionCode和android:versionName。有没有我可以使用属性文件注入版本号?
答案 0 :(得分:9)
您可以通过多种方式设置版本信息,
要作为命令行参数传递,
<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=".*""/>
<substitution expression="android:versionName="${version.name}""/>
</replaceregexp>
<replaceregexp file="AndroidManifest.xml">
<regexp pattern="android:versionCode=".*""/>
<substitution expression="android:versionCode="${build.number}""/>
</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