Xamarin.Android android:versionCode android:versionName - 来自Jenkins Build Server

时间:2014-01-08 16:34:14

标签: android jenkins msbuild xamarin.android xamarin

我们有一个独特的情况,我们将中国的Xamarin.Android应用程序部署到33个应用程序商店。因此,我们的解决方案有33个应用程序项目,我们设置Jenkins(在Windows上运行)打包并签署所有apks(否则制作构建会很疯狂)。

我们还需要使用Jenkins的android:versionCode值修改清单文件中的android:versionName${SVN_REVISION}。有没有办法将这些值命令行传递给MSBuild?

通常我们会手动编辑这个值,但由于有太多的应用程序项目,所以不可能。

我们的构建参数现在在Jenkins中看起来像这样:

/p:Configuration=Release;AndroidKeyStore=True;AndroidSigningKeyStore=ourkeystore.keystore;AndroidSigningStorePass=ourpassword;AndroidSigningKeyAlias=ouralias;AndroidSigningKeyPass=ourpassword /t:SignAndroidPackage 

2 个答案:

答案 0 :(得分:7)

在结尾</Project>标记之前将其添加到* .csproj文件的末尾:

  <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 :(得分:1)

没有。您必须自己操纵android:versionCodeandroid:versionName。就个人而言,我使用rake任务来处理这个特定的细节。