Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1
Posted
技术标签:
【中文标题】Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1【英文标题】:Android Azure Devops Gradle build failing on signing apk w zipalign, exit code 1 【发布时间】:2020-02-14 11:21:32 【问题描述】:我有一个 android 应用程序,我正在尝试在 Azure Devops 中为我们的团队设置 CICD。 但是我无法完成“构建”阶段。 它在“Android 签名”子任务中失败并显示错误消息:
[错误]错误:进程“/Users/vsts/Library/Android/sdk/build-tools/19.1.0/zipalign”失败,退出代码为 1
当我在签名任务中取消选择可选的“zipalign”功能时,它可以工作。但正如我所读到的,您不应该在不先使用 zipalign 的情况下部署应用程序。
该应用是在 Android Studio (Kotlin) 中构建的。我在网上发现的所有类似问题都与 xamarin 有关,我目前没有使用它。
如果相关,我将在 arm64 设备上进行部署。在 Android Studio 中构建和签名是没有问题的(虽然我不确定它是否默认使用 zipalign,因为使用 Generate Signed APK 向导不清楚。我认为它会不问就为你做这件事?)。 无论如何,我当然会尝试根据对主分支的拉取请求在 DevOps 中自动化构建部署,这就是我通常在其他项目中执行的方式。
这是我的 azure-pipelines.yaml
# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android
trigger:
- master
pool:
vmImage: 'macos-latest'
steps:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleDebug'
- task: AndroidSigning@3
inputs:
apkFiles: '**/*.apk'
apksignerKeystoreFile: 'key.jks'
apksignerKeystorePassword: 'XXXX'
apksignerKeystoreAlias: 'key0'
apksignerKeyPassword: 'XXXX'
- task: CopyFiles@2
inputs:
contents: '**/*.apk'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
下面日志的尾部。我收到一堆(BAD - 1-2-3)关于各种资源的消息。不确定这是否与错误本身有关。
【问题讨论】:
您能否向我们展示完整的调试日志?此退出代码非常通用。或许能从中发现异常。 (请设置 System.debug=true) @MerlinLiang-MSFT 对迟到的回复感到抱歉。感谢您的回复。我已将日志的尾部添加到上面的帖子中。这有帮助吗? @RoleyBaxter 你得到这个工作了吗?我也有这个问题。 @WoutervanVegchel 遗憾的是没有。我们不经常发布,该应用程序仅供内部使用。到目前为止,我一直在 Android Studio 中手动构建版本。我相信这可能与在某些文件上返回为“BAD”的压缩状态有关,但我不知道如何解决这个问题。如果你有更好的运气,请告诉我:) 将 assembleDebug 更改为 assembleRelease 对我有用。看到这个答案***.com/a/54357104 【参考方案1】:请查看此处的讨论。 https://github.com/microsoft/azure-pipelines-tasks/issues/13863。似乎在最新的 Gradle 版本中,apk 是使用自动对齐 apk 的新库 (zipflinger) 构建的,并且在尝试对齐已经对齐的 apk 时 zipalign 失败(zipalign 验证在初始 apk 上返回成功).. . 这听起来很奇怪,但显然 zipalign 不再需要了。
所以解决方案是在你的 zure-piplelines.yml 中禁用 zipalign
- task: AndroidSigning@3
inputs:
apkFiles: '**/*.apk'
...
zipalign: false
【讨论】:
【参考方案2】:我遇到了完全相同的问题,结果证明我的发布版本仍然设置为可调试。在我的 gradle 文件中设置“debuggable false”解决了它。
【讨论】:
以上是关于Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1的主要内容,如果未能解决你的问题,请参考以下文章
Android -gradle task -Azure devops - Pipeline No toolchains found in the NDK toolchains folder for A
Azure DevOps ionic Android Build 错误“Build-tool 31.0.0 is missing DX at /usr/local/lib/android/sdk/bu
如何将 Azure DevOps Extension for Azure CLI 与 Azure DevOps Server 一起使用?
Azure DevOps系列Azure DevOps构建.NET EFCore应用程序