共用方式為


建置、測試及部署Android應用程式

Azure DevOps Services

本快速入門說明如何在 Azure Pipelines 中設定 YAML 管線,以自動建置、測試及部署 Android 應用程式。

必要條件

  • 您有權建立管線和部署應用程式的 Azure DevOps 組織和專案。 若要建立專案,請參閱 在 Azure DevOps 中建立專案。

  • GitHub 帳戶。

    重要

    在 GitHub 程式期間,系統可能會提示您建立 GitHub 服務連線 ,或重新導向至 GitHub 以登入、安裝 Azure Pipelines、授權 Azure Pipelines 或向 GitHub 組織進行驗證。 請遵循畫面上的指示來完成此程式。 如需詳細資訊,請參閱 存取 GitHub 存放庫

建立並執行管線

執行下列工作來設定簡單Android應用程式的管線。

  1. 若要取得範例應用程式的程式代碼,請將 Android範例應用程式 存放庫分支至您的 GitHub 帳戶。
  2. 在您的 Azure DevOps 專案中,選取 [管線>][新增管線],如果此管線是專案中的第一個管線,請選取 [建立管線]。
  3. 選取 [GitHub ] 作為原始程式碼的位置。
  4. 在 [ 選取存放庫 ] 畫面上,選取您的分支 Android 範例存放庫。
  5. 在 [ 設定管線] 畫面上,選取 [Android]。
  6. Azure Pipelines 會根據 Android 範本提供入門管線。 檢閱管線程序代碼。
  7. 選取儲存並執行
  8. 選擇性地編輯認可 訊息 並提供描述。 然後選取 [ 儲存並再次執行 ], 將azure-pipelines.yml 檔案認可到您的存放庫,然後啟動組建。

組建執行頁面會顯示組建詳細數據和進度。 如果您想要監看管線的運作情形,請選取 頁面下半部的 [作業 ]。

您現在已在存放庫中擁有可運作的 Android YAML 管線, azure-pipelines.yml可供自定義。

自訂您的管線

若要變更管線,請選取 管線頁面上的 [編輯 ]。 下列各節說明自定義Android管線的一些常見方式。

設定 Gradle

入門 YAML 管線使用適用於 Android 專案的通用開放原始碼建置工具 Gradle。 如需詳細資訊,請參閱 Gradle 工作

在範例工作中, tasks 參數會 assembleDebug 建置組建類型。 您可以調整 tasks 您要的組建變體值,例如 buildtestassembleRelease

此範例工作也假設您的 gradlew 檔案位於存放庫的根目錄。 如果沒有,請據以調整 workingDirectorygradleWrapperFile 值。

workingDirectory應該類似存放庫的根目錄,例如 AndroidApps/MyApp$(system.defaultWorkingDirectory)/AndroidApps/MyApp。 路徑 gradleWrapperFile 應該類似於存放庫的根目錄,例如 AndroidApps/MyApp/gradlew$(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew

- task: Gradle@3
  inputs:
    workingDirectory: ''
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    publishJUnitResults: false
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'assembleDebug'

如需使用 Gradle 工作的詳細資訊,請參閱使用 Gradle 檔中的工作。 如需建置工作的詳細資訊,請參閱 Google Android 開發檔中的建置偵錯 APK設定組建變體

簽署並對齊 Android 套件 (APK)

若要在裝置上執行,而不是模擬器,必須簽署 Android 應用程式套件 (APK)。 Zipaligning 可減少應用程式取用的 RAM。 如果您的組建尚未簽署 APK,請將 Android 簽署工作新增至管線。 如需詳細資訊,請參閱 簽署行動應用程式

為了安全性,請將 和 jarsignerKeyPassword 儲存jarsignerKeystorePassword在秘密變數,並在管線中使用那些變數。

- task: AndroidSigning@2
  inputs:
    apkFiles: '**/*.apk'
    jarsign: true
    jarsignerKeystoreFile: 'pathToYourKeystoreFile'
    jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
    jarsignerKeystoreAlias: 'yourKeystoreAlias'
    jarsignerKeyPassword: '$(jarsignerKeyPassword)'
    zipalign: true

在Android模擬器上測試

若要安裝並執行 Android 模擬器,請將 Bash 工作新增至管線,並貼上下列程式代碼。 模擬器會以背景進程的形式啟動,並在稍後的工作中提供。 排列模擬器參數以符合您的測試環境。

#!/usr/bin/env bash

# Install AVD files
echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install 'system-images;android-30;google_apis;x86'

# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-30;google_apis;x86' --force

$ANDROID_HOME/emulator/emulator -list-avds

echo "Starting emulator"

# Start emulator in background
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot -no-window -no-audio -no-boot-anim -accel off > /dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'

$ANDROID_HOME/platform-tools/adb devices

echo "Emulator started"

在 Azure 裝載的裝置上測試

若要在 Visual Studio App Center 的 Android 裝置託管實驗室中測試您的應用程式,請將 App Center 測試工作新增至管線。

此工作需要 App Center 免費試用帳戶,此帳戶必須在 30 天后轉換為付費帳戶,才能繼續使用測試實驗室。 請先註冊 App Center 帳戶 ,再使用此工作。

下列範例會執行App Center測試套件。 工作會使用 您必須設定的服務連線

如需完整的工作語法和參考,請參閱 App Center 測試工作。 如需詳細資訊,請參閱 使用 Azure DevOps 進行 UI 測試

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

使用組建記錄保留成品

若要使用組建記錄或測試來儲存 APK 檔案,並將其部署在後續管線中,請將 [複製檔案] 和 [發佈組建成品] 工作新增至管線。 如需詳細資訊,請參閱 發佈和下載管線成品

- task: CopyFiles@2
  inputs:
    contents: '**/*.apk'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: $(Build.ArtifactStagingDirectory)
    artifactName: MyBuildOutputs

部署至 App Center

若要將應用程式散發給一組測試人員或 Beta 使用者,或將應用程式升階至 Intune 或 Google Play,請新增 App Center 散發 工作。 此工作需要免費 App Center 帳戶,且免費。

下列範例會將應用程式散發給使用者。 如需完整的工作語法和參考,請參閱 App Center 散發。 如需詳細資訊,請參閱 使用App Center部署 Azure DevOps 組建。

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the APK file you want to publish
    symbolsOption: 'Android'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

安裝Google Play延伸模組並部署至Google Play

若要自動與Google Play互動,請安裝 Google Play延伸模組 ,然後使用下列工作。 根據預設,這些工作會使用 您必須設定的服務連線 向Google Play進行驗證。

版本

若要將新的 Android 應用程式版本發行至 Google Play 商店,請將 Google Play 發行 工作新增至您的管線。

- task: GooglePlayRelease@4
  inputs:
    apkFile: '**/*.apk'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    track: 'internal'

促銷

若要將先前發行的 Android 應用程式更新從某個曲目升級為另一個追蹤,例如 alphabeta,請將 Google Play 升級 工作新增至您的管線。

- task: GooglePlayPromote@3
  inputs:
    packageName: 'com.yourCompany.appPackageName'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    sourceTrack: 'internal'
    destinationTrack: 'alpha'

增加首度推出

若要增加先前發行至rollout曲目的應用程式推出百分比,請將Google Play增加推出工作新增至您的管線。

- task: GooglePlayIncreaseRollout@2
  inputs:
    packageName: 'com.yourCompany.appPackageName'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    userFraction: '0.5' # 0.0 to 1.0 (0% to 100%)

更新狀態

若要更新先前發行至rollout曲目的應用程式推出狀態,請將Google Play狀態更新工作新增至您的管線。

  - task: GooglePlayStatusUpdate@2
    inputs:
      authType: ServiceEndpoint
      packageName: 'com.yourCompany.appPackageName'
      serviceEndpoint: 'yourGooglePlayServiceConnectionName'
      status: 'inProgress' # draft | inProgress | halted | completed

建立應用程式套件組合

您可以使用內嵌文稿和安全檔案來建置和簽署應用程式套件組合。

  1. 下載密鑰存放區,並將其儲存為 Azure Pipelines 連結庫中的安全檔案

  2. 在變數群組中建立keystore.passwordkey.aliaskey.password變數。

在您的 YAML 管線中:

  1. 新增 [ 下載安全檔案] 工作以下載 app.keystore 安全檔案。

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. 使用Bash工作搭配Bash腳本來建置和簽署應用程式套件組合。

    - task: Bash@3
      displayName: "Build and sign App Bundle"
      inputs:
        targetType: "inline"
        script: |
          msbuild -restore $(Build.SourcesDirectory)/myAndroidApp/*.csproj -t:SignAndroidPackage -p:AndroidPackageFormat=aab -p:Configuration=$(buildConfiguration) -p:AndroidKeyStore=True -p:AndroidSigningKeyStore=$(keyStore.secureFilePath) -p:AndroidSigningStorePass=$(keystore.password) -p:AndroidSigningKeyAlias=$(key.alias) -p:AndroidSigningKeyPass=$(key.password)
    
  3. 使用 [ 複製檔案 ] 工作來複製應用程式套件組合。

    - task: CopyFiles@2
      displayName: 'Copy deliverables'
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)'
        Contents: '*.aab'
        TargetFolder: 'drop'
    

您可以從這裡使用 [發佈組建成品] 工作來建立並儲存成品,或使用Google Play擴充功能來發佈應用程式套件組合。