Aracılığıyla paylaş


Android uygulamalarını derleme, test etme ve dağıtma

Azure DevOps Services

Bu hızlı başlangıçta, Bir Android uygulamasını otomatik olarak derlemek, test etmek ve dağıtmak için Azure Pipelines'da YAML işlem hattının nasıl ayarlanacağı gösterilmektedir.

Önkoşullar

  • İşlem hatları oluşturma ve uygulama dağıtma izninizin olduğu bir Azure DevOps kuruluşu ve projesi. Proje oluşturmak için bkz . Azure DevOps'ta proje oluşturma.

  • Bir GitHub hesabı.

    Önemli

    GitHub yordamları sırasında oturum açmak, Azure Pipelines'ı yüklemek, Azure Pipelines'ı yetkilendirmek veya GitHub kuruluşlarına kimlik doğrulaması yapmak için GitHub hizmet bağlantısı oluşturmanız veya GitHub'a yönlendirilmeniz istenebilir. İşlemi tamamlamak için ekrandaki yönergeleri izleyin. Daha fazla bilgi için bkz . GitHub depolarına erişim.

İşlem hattını oluştur ve çalıştır

Basit bir Android uygulaması için işlem hattı ayarlamak için aşağıdaki görevleri gerçekleştirin.

  1. Örnek uygulamanın kodunu almak için Android örnek uygulama deposunu GitHub hesabınıza çatallayın.
  2. Azure DevOps projenizde, İşlem Hatları, >Yeni işlem hattı veya bu projedeki ilk işlem hattı ise İşlem hattı oluştur'u seçin.
  3. Kaynak kodunuzun konumu olarak GitHub'ı seçin.
  4. Depo Seç ekranında, çatalladığınız Android örnek deponuzu seçin.
  5. İşlem hattınızı yapılandırın ekranında Android'i seçin.
  6. Azure Pipelines, Android şablonunu temel alan bir başlangıç işlem hattı sağlar. İşlem hattı kodunu gözden geçirin.
  7. Kaydet ve çalıştır'ı seçin.
  8. İsteğe bağlı olarak, İşleme iletisini düzenleyin ve bir açıklama sağlayın. Ardından Kaydet'i seçip yeniden çalıştırarak azure-pipelines.yml dosyasını deponuza işleyip bir derleme başlatın.

Derleme çalıştırma sayfası, derleme ayrıntılarını ve ilerlemeyi gösterir. İşlem hattınızı çalışırken izlemek istiyorsanız sayfanın alt kısmında bulunan Görev'i seçin.

Artık deponuzda özelleştirmeye hazır çalışan bir Android YAML işlem hattınız azure-pipelines.yml.

İşlem hattınızı özelleştirme

İşlem hattınızda değişiklik yapmak için işlem hattı sayfasında Düzenle'yi seçin. Aşağıdaki bölümlerde, Android işlem hattınızı özelleştirmenin bazı yaygın yolları açıklanmaktadır.

Gradle'ı yapılandırma

Başlangıç YAML işlem hattı, Android projeleri için yaygın bir açık kaynak derleme aracı olan Gradle'ı kullanır. Daha fazla bilgi için bkz . Gradle görevi.

Örnek görevde tasks parametresi assembleDebug derleme türünü oluşturur. İstediğiniz derleme varyantlarının, build, test ve assembleRelease gibi, tasks değerini ayarlayabilirsiniz.

Örnek görev, dosyanızın gradlew deponun kökünde olduğunu da varsayar. Eğer ayarlanmadıysa workingDirectory ve gradleWrapperFile değerlerini buna göre ayarlayın.

workingDirectory deponun köküne benzer olmalı, örneğin AndroidApps/MyApp veya $(system.defaultWorkingDirectory)/AndroidApps/MyApp gibi. YolgradleWrapperFile, veya AndroidApps/MyApp/gradlewgibi $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew deponun köküne benzer olmalıdır.

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

Gradle görevlerini kullanma hakkında daha fazla bilgi için Gradle belgelerindeki Görevleri kullanma bölümüne bakın. Derleme görevleri hakkında daha fazla bilgi için Google Android geliştirme belgelerindeki Hata ayıklama APK'sı oluşturma ve Derleme değişkenlerini yapılandırma konularına bakın.

Android paketini (APK) imzalama ve hizalama

Emülatör yerine bir cihazda çalıştırmak için Android Uygulama Paketi (APK) imzalanmalıdır. Zipaligning, uygulamanın tükettiği RAM'i azaltır. Derlemeniz APK'yı henüz imzalamaz ve hizalamazsaAndroid İmzalama görevini işlem hattına ekleyin. Daha fazla bilgi için Mobil uygulama imzalama bölümüne bakın.

Güvenlik için, jarsignerKeystorePassword ve jarsignerKeyPassword öğelerini gizli değişkenler içinde depolayın ve bu değişkenleri işlem hattınızda kullanın.

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

Android öykünücüde test edin

Android öykünücüsünüzü yüklemek ve çalıştırmak için Bash görevini işlem hattınıza ekleyin ve aşağıdaki kodu yapıştırın. Öykünücü arka planda bir işlem olarak başlar ve sonraki görevler için kullanılabilir. Öykünücü parametrelerini test ortamınıza uyacak şekilde düzenleyin.

Önemli

Microsoft tarafından barındırılan aracıkullanıyorsanız, Android öykünücüsü ile MacOS aracı görüntüsünü kullanın. Geçerli Android öykünücülerinin başlatılması için donanım hızlandırma gerekir. Azure DevOps barındırılan Ubuntu aracıları donanım hızlandırmayı desteklemez.

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      #!/usr/bin/env bash

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

      # Create emulator
      echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n xamarin_android_emulator -d "Nexus 10" -k 'system-images;android-35;google_apis;x86_64' --force

      echo "y" | $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 on > /dev/null 2>&1 &
      # Fixed quoting around "\r"
      $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 tarafından barındırılan cihazlarda test edin

Uygulamanızı Visual Studio App Center'daki barındırılan bir Android cihaz laboratuvarında test etmek için işlem hattınıza App Center Test görevini ekleyin.

Bu görev, test laboratuvarını kullanmaya devam etmek için 30 gün sonra ücretliye dönüştürülmesi gereken bir App Center ücretsiz deneme hesabı gerektirir. Bu görevi kullanmadan önce bir App Center hesabına kaydolun.

Uyarı

Visual Studio App Center 31 Mart 2025'te kullanımdan kaldırılıyor. Destek zaman çizelgeleri ve önerilen alternatifler hakkında daha fazla bilgi edinin.

İlk olarak App Center'a kaydolun.

Aşağıdaki örnekte bir App Center test paketi çalıştırılır. Görev, ayarlamanız gereken bir hizmet bağlantısı kullanır.

Tam görev söz dizimi ve başvurusu için App Center Test görevi'ne bakın. Daha fazla bilgi için bkz UI Testi için Azure DevOps Kullanma.

- 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'

Yapı çıktıları ile derleme kaydını sakla

APK dosyanızı derleme kaydıyla depolamak veya test etmek ve sonraki işlem hatlarında dağıtmak için Dosyaları Kopyalama ve Derleme Yapıtlarını Yayımlama görevlerini işlem hattınıza ekleyin. Daha fazla bilgi için bkz İşlem hattı yapıtlarını yayımlama ve indirme.

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

App Center'a dağıtım

Bir uygulamayı test eden veya beta kullanıcı grubuna dağıtmak veya uygulamayı Intune veya Google Play'e yükseltmek için App Center Distribute görevini ekleyin. Görev, her zaman ücretsiz kalan bir App Center hesabı gerektirir.

Aşağıdaki örnek bir uygulamayı kullanıcılara dağıtır. Tam görev söz dizimi ve referans için bkz. App Center Distribute. Daha fazla bilgi için bkz . App Center ile Azure DevOps Derlemelerini Dağıtma.

- 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 uzantısını yükleme ve Google Play'e dağıtma

Google Play ile etkileşimi otomatikleştirmek için Google Play uzantısını yükleyin ve aşağıdaki görevleri kullanın. Varsayılan olarak, bu görevler yapılandırmanız gereken bir hizmet bağlantısını kullanarak Google Play'de kimlik doğrulaması yapar.

Sürüm

Google Play mağazasına yeni bir Android uygulaması sürümü yayınlamak için google play yayın görevini işlem hattınıza ekleyin.

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

Yükselt

Daha önce yayımlanmış bir Android uygulama güncellemesini alphabeta gibi bir kanaldan diğerine taşımak için, hattınıza Google Play Promote görevini ekleyin.

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

Dağıtımı artırın

Daha önce rollout parçada yayımlanan bir uygulamanın dağıtım yüzdesini artırmak için Google Play Dağıtımı Artırma görevini işlem hattınıza ekleyin.

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

Durumu güncelleştir

Daha önce rollout parçasına yayımlanmış bir uygulamanın dağıtım durumunu güncellemek için Google Play Durum Güncelleme görevini işlem hattınıza ekleyin.

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

Uygulama paketi oluşturma

Satır içi bir betik ve güvenli bir dosya ile bir uygulama paketi oluşturabilir ve imzalayabilirsiniz.

  1. Anahtar deponuzu indirin ve Azure Pipelines kitaplığında güvenli bir dosya olarak depolayın.

  2. keystore.password, key.alias ve key.password için bir değişken grubu oluşturun.

YAML işlem hattınızda:

  1. App.keystore güvenli dosyasını indirmek için Güvenli Dosya İndir görevini ekleyin.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Bash betiğiyle uygulama paketini derlemek ve imzalamak için Bash görevini kullanın.

    - 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. Uygulama paketini kopyalamak için Dosyaları Kopyala görevini kullanın.

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

Buradan Derleme Yapıtı Yayımla göreviyle bir yapıt oluşturup kaydedebilir veya Google Play uzantısını kullanarak uygulama paketini yayımlayabilirsiniz.