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.
- Örnek uygulamanın kodunu almak için Android örnek uygulama deposunu GitHub hesabınıza çatallayın.
- Azure DevOps projenizde İşlem Hatları>Yeni işlem hattı'nı veya projenin ilk işlem hattıysa İşlem hattı oluştur'u seçin.
- Kaynak kodunuzun konumu olarak GitHub'ı seçin.
- Depo seçin ekranında, çatallanmış Android örnek deponuzu seçin.
- İşlem hattınızı yapılandırın ekranında Android'i seçin.
- Azure Pipelines, Android şablonunu temel alan bir başlangıç işlem hattı sağlar. İşlem hattı kodunu gözden geçirin.
- Kaydet ve çalıştır'ı seçin.
- İ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 assembleRelease
gibi build
test
istediğ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/MyApp
gibi AndroidApps/MyApp
deponun köküne benzer olmalıdır. YolgradleWrapperFile
, veya $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew
gibi 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
Ö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-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 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.
Anahtar deponuzu indirin ve Azure Pipelines kitaplığında güvenli bir dosya olarak depolayın.
Bir değişken grubunda ,
key.alias
vekey.password
içinkeystore.password
değişkenler oluşturun.
YAML işlem hattınızda:
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
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)
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.
İlgili uzantılar
- Codified Security'den Codified Security
- Microsoft'tan Google Play
- James Montemagno'dan iOS ve Android için Mobil Uygulama Görevleri
- Perfecto Mobile'dan Mobil Test Laboratuvarı
- Microsoft'tan React Native