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şturma ve çalıştırma

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ı'nı veya projenin ilk işlem hattıysa İşlem hattı oluştur'u seçin.

  3. Kaynak kodunuzun konumu olarak GitHub'ı seçin.

  4. Depo seçin ekranında, çatallanmış 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.

    Yeni bir Android YAML işlem hattında Kaydet ve çalıştır düğmesinin ekran görüntüsü.

  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ırması sayfasında derleme ayrıntıları ve ilerleme durumu gösterilir. İşlem hattınızın nasıl çalıştığını izlemek istiyorsanız sayfanın alt kısmındaki İş'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 parametresi derleme tasks türünü oluşturur assembleDebug . , ve assembleReleasegibi buildtestistediğiniz derleme varyantlarının değerini ayarlayabilirsiniztasks.

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

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

- task: Gradle@2
  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

Öykünücü 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 sıkıştırmazsa android imzalama görevini işlem hattına ekleyin. Daha fazla bilgi için bkz . Mobil uygulama imzalama.

Güvenlik için ve jarsignerKeyPassword değerlerini jarsignerKeystorePassword gizli dizi değişkenlerinde 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ü bir arka plan işlemi olarak başlar ve sonraki görevlerde kullanılabilir. Öykünücü parametrelerini test ortamınıza uyacak şekilde düzenleyin.

#!/usr/bin/env bash

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

# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-27;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 > /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 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.

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 bkz . App Center Test görevi. 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ıtları derleme kaydıyla tutma

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ğıtma

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, ücretsiz olarak kalan ücretsiz bir App Center hesabı gerektirir.

Aşağıdaki örnek bir uygulamayı kullanıcılara dağıtır. Tam görev söz dizimi ve başvurusu 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üncelleştirmesini → gibi alpha bir parçadan diğerine yükseltmek için google play yükseltme görevini işlem hattınıza ekleyin. beta

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

Dağıtımı artırma

Daha önce parçada yayımlanan bir uygulamanın dağıtım yüzdesini artırmak için rollout Google Play Dağıtımı Artır 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 yayında olan rollout bir uygulamanın piyasaya çıkma durumunu güncelleştirmek için google play durum güncelleştirme 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 betik ve güvenli bir dosyayla uygulama paketi derleyebilir ve imzalayabilirsiniz.

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

  2. Bir değişken grubunda , key.aliasve key.password için keystore.passworddeğişkenler 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. Uygulama paketini derlemek ve imzalamak için Bash görevini bir Bash betiğiyle 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ını Yayımla göreviyle bir yapıt oluşturup kaydedebilir veya uygulama paketini yayımlamak için Google Play uzantısını kullanabilirsiniz.