Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1

标签 android gradle azure-devops zipalign android-signing

我有一个 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)关于各种资源的消息。不确定这是否与错误本身有关。
enter image description here

最佳答案

请查看此处的讨论。 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

关于Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434291/

相关文章:

android - 如何在屏幕上拖动时引发事件

android - 加载数据而不暂停 fragment 中的 Activity

android - 你如何设置标签 View 滚动?

android - ionic 安卓构建错误 : "All flavors must now belong to a named flavor dimension"

docker - 您如何使用Gradle Docker插件在Windows中使用提供的Dockerfile构建Docker镜像?

azure - 获取 TFS Webhook 订阅状态

azure - 对组中的用户隐藏 Azure DevOps 中的文件夹名称、板名称和项目设置页面

android - 如何在Android中修复相机预览(surfaceview)的正确纵横比?

java - 使用 Gradle 构建 - 提供的 javaHome 必须是有效目录

azure - 需要使用 Azure DevOps 中的 Web App Deploy 部署到特定服务器文件夹