Google Play 上通过 VSTS 使用 Xamarin 的版本代码

Version code with Xamarin via VSTS on Google Play

在 Android 移动应用程序中 以编程方式更新版本代码和版本名称 是否有可能,或者最好的方案是什么?

对于我们使用的移动应用程序:

我们的持续集成流程如下:

Visual studio (xamarin) ->  
Git(Code) -> 
Build -> 
Test(Xamarin testcloud)  -> 
Release Google Play (Alpha/Beta/Production)

目前我必须在提交到Git之前手动更新版本code/name,否则,在流程的另一端,Google会抱怨新的版本号发布的 apk 小于或等于 Play 商店中已有的 apk。

但是,由于我们提交了很多内容并自动构建-发布,我们只想增加版本-code/name 仅在成功发布(以防google 拒绝它)。这导致了这个小困境:因为版本控制所在的 AndroidManifest 已经打包在签名和压缩的 APK 中。

另一件事是:我们正在与该项目的多个开发人员合作,因此手动更新可能会导致竞争情况,所以最好的方法是(我们认为)在 之前更新版本号发布.

我想到的事情:

但仍然有点卡住,正在寻找通用/最佳实践

卡斯帕

我采用了在 building/packaging 应用程序之前修改清单的方法,因为一旦开始构建、打包、签名、zip 对齐,过程就很晚了。

在您的构建定义中,作为第一个任务,在构建任务之前,添加一个将更新清单的任务:

  • 在任务 catalog/Utility 中,添加一个 PowerShell 脚本
  • 设置为内联

参数:

-filePath '$(FilePath)' -oldValue '$(OldValue)' -newValue '$(NewValue)'

脚本:

param ([string] $filePath, [string] $oldValue, [string] $newValue)

Write-Host "---Replacing value $oldValue with new value $newValue in file $filePath---"

$content = [System.IO.File]::ReadAllText($filePath).Replace("$oldValue",  $newValue)

[System.IO.File]::WriteAllText($filePath, $content)

$filePath 参数是您的清单的路径,例如:

$(Build.SourcesDirectory)\MyAndroidApp\Properties\AndroidManifest.xml

$oldValue 参数将是版本代码 属性:

android:versionCode="1"

$newValue 参数将是新版本代码 属性:

android:versionCode="$(AndroidVersionCode)"

“$(AndroidVersionCode)”可以是构建定义中的一个变量,允许在排队时间或构建编号中使用。


我给了你简单的路径,但为了可维护性和方便性,我利用了 VSTS Task groups。最后,我用于替换文件中文本的脚本是一个任务组,我可以在任何构建定义中使用它。

你最终得到这样的结果: