我不确定发生了什么,过去我们在Azure Devops中的流水线构建一切都很好。
但就在最近,我们在zipaligning上的每一个构建都失败了。APK在使用Android Studio IDE时可以很好地对齐和构建,但在Azure Devops管道中会失败。
这是来自Azure的zipalign的开始:
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发布于 2020-11-24 01:26:36
因此,在与github azure pipeline任务发布线程上的一些人来回讨论之后,我发现通过在我的项目级gradle.settings中将我的Android gradle插件从4.1.0+ ( 4.1.1)更改为4.0.0,azure管道构建将会成功完成。
Gradle本身保持在6.5版本,但Android gradle插件被设置为4.0.0以使其成功构建。
然后,另一个人在谷歌问题跟踪器上指出了这个主题:https://issuetracker.google.com/issues/162117652
从最新的Android gradle插件4.1.0+开始,zipalign似乎不再是必需的。我猜Android gradle plugin 4.1.0+已经对apk进行了zipalign,所以任何后续对zipalign的调用都会显示一个失败,因为它已经是zipalign了。
所以这里的最终解决方案是保留最新版本的Android gradle插件(4.1.1),并在我的Azure流水线AndroidSigning@3任务中将zipalign: true改为zipalign: false。
您可以通过运行以下命令来检查您的APK是否确实是zipalign的,即使在管道中将zipalign设置为false:
zipalign -c -v 4 /path/to/app-release.apk.此命令不是尝试修改文件,而是简单地验证apk中的压缩,并显示验证是否成功(apk成功地对齐了zipaling )。
https://stackoverflow.com/questions/64577108
复制相似问题