我们有一个独特的情况,我们正在将中国的Xamarin.Android应用程序部署到33个应用程序商店.因此,我们的解决方案有33个应用程序项目,我们设置Jenkins(在Windows上运行)打包并签署我们所有的apks(否则制作构建会很疯狂).
我们还需要使用Jenkins的${SVN_REVISION}值修改清单文件中的android:versionCode和android: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="<Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' />" Query="manifest/@android:versionCode" Value="$(SVN_REVISION)" />
<XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="<Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' />" Query="manifest/@android:versionName" Value="2.0.$(SVN_REVISION)" />
</Target>
我让Jenkins配置为传递JENKINS = 1和SVN_REVISION.在构建时,它会在构建之前修改AndroidManifest.xml.
我不知道这是否适用于Mac上的xbuild,取决于是否实现了XmlPoke.我应该做一篇关于此的博客文章.