Android uygulamaları oluşturun, test edin ve dağıtın

Bu kılavuzda, Android uygulamalarını otomatik olarak oluşturma, test etme ve dağıtma açıklanmaktadır.

başlarken

Örnek bir Android uygulaması için bir işlem hattı ayarlamak için bu yönergeleri izleyin.

  1. Aşağıdaki depodaki kod basit bir Android uygulamasıdır. başlamak için bu depoyu GitHub hesabınıza çatalla.

    https://github.com/MicrosoftDocs/pipelines-android
    
  2. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  3. projenizde Pipelines sayfasına gidin. Sonra yeni bir işlem hattı oluşturmak için eylemi seçin.

  4. ilk olarak GitHub kaynak kodunuzun konumu olarak seçerek sihirbazın adımlarını gözden geçir.

  5. oturum açmak için GitHub yönlendiriliyorsunuz. bu durumda GitHub kimlik bilgilerinizi girin.

  6. Depo listesi göründüğünde, Java örnek deponuzu seçin.

  7. Azure Pipelines, deponuzdaki kodu analiz eder ve ardışık düzen için başlangıç şablonları önerir. Şablonu seçin Android .

  8. Azure Pipelines, işlem hatlarınız için bir yaml dosyası oluşturacaktır. Kaydet ve Çalıştır' ı seçin, ardından doğrudan ana dalda Yürüt' ü seçin ve ardından Kaydet ' i seçin ve yeniden çalıştırın.

  9. Yeni bir çalıştırma başlatılır. Çalıştırmanın bitmesini bekleyin.

İşiniz bittiğinde, deponuzda özelleştirmeniz için kullanabileceğiniz bir YAML dosyası ( azure-pipelines.yml ) çalışır.

İpucu

yaml dosyasında bu konuda açıklandığı gibi değişiklikler yapmak için, Pipelines sayfasında işlem hattını seçin ve sonra dosyayı düzenleyin .

Gradle

Gradle, Android projeleri oluşturmak için kullanılan ortak bir derleme aracıdır. Bu seçenekler hakkında daha fazla bilgi için Gradle görevine bakın.

# https://docs.microsoft.com/azure/devops/pipelines/ecosystems/android
pool:
  vmImage: 'macOS-latest'

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

Yapı yolunu ayarla

Dosyanızın deponun kökünde olmaması durumunda WorkingDirectory değerini ayarlayın . Dizin değeri, deponun köküne göreli olmalıdır, örneğin AndroidApps/MyApp veya $(system.defaultWorkingDirectory)/AndroidApps/MyApp .

Dosyanız deponun kökünde değilse, gradleWrapperFile değerini ayarlayın . Dosya yolu değeri, deponun köküne göreli olmalıdır, örneğin AndroidApps/MyApp/gradlew veya $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew .

Gradle görevlerini ayarla

Veya gibi tercih ettiğiniz yapı varyantı için Görevler değerini ayarlayın assembleRelease . Ayrıntılar için bkz. Google 'ın Android geliştirme belgeleri: hata ayıklama APK oluşturma ve derleme türevlerini yapılandırma.

Android APK imzalama ve hizalama

Derlemeniz, APK 'yı imzalayıp zipi içermiyorsa, YAML 'ye Android imzalama görevini ekleyin. Bir APK, öykünücü yerine bir cihazda çalışmak üzere imzalanmalıdır. Ziphizalamak, uygulama tarafından tüketilen RAM 'i azaltır.

Önemli: Aşağıdaki parolaların her birini bir gizli değişkendedepolamanızı öneririz.
- task: AndroidSigning@2
  inputs:
    apkFiles: '**/*.apk'
    jarsign: true
    jarsignerKeystoreFile: 'pathToYourKeystoreFile'
    jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
    jarsignerKeystoreAlias: 'yourKeystoreAlias'
    jarsignerKeyPassword: '$(jarsignerKeyPassword)'
    zipalign: true

Android Emulator test etme

Note: Android Emulator şu anda yalnızca barındırılan macos aracısında kullanılabilir.

Bash görevini oluşturun ve sonra öykünücüyü yüklemek ve çalıştırmak için aşağıdaki kodu yapıştırın. Öykünücü parametrelerini, sınama ortamınıza uyacak şekilde düzenlemeyi unutmayın. Öykünücü bir arka plan işlemi olarak başlatılır ve sonraki görevlerde kullanılabilir.

#!/usr/bin/env bash

# Install AVD files
echo "y" | $ANDROID_HOME/tools/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 'da barındırılan cihazlarda test edin

Uygulamayı iOS ve Android cihazların barındırılan laboratuvarında test etmek için App Center Test görevi ekleyin. Daha sonra ücretli olarak dönüştürülmesi gereken App Center ücretsiz deneme sürümü gerekir.

Önce App Center kaydolun .

# App Center test
# Test app packages with Visual Studio App Center
- task: AppCenterTest@1
  inputs:
    appFile: 
    #artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest' 
    #prepareTests: true # Optional
    #frameworkOption: 'appium' # Required when prepareTests == True# Options: appium, espresso, calabash, uitest, xcuitest
    #appiumBuildDirectory: # Required when prepareTests == True && Framework == Appium
    #espressoBuildDirectory: # Optional
    #espressoTestApkFile: # Optional
    #calabashProjectDirectory: # Required when prepareTests == True && Framework == Calabash
    #calabashConfigFile: # Optional
    #calabashProfile: # Optional
    #calabashSkipConfigCheck: # Optional
    #uiTestBuildDirectory: # Required when prepareTests == True && Framework == Uitest
    #uitestStorePath: # Optional
    #uiTestStorePassword: # Optional
    #uitestKeyAlias: # Optional
    #uiTestKeyPassword: # Optional
    #uiTestToolsDirectory: # Optional
    #signInfo: # Optional
    #xcUITestBuildDirectory: # Optional
    #xcUITestIpaFile: # Optional
    #prepareOptions: # Optional
    #runTests: true # Optional
    #credentialsOption: 'serviceEndpoint' # Required when runTests == True# Options: serviceEndpoint, inputs
    #serverEndpoint: # Required when runTests == True && CredsType == ServiceEndpoint
    #username: # Required when runTests == True && CredsType == Inputs
    #password: # Required when runTests == True && CredsType == Inputs
    #appSlug: # Required when runTests == True
    #devices: # Required when runTests == True
    #series: 'master' # Optional
    #dsymDirectory: # Optional
    #localeOption: 'en_US' # Required when runTests == True# Options: da_DK, nl_NL, en_GB, en_US, fr_FR, de_DE, ja_JP, ru_RU, es_MX, es_ES, user
    #userDefinedLocale: # Optional
    #loginOptions: # Optional
    #runOptions: # Optional
    #skipWaitingForResults: # Optional
    #cliFile: # Optional
    #showDebugOutput: # Optional

Yapıları derleme kaydıyla koru

derleme kaydı ile apk 'nizi depolamak veya test yapmak ve sonraki işlem hatlarında dağıtmak için dosyaları kopyala ve derlemeyi yayınla Artifacts görevleri ekleyin. Bkz. Artifacts.

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

Dağıtma

App Center

Bir uygulamayı bir test ediciler veya Beta kullanıcıları grubuna dağıtmak için App Center dağıt görevini ekleyin ya da uygulamayı Intune 'a veya Google Play yükseltin. Ücretsiz bir App Center hesabı gereklidir (ödeme gerekmez).

# App Center distribute
# Distribute app builds to testers and users via Visual Studio App Center
- task: AppCenterDistribute@1
  inputs:
    serverEndpoint: 
    appSlug: 
    appFile: 
    #symbolsOption: 'Apple' # Optional. Options: apple
    #symbolsPath: # Optional
    #symbolsPdbFiles: '**/*.pdb' # Optional
    #symbolsDsymFiles: # Optional
    #symbolsMappingTxtFile: # Optional
    #symbolsIncludeParentDirectory: # Optional
    #releaseNotesOption: 'input' # Options: input, file
    #releaseNotesInput: # Required when releaseNotesOption == Input
    #releaseNotesFile: # Required when releaseNotesOption == File
    #isMandatory: false # Optional
    #distributionGroupId: # Optional

Intune Şirket Portalı

Google Play uzantısını yükleyip Google Play etkileşimi otomatik hale getirmek için aşağıdaki görevleri kullanın. Varsayılan olarak, bu görevler yapılandırdığınız bir hizmet bağlantısını kullanarak Google Play kimliğini doğrular.

Yayınla

Yeni bir Android uygulaması sürümünü Google Play deposuna yayınlamak için Google Play Release görevini ekleyin.

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

Yükseltme

Daha önce yayımlanmış bir Android uygulaması güncelleştirmesini bir türden diğerine yükseltmek için Google Play Yükselt görevini ekleyin, örneğin, beta .

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

Dağıtımı artırma

Daha önce izlemeye yayınlanan bir uygulamanın piyasaya çıkma yüzdesini artırmak için, dağıtım Google Play artırma görevini ekleyin .

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

SSS

Nasıl yaparım? uygulama paketleri mi oluşturulsun?

Bir satır içi betik ve güvenli bir dosya ile uygulama paketlerinizi oluşturup imzalayabilirsiniz. Bunu yapmak için öncelikle Anahtar deponuzu indirip kitaplıkta güvenli bir dosya olarak depolamanızgerekir. Ayrıca keystore.password , key.aliaskey.password bir keystore.password, ve için değişkenler oluşturmanız gerekecektir.

Ardından, Anahtar deponuzu indirmek ve uygulama paketlerinizi derlemek ve imzalamak için güvenli dosya ve Bash görevlerini İndir ' i kullanacaksınız.

Bu YAML dosyasında, bir app.keystore uygulama paketi oluşturmak için güvenli bir dosya indirir ve bir bash betiği kullanıyorsunuz. Ardından, uygulama paketini kopyalamak için dosyaları Kopyala ' yı kullanırsınız. Buradan, derleme yapıtı ile bir yapıt oluşturup kaydedebilir veya yayımlamak için Google Play uzantısını kullanabilirsiniz.

- task: DownloadSecureFile@1
  name: keyStore
  displayName: "Download keystore from secure files"
  inputs:
    secureFile: app.keystore

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