当我使用 Ant 在命令行中构建 Android 项目时,我想更新 AndroidManifest.xml 文件中的 android:versionCode 和 android:versionName 。有没有办法可以使用属性文件注入版本号?
问问题
4973 次
3 回答
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构建,
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=".*""/>
<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}
。由于它们是属性,因此您还可以在命令行上或作为持续集成设置的一部分指定它们。
于 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 回答