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.
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-androidAzure DevOps kuruluşunuzda oturum açın ve projenize gidin.
projenizde Pipelines sayfasına gidin. Sonra yeni bir işlem hattı oluşturmak için eylemi seçin.
ilk olarak GitHub kaynak kodunuzun konumu olarak seçerek sihirbazın adımlarını gözden geçir.
oturum açmak için GitHub yönlendiriliyorsunuz. bu durumda GitHub kimlik bilgilerinizi girin.
Depo listesi göründüğünde, Java örnek deponuzu seçin.
Azure Pipelines, deponuzdaki kodu analiz eder ve ardışık düzen için başlangıç şablonları önerir. Şablonu seçin
Android.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.
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%)
İlgili uzantılar
- Daha fazla güvenlik (ortak güvenlik)
- Google Play (Microsoft)
- İOS ve Android Için mobil uygulama görevleri (James Montemagno)
- Mobil test laboratuvarı (Perfecto Mobile)
- React Native (Microsoft)
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'