Google Play 上通过 VSTS 使用 Xamarin 的版本代码
Version code with Xamarin via VSTS on Google Play
在 Android 移动应用程序中 以编程方式更新版本代码和版本名称 是否有可能,或者最好的方案是什么?
对于我们使用的移动应用程序:
- 用于 Android 开发的 Xamarin
- Visual Studio 用于版本控制 (Git)、构建、测试的团队服务
并释放。
- Google为分配而玩
我们的持续集成流程如下:
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 中。
另一件事是:我们正在与该项目的多个开发人员合作,因此手动更新可能会导致竞争情况,所以最好的方法是(我们认为)在 之前更新版本号发布.
我想到的事情:
- 将版本号存储在 VSTS 中的某处
- 使用内部版本号作为版本号
- 通过
开发者 API 来自 Google Play
但仍然有点卡住,正在寻找通用/最佳实践
卡斯帕
我采用了在 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。最后,我用于替换文件中文本的脚本是一个任务组,我可以在任何构建定义中使用它。
你最终得到这样的结果:
在 Android 移动应用程序中 以编程方式更新版本代码和版本名称 是否有可能,或者最好的方案是什么?
对于我们使用的移动应用程序:
- 用于 Android 开发的 Xamarin
- Visual Studio 用于版本控制 (Git)、构建、测试的团队服务 并释放。
- Google为分配而玩
我们的持续集成流程如下:
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 中。
另一件事是:我们正在与该项目的多个开发人员合作,因此手动更新可能会导致竞争情况,所以最好的方法是(我们认为)在 之前更新版本号发布.
我想到的事情:
- 将版本号存储在 VSTS 中的某处
- 使用内部版本号作为版本号
- 通过 开发者 API 来自 Google Play
但仍然有点卡住,正在寻找通用/最佳实践
卡斯帕
我采用了在 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。最后,我用于替换文件中文本的脚本是一个任务组,我可以在任何构建定义中使用它。
你最终得到这样的结果: