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

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

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

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

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

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

解答

将此添加到您的 *.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 配置为通过 JENKINSu003d1 和 SVN_REVISION。当它去构建时,它会在构建之前修改AndroidManifest.xml

我不知道这是否适用于 Mac 上的 xbuild,取决于是否实现了XmlPoke。我应该为此写一篇博文。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐