Android Azure Devops Gradle 使用 zipalign 签名 apk 时构建失败,退出代码 1

Android Azure Devops Gradle build failing on signing apk w zipalign, exit code 1

我有一个 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,因为使用生成签名的 APK 向导还不清楚。我假设它会为你做,而不问?)。 无论如何,我当然会尝试在 DevOps 中根据对 master 分支的拉取请求自动化构建部署,这是我在其他项目中通常采用的方式。

这是我的天蓝色-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) 各种资源的消息。不确定这是否与错误本身有关。

我遇到了完全相同的问题,结果发现我的发布版本仍设置为可调试。在我的 gradle 文件中设置“debuggable false”解决了它。

请查看此处的讨论。 https://github.com/microsoft/azure-pipelines-tasks/issues/13863。似乎在最新的 Gradle 版本中,apk 是使用自动对齐 apk 的新库 (zipflinger) 构建的,并且在尝试对齐已经对齐的 apk 时 zipalign 失败(zipalign 验证 returns在初始 apk 上成功)... 这听起来很奇怪,但显然不再需要 zipalign。

所以解决方案是在您的 zure-piplelines.yml

中禁用 zipalign
 - task: AndroidSigning@3
  inputs:
    apkFiles: '**/*.apk'
    ...
    zipalign: false