建置、測試及部署Android應用程式
Azure DevOps Services
本快速入門說明如何在 Azure Pipelines 中設定 YAML 管線,以自動建置、測試及部署 Android 應用程式。
必要條件
您有權建立管線和部署應用程式的 Azure DevOps 組織和專案。 若要建立專案,請參閱 在 Azure DevOps 中建立專案。
GitHub 帳戶。
重要
在 GitHub 程式期間,系統可能會提示您建立 GitHub 服務連線 ,或重新導向至 GitHub 以登入、安裝 Azure Pipelines、授權 Azure Pipelines 或向 GitHub 組織進行驗證。 請遵循畫面上的指示來完成此程式。 如需詳細資訊,請參閱 存取 GitHub 存放庫。
建立並執行管線
執行下列工作來設定簡單Android應用程式的管線。
- 若要取得範例應用程式的程式代碼,請將 Android範例應用程式 存放庫分支至您的 GitHub 帳戶。
- 在您的 Azure DevOps 專案中,選取 [管線>][新增管線],如果此管線是專案中的第一個管線,請選取 [建立管線]。
- 選取 [GitHub ] 作為原始程式碼的位置。
- 在 [ 選取存放庫 ] 畫面上,選取您的分支 Android 範例存放庫。
- 在 [ 設定管線] 畫面上,選取 [Android]。
- Azure Pipelines 會根據 Android 範本提供入門管線。 檢閱管線程序代碼。
- 選取儲存並執行。
- 選擇性地編輯認可 訊息 並提供描述。 然後選取 [ 儲存並再次執行 ], 將azure-pipelines.yml 檔案認可到您的存放庫,然後啟動組建。
組建執行頁面會顯示組建詳細數據和進度。 如果您想要監看管線的運作情形,請選取 頁面下半部的 [作業 ]。
您現在已在存放庫中擁有可運作的 Android YAML 管線, azure-pipelines.yml可供自定義。
自訂您的管線
若要變更管線,請選取 管線頁面上的 [編輯 ]。 下列各節說明自定義Android管線的一些常見方式。
設定 Gradle
入門 YAML 管線使用適用於 Android 專案的通用開放原始碼建置工具 Gradle。 如需詳細資訊,請參閱 Gradle 工作。
在範例工作中, tasks
參數會 assembleDebug
建置組建類型。 您可以調整 tasks
您要的組建變體值,例如 build
、 test
和 assembleRelease
。
此範例工作也假設您的 gradlew
檔案位於存放庫的根目錄。 如果沒有,請據以調整 workingDirectory
和 gradleWrapperFile
值。
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 應用程式更新從某個曲目升級為另一個追蹤,例如 alpha
→ beta
,請將 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
建立應用程式套件組合
您可以使用內嵌文稿和安全檔案來建置和簽署應用程式套件組合。
下載密鑰存放區,並將其儲存為 Azure Pipelines 連結庫中的安全檔案 。
在您的 YAML 管線中:
新增 [ 下載安全檔案] 工作以下載 app.keystore 安全檔案。
- task: DownloadSecureFile@1 name: keyStore displayName: "Download keystore from secure files" inputs: secureFile: app.keystore
使用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)
使用 [ 複製檔案 ] 工作來複製應用程式套件組合。
- task: CopyFiles@2 displayName: 'Copy deliverables' inputs: SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)' Contents: '*.aab' TargetFolder: 'drop'
您可以從這裡使用 [發佈組建成品] 工作來建立並儲存成品,或使用Google Play擴充功能來發佈應用程式套件組合。
相關延伸模組
- 來自編纂安全性的編纂安全性
- Google Play from Microsoft
- 來自 James Montemagno 的 iOS 和 Android 行動應用程式工作
- 來自 Perfecto Mobile 的行動測試實驗室
- 來自Microsoft的 React Native