首页 > 解决方案 > 如何使用 azure 管道生成 .AAB 文件并签署 Android 应用程序包

问题描述

我想使用 Azure 管道生成一个 Android 应用程序包 (.aab) 文件,并在生成 Android 应用程序包文件时遇到问题。

我已经使用下面的 Gradle 任务来生成和签署 .aab 文件。但是,它会生成 .APK 文件。我想生成 .aab 文件。

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'buildRelease'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    sonarQubeRunAnalysis: false
    spotBugsAnalysis: false

这是脚本,我使用 jarsigner 对 .aab 文件进行签名:

- task: CmdLine@2
  displayName: 'Signing and aligning AAB file(s) app\build\outputs\bundle\release\app-release.aab'
  inputs:
    script: 'jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore $(KeyStoreFile.secureFilePath) -storepass $(StorePassword) -keypass $(KeyPassword) $(system.defaultworkingdirectory)/app/build/outputs/bundle/release/app-release.aab $(KeyStoreAlias)'

标签: androidazureazure-devopsazure-pipelines

解决方案


在 Gradle 任务中:我需要将tasks值 ' buildRelease' 更改为 ' :app:bundleRelease' 以生成 .aab 文件。

这是我用来生成和签署 .aab 文件的 .yaml 文件:

trigger:
- master

pool:
  vmImage: ubuntu-latest

steps:
- task: DownloadSecureFile@1
  inputs:
    secureFile: 'AndroidApp.jks'

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: ':app:bundleRelease'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    sonarQubeRunAnalysis: false
    spotBugsAnalysis: false


- task: CmdLine@2
  displayName: 'Signing and aligning AAB file(s) app\build\outputs\bundle\release\app-release.aab'
  inputs:
    script: 'jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore $(KeyStoreFile.secureFilePath) -storepass $(StorePassword) -keypass $(KeyPassword) $(system.defaultworkingdirectory)/app/build/outputs/bundle/release/app-release.aab $(KeyStoreAlias)'

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)/app/build/outputs/bundle/release/'
    Contents: '**'
    TargetFolder: '$(build.artifactstagingdirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

我在签名任务中创建并使用了以下变量:

KeyStoreFile.secureFilePath
StorePassword
KeyPassword
KeyStoreAlias

推荐阅读