Zipalign AzureDevOps Android Pipeline — ошибка с кодом выхода 1

Я не уверен, что произошло, раньше все шло нормально с нашим пайплайном в Azure Devops.

Но совсем недавно каждая сборка терпела неудачу при zipaligning... APK zipaligning и сборка прекрасно работают при использовании Android Studio IDE, но не работают в конвейере Azure Devops.

Вот начало zipalign из Azure:

Starting: AndroidSigning
==============================================================================
Task         : Android signing
Description  : Sign and align Android APK files
Version      : 3.176.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/android-signing
==============================================================================
"C:\Program Files (x86)\Android\android-sdk\build-tools\29.0.2\zipalign.exe" -v 4 D:\a\1\s\app\build\outputs\apk\release\app-release-unsigned.apk.unaligned D:\a\1\s\app\build\outputs\apk\release\app-release-unsigned.apk
Verifying alignment of D:\a\1\s\app\build\outputs\apk\release\app-release-unsigned.apk (4)...

И вот сообщение об ошибке в конце:

Verification FAILED
##[error]Error: The process 'C:\Program Files (x86)\Android\android-sdk\build-tools\29.0.2\zipalign.exe' failed with exit code 1

Наконец, вот контекст нашего пайплайна YAML:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: Gradle@2
  inputs:
    workingDirectory: ''
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx5120m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8'
    publishJUnitResults: false
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'assembleRelease'

- task: AndroidSigning@3
  inputs:
    apkFiles: '**/*.apk'
    apksign: true
    apksignerFile: C:\Program Files (x86)\Android\android-sdk\build-tools\29.0.2\apksigner.bat
    apksignerKeystoreFile: 'keystore.jks'
    apksignerKeystorePassword: '$(jarsignerKeystorePassword)'
    apksignerKeystoreAlias: 'alias'
    apksignerKeyPassword: '$(jarsignerKeyPassword)'
    apksignerArguments: --out $(Build.SourcesDirectory)/app/build/outputs/apk/release/app.apk
    zipalign: true
    zipalignFile: C:\Program Files (x86)\Android\android-sdk\build-tools\29.0.2\zipalign.exe

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Вот журнал отладки сборки, в которой не удалось опубликовать артефакт, если установлено значение AndroidSigning @ 2 (jarsigner вместо apksigner)

2020-11-02T15:49:43.9428841Z ##[debug]Evaluating condition for step: 'PublishBuildArtifacts'
2020-11-02T15:49:43.9430851Z ##[debug]Evaluating: SucceededNode()
2020-11-02T15:49:43.9431429Z ##[debug]Evaluating SucceededNode:
2020-11-02T15:49:43.9432781Z ##[debug]=> True
2020-11-02T15:49:43.9433320Z ##[debug]Result: True
2020-11-02T15:49:43.9433928Z ##[section]Starting: PublishBuildArtifacts
2020-11-02T15:49:43.9558720Z ==============================================================================
2020-11-02T15:49:43.9559237Z Task         : Publish build artifacts
2020-11-02T15:49:43.9559565Z Description  : Publish build artifacts to Azure Pipelines or a Windows file share
2020-11-02T15:49:43.9559869Z Version      : 1.158.3
2020-11-02T15:49:43.9560103Z Author       : Microsoft Corporation
2020-11-02T15:49:43.9560457Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/publish-build-artifacts
2020-11-02T15:49:43.9560873Z ==============================================================================
2020-11-02T15:49:43.9627178Z ##[debug]Using node path: C:\agents\2.175.2\externals\node\bin\node.exe
2020-11-02T15:49:44.1659280Z ##[debug]agent.TempDirectory=D:\a\_temp
2020-11-02T15:49:44.1690792Z ##[debug]loading inputs and endpoints
2020-11-02T15:49:44.1701762Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN
2020-11-02T15:49:44.1714168Z ##[debug]loading ENDPOINT_AUTH_SCHEME_SYSTEMVSSCONNECTION
2020-11-02T15:49:44.1717582Z ##[debug]loading ENDPOINT_AUTH_SYSTEMVSSCONNECTION
2020-11-02T15:49:44.1719830Z ##[debug]loading INPUT_ARTIFACTNAME
2020-11-02T15:49:44.1721291Z ##[debug]loading INPUT_ARTIFACTTYPE
2020-11-02T15:49:44.1722675Z ##[debug]loading INPUT_PARALLEL
2020-11-02T15:49:44.1723961Z ##[debug]loading INPUT_PARALLELCOUNT
2020-11-02T15:49:44.1725345Z ##[debug]loading INPUT_PATHTOPUBLISH
2020-11-02T15:49:44.1729968Z ##[debug]loading SECRET_JARSIGNERKEYPASSWORD
2020-11-02T15:49:44.1732034Z ##[debug]loading SECRET_JARSIGNERKEYSTOREPASSWORD
2020-11-02T15:49:44.1733774Z ##[debug]loading SECRET_SYSTEM_ACCESSTOKEN
2020-11-02T15:49:44.1739927Z ##[debug]loaded 11
2020-11-02T15:49:44.1753983Z ##[debug]Agent.ProxyUrl=undefined
2020-11-02T15:49:44.1755481Z ##[debug]Agent.CAInfo=undefined
2020-11-02T15:49:44.1756003Z ##[debug]Agent.ClientCert=undefined
2020-11-02T15:49:44.1756464Z ##[debug]Agent.SkipCertValidation=undefined
2020-11-02T15:49:44.1769886Z ##[debug]check path : D:\a\_tasks\PublishBuildArtifacts_2ff763a7-ce83-4e1f-bc89-0ae63477cebe\1.158.3\task.json
2020-11-02T15:49:44.1771713Z ##[debug]adding resource file: D:\a\_tasks\PublishBuildArtifacts_2ff763a7-ce83-4e1f-bc89-0ae63477cebe\1.158.3\task.json
2020-11-02T15:49:44.1772325Z ##[debug]system.culture=en-US
2020-11-02T15:49:44.1792494Z ##[debug]PathtoPublish=D:\a\1\a\app\build\outputs\apk\release\
2020-11-02T15:49:44.1793208Z ##[debug]check path : D:\a\1\a\app\build\outputs\apk\release\
2020-11-02T15:49:44.1821823Z ##[debug]task result: Failed
2020-11-02T15:49:44.1857082Z ##[error]Publishing build artifacts failed with an error: Not found PathtoPublish: D:\a\1\a\app\build\outputs\apk\release\
2020-11-02T15:49:44.1867823Z ##[debug]Processed: ##vso[task.issue type=error;]Publishing build artifacts failed with an error: Not found PathtoPublish: D:\a\1\a\app\build\outputs\apk\release\
2020-11-02T15:49:44.1869433Z ##[debug]Processed: ##vso[task.complete result=Failed;]Publishing build artifacts failed with an error: Not found PathtoPublish: D:\a\1\a\app\build\outputs\apk\release\
2020-11-02T15:49:44.1890809Z ##[section]Finishing: PublishBuildArtifacts

person buradd    schedule 28.10.2020    source источник
comment
Привет @buradd, Не могли бы вы попробовать выполнить задачу AndroidSigning@2, а затем поделиться результатом здесь? Кроме того, пожалуйста, также поделитесь полным журналом здесь. Спасибо   -  person Vito Liu    schedule 29.10.2020
comment
Привет, @VitoLiu-MSFT. Когда я меняю AndroidSigning@3 на AndroidSigning@2, происходит сбой во время предварительной работы со следующей ошибкой: ##[ошибка]Ошибка: Требуется ввод: keystoreFile   -  person buradd    schedule 29.10.2020
comment
@VitoLiu-MSFT, я вижу, что AndroidSigning@2 использует jarsigner вместо apksigner.. поэтому я внес коррективы, и задача подписи проходит, но затем происходит сбой в PublishBuildArtifacts - ##[error]Публикация артефактов сборки завершилась с ошибкой: Not нашел PathtoPublish: D:\a\1\a\app\build\outputs\apk\release\   -  person buradd    schedule 29.10.2020
comment
Привет @buradd, извините, что отвечаю так поздно, не могли бы вы установить для переменной system.debug значение true, а затем поделиться здесь полными журналами подробностей? Нам нужно проверить журнал и помочь вам локализовать проблему. Спасибо.   -  person Vito Liu    schedule 02.11.2020
comment
@VitoLiu-MSFT нет проблем - я отредактировал свой пост с журналом ошибки отладки AndroidSigning@2 в PublishArtifact. Подписание проходит нормально, но потом не может найти выходную папку? При использовании AndroidSigning@3 задание AndroidSigning не проходит, многие проверки возвращаются как (ПЛОХО - 2), (ПЛОХО - 3) и т. д. в основном файлы /res/, все проходит нормально с (ОК) при использовании AndroidSigning@2. Имейте в виду, что мы уже давно используем этот пайплайн, и у нас было много успешных сборок, но теперь он даже не будет строить старые ветки, которые, как мы знаем, раньше нормально строились с пайплайном.   -  person buradd    schedule 02.11.2020


Ответы (1)


Итак, пройдясь туда-сюда с некоторыми в ветке проблем с задачами конвейеров лазури github, я обнаружил, что, изменив мой плагин Android gradle с 4.1.0+ (это было на 4.1.1) на 4.0.0 в моем уровне проекта gradle.settings , сборка лазурного конвейера завершится успешно.

Сам Gradle остался на версии 6.5, но для плагина Android gradle была установлена ​​версия 4.0.0, чтобы обеспечить его успешную сборку.

Затем другой указал на эту ветку в системе отслеживания проблем Google: https://issuetracker.google.com/issues/162117652

Похоже, что zipalign больше не нужен с последним плагином Android 4.1.0+. Я предполагаю, что плагин Android gradle 4.1.0+ уже выполняет zipalign apk, поэтому любой последующий вызов zipalign покажет сбой, поскольку он уже zipaligned.

Таким образом, окончательное решение здесь состояло в том, чтобы сохранить последнюю версию плагина Android gradle (4.1.1) и изменить zipalign: true на zipalign: false в моей задаче Azure Pipeline AndroidSigning@3.

Вы можете проверить, действительно ли ваш APK выровнен по zip-архиву, даже если в конвейере для параметра zipalign установлено значение false, выполнив следующее:

zipalign -c -v 4 /path/to/app-release.apk.

вместо того, чтобы пытаться изменить файл, эта команда просто проверит zipaling в apk и покажет, прошла ли проверка успешно (apk успешно zipaligned).

person buradd    schedule 23.11.2020
comment
Спасибо за этот ответ! Это мне очень помогло. - person ChristianB; 27.01.2021