Xamarin.Android android:versionCode android:versionName - 来自Jenkins构建服务器

4
我们现在面临一个独特的情况,需要将一款Xamarin.Android应用部署到中国的33个应用商店。因此,我们的解决方案包含了33个应用项目,并且我们在Windows上设置了Jenkins来打包和签名所有apk文件(否则构建过程会变得非常复杂)。
同时,我们还需要修改manifest文件中的android:versionCode和android:versionName,使用来自Jenkins的${SVN_REVISION}值。是否有办法将这些值通过命令行传递给MSBuild?
通常情况下,我们可以手动编辑这些值,但由于涉及到如此多的应用项目,手动编辑显得不太现实。
目前,我们在Jenkins中的构建参数如下:
/p:Configuration=Release;AndroidKeyStore=True;AndroidSigningKeyStore=ourkeystore.keystore;AndroidSigningStorePass=ourpassword;AndroidSigningKeyAlias=ouralias;AndroidSigningKeyPass=ourpassword /t:SignAndroidPackage 
2个回答

9

将以下内容添加到*.csproj文件末尾,在结束的</Project>标签之前:

  <Target Name="BeforeBuild" Condition=" '$(JENKINS)' == '1' ">
    <XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="&lt;Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' /&gt;" Query="manifest/@android:versionCode" Value="$(SVN_REVISION)" />
    <XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="&lt;Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' /&gt;" Query="manifest/@android:versionName" Value="2.0.$(SVN_REVISION)" />
  </Target>

我已经配置好了Jenkins,通过传递JENKINS=1和SVN_REVISION参数。在构建之前,它会修改AndroidManifest.xml文件。

我不知道这是否适用于Mac上的xbuild环境,这取决于是否实现了XmlPoke功能。我应该在博客中发布这个内容。


1
不行,你必须自己操纵android:versionCodeandroid:versionName。个人而言,我使用一个rake任务来处理这个特定的细节。

有很多使用ant的Java示例。我真的只想在命令行中执行它,而不使用脚本,但我想没有其他方法了。 - jonathanpeppers
先生,您放弃得太容易了。我们拥有“MSBuild”的力量。 - jonathanpeppers
我在OS X上使用xbuild构建,通过rake调用。我们将在下次见面时讨论“MSBuild的强大”。 :) - Tom Opgenorth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接