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

  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/chsword/p/xamarin_android_ci.html
Copyright © 2011-2022 走看看