zoukankan      html  css  js  c++  java
  • Xamarin.Android VSTS 持续集成

    这些天做了一个基于 VSTS 的 Xamarin.Android的持续集成,这里分享下

    Build Agent 环境需求

    DotNetFramework        

    msbuild        

    visualstudio        

    AndroidSDK        

    JDK

    Xamarin.Android

    Build的部分分为以下步骤:

    clip_image002

    1. 还原NuGet包

    a. 这步之所以存在,原因为我使用了Xamarin.Android进行编译,而没有直接对解决方案使用MSBUILD进行编译,所以需要单独还原一下NuGet包

    b. 解决方案路径填写 ***.sln 即可

    2. 替换版本号

    a. Xamarin.Android的版本号与AndroidManifest.xml中的versionName与versionCode有关,我在这里使用Powershell将版本号替换成了新的

    b. 此脚本传递参数为当前源代码路径,$(Build.SourcesDirectory)

    c. 脚本代码:

        param(
    [string]$path ) if([String]::IsNullOrEmpty($path)){ $path= $($MyInvocation.MyCommand.Definition.Replace("buildchangeVersion.ps1" ,"")) } write $path $pattern='android:versionName="[^"]+"' $version=[String]::Format('android:versionName="{0}.{1}"',[DateTime]::Now.Year-2013,[DateTime]::Now.ToString("M.d.H")) $filePath = [System.IO.Path]::Combine($path,"sourceAndroidAppProjectProperties") write $filePath ls $filePath *.xml | %{sc -Path $_.FullName -Value $($(gc $_.FullName) -replace $pattern,$version) }

    3. 编译Android程序

    a. 使用TSTS自带的Xamarin.Android进行编译

    b. 输出目录我设定在了$(Agent.BuildDirectory)in$(BuildConfiguration)

    c. 配置使用用户入队时的配置$(BuildConfiguration)

    4. 获取编译Andorid的AndroidManifest数据,例如 packagename/label/versionName等

    a. 这个是我自己写的一个VSTS扩展,用于获取一些应用的基本信息,并存储在对应的变量中,以备后续步骤使用(生成ReleaseNote时)

    b. https://github.com/chsword/zou-vsts-tasks

    5. 对编译好的Android apk进行签名

    a. 使用 VSTS自带的Android签名 功能进行签名

    b. 需要勾选 为APK签名,并填入Keystore密码、Keystore别名,密钥密码

    c. Jarsigner 参数: -verbose -sigalg MD5withRSA -digestalg SHA1

    d. 勾选Zipalign

    6. 删除多余的文件

    a. 因为编译时 DLL 也会被复制过来,所以需要删除下多余的文件,只留APK

    7. 生成 ReleaseNotes

    a. 使用的是 rfennell 的生成ReleaseNote的VSTS扩展 https://github.com/rfennell/vNextBuild/tree/master/Extensions/GenerateReleaseNotes

    b. 我这里将 ReleaseNotes,生成了一个 MarkDown :ReleaseNotes.md,以备发布时使用

    8. 生成预发布脚本

    a. 我提前写了一个预发布Powershell脚本用于将APK发布到Bugly,主要是调用 CURL,这里就不详述了

    这样,就可以进行 手动或自动集成的操作

    clip_image004

    小技巧:

    关于敏感数据,一些敏感数据,比如签名时的密码、其实可以在 生成定义 的 变量 中进行定义,并设置为加密变量 ,这样在传输或编辑时,都将无法查看此变量

    clip_image006

    引用:

    Vsts build 中可以使用的变量:

    https://www.visualstudio.com/zh-cn/docs/build/define/variables

    Bugly api文档

    https://bugly.qq.com/docs/user-guide/api-beta/?v=20160824161206

    获取 Xamarin.Android AndroidManifest 信息

    https://github.com/chsword/zou-vsts-tasks

  • 相关阅读:
    异常详细信息: System.Data.SqlClient.SqlException:过程或函数 需要参数 但未提供该参数。
    silverlight error message,ErrorCode:2254 ErrorCode: 1001
    每日英语 词汇
    每日词汇
    电子商务网站用户体验根据用户的习惯进行推荐
    刚做项目的时候
    silverlight 不可
    在Centos6上安装RabbitMQ的过程(有点坑)
    SpringBoot整合Redis
    在IDEA中创建工程并将工程添加至Git
  • 原文地址:https://www.cnblogs.com/chsword/p/xamarin_android_ci.html
Copyright © 2011-2022 走看看