Hedef oluşturma

Aşağıdaki derleme hedefleri Android projeleri için .NET'te tanımlanır.

İnşa et

Kaynak kodu bir proje ve tüm bağımlılıklar içinde oluşturur.

Bu hedef bir Android paketi ( dosyası) .apk. Android paketi oluşturmak için SignAndroidPackage hedefini kullanın veya oluştururken '$(AndroidBuildApplicationPackage) özelliğini True olarak ayarlayın:

msbuild /p:AndroidBuildApplicationPackage=True App.slnx

Aot Profilleme Yap ve Başlat

Uygulamayı gömülü bir AOT profil oluşturucu ile oluşturur, profil oluşturucunun TCP bağlantı noktasını $(AndroidAotProfilerPort) olarak ayarlar ve varsayılan etkinliği başlatır.

Varsayılan TCP bağlantı noktası şeklindedir 9999.

Xamarin.Android 10.2'de eklendi.

Temiz

Derleme işlemi tarafından oluşturulan tüm dosyaları kaldırır.

Mevcut Cihazları Hesapla

ile dotnet runkullanılabilecek kullanılabilir Android cihazlarının ve öykünücülerinin listesini sorgular ve döndürür.

Bu hedef, cihaz seçimini dotnet run seçeneği aracılığıyla desteklemek için .NET SDK'sının --device komutu tarafından otomatik olarak çağrılır. Her cihazın aşağıdaki meta verilerine sahip olduğu bir @(Devices) öğe grubu döndürür:

  • Açıklama: İnsan dostu bir ad (öykünücüler için "Piksel 7 - API 35", fiziksel cihazlar için "Pixel 6 Pro" gibi)
  • Tür: "Cihaz" veya "Öykünücü"
  • Durum: Cihaz durumu - "Çevrimiçi", "Çevrimdışı", "Yetkisiz" veya "İzinsiz"
  • Model: Cihaz modeli tanımlayıcısı (isteğe bağlı)
  • Ürün: Ürün adı (isteğe bağlı)
  • Cihaz: Cihaz adı (isteğe bağlı)
  • TransportId: adb aktarım kimliği (isteğe bağlı)

Örneğin, kullanılabilir tüm cihazları listelemek için:

dotnet build -t:ComputeAvailableDevices

Bu hedef , .NET SDK cihaz seçimi belirtiminin bir parçasıdır ve aşağıdaki gibi komutları etkinleştirir:

dotnet run --device <device-serial>

Özelliği aracılığıyla $(Device) bir cihaz seçildiğinde, $(AdbTarget) özellik otomatik olarak tüm adb işlemleri için ilgili cihazı hedefleye ayarlanır.

.NET 11'de eklendi.

AotProfil Oluşturmayı Bitir

BuildAndStartAotProfiling hedefinden sonra çağrılmalıdır.

TCP bağlantı noktası üzerinden cihazdan veya öykünücüden AOT profil oluşturucu verilerini toplar $(AndroidAotProfilerPort) ve bunları öğesine $(AndroidAotCustomProfilePath)yazar.

Bağlantı noktası ve özel profil için varsayılan değerler 9999 ve custom.aprof'dir.

Ek seçenekleri aprofutil'a geçirmek için, bu seçenekleri $(AProfUtilExtraOptions) özelliği.

Bu, şuna eşdeğerdir:

aprofutil $(AProfUtilExtraOptions) -s -v -f -p $(AndroidAotProfilerPort) -o "$(AndroidAotCustomProfilePath)"

Xamarin.Android 10.2'de eklendi.

GetAndroidDependencies

@(AndroidDependency) Hedef tarafından InstallAndroidDependencies yüklenecek Android SDK paketlerini belirlemek için kullanılan öğe grubunu oluşturur.

GetApplicationArtifacts

Derleme tarafından üretilen APK ve Android Uygulama Paketi dosyalarını içeren öğe grubunu oluşturur ve döndürür @(ApplicationArtifact) .

Bu hedef her zaman, platform yapıtlarını üreten ve bunları Build içinde toplayan gerekli @(ApplicationArtifact) hedefine bağlıdır. Daha sonraki içe aktarmalar, bu hedef veya Publish hedefi bunları döndürmeden önce, bu mevcut öğeleri ek meta verilerle güncelleştirmek için hedefleri $(GetApplicationArtifactsDependsOn) öğesine ayarlayabilir veya ekleyebilir. $(GetApplicationArtifactsDependsOn) öğesini değiştirmek, gereken Build bağımlılığını ortadan kaldırmaz.

Ortak uygulama meta verileri, artefaktlar toplanmadan önce son birleştirilmiş AndroidManifest.xml dosyasından okunur. Son manifest değerleri, özel bir manifest oluşturulan değerleri geçersiz kıldığında veya $(GenerateApplicationManifest)false olduğunda dâhil olmak üzere, karşılık gelen proje özellikleri üzerinde önceliğe sahiptir. android:label Kaynak başvurusu gibi @string/app_name bir kaynak başvurusu kaynak başvurusu olarak kalır; meta veriler döndürülürken yerel ayar seçilmez.

Bir CI görevi veya özel araç derleme çıktısı artefaktlarının yollarına ihtiyaç duyduğunda bu hedefi doğrudan çağırın:

dotnet build MyApp.csproj -t:GetApplicationArtifacts -getTargetResult:GetApplicationArtifacts

Çağıranın $(PublishDir) içindeki kopyalanmış yayımlama çıktılarına ihtiyaç duyduğunda Publish hedef sonucunu kullanın:

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

Install

Android paketini oluşturur, imzalar ve varsayılan cihaza veya sanal cihaza yükler.

özelliği, $(AdbTarget) Android paketinin yüklenebileceği veya kaldırılabileceği Android hedef cihazını belirtir.

# Install package onto emulator via -e
# Use `/Library/Frameworks/Mono.framework/Commands/msbuild` on OS X
MSBuild /t:Install ProjectName.csproj /p:AdbTarget=-e

Android Bağımlılıklarını Yükle

GetAndroidDependencies Hedefi çağırır, ardından öğe grubunda belirtilen @(AndroidDependency) Android SDK paketlerini yükler.

dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=<path to sdk>" "-p:JavaSdkDirectory=<path to java sdk>"

-f net8.0-android Bu hedef, Android'e özgü bir .NET hedefi olduğundan gereklidir. Bu bağımsız değişkeni atlarsanız aşağıdaki hatayı alırsınız:

error MSB4057: The target "InstallAndroidDependencies" does not exist in the project.

AndroidSdkDirectory Gerekli bileşenlerin nereye yükleneceğini bilmemiz gerektiğinden ve JavaSdkDirectory özellikleri gereklidir. Bu dizinler boş veya mevcut olabilir. Sdk bileşenleri, var olan bir sdk yüklemesinde en üste yüklenir.

$(AndroidManifestType) MSBuild özelliği, paket adı ve paket sürümü algılama için hangi Visual Studio SDK Yöneticisi deposunun kullanılacağını ve indirilmesi gereken URL'leri denetler.

Publish

Uygulamayı oluşturur, nihai APK ve Android Uygulama Paketi dosyalarını $(PublishDir) konumuna kopyalar ve @(ApplicationArtifact) öğe grubunu döndürür. Döndürülen öğeler, kopyalanan yayımlama dizini yollarını kullanır ve %(ApplicationId), %(ApplicationTitle), %(ApplicationName), %(ApplicationDisplayVersion), %(ApplicationVersion), %(PackageFormat), %(Abi), %(PackageId) ve %(Signed) gibi artefakt meta verilerini korur.

Publish önce GetApplicationArtifacts çalıştırır; bu, projeyi derler ve @(ApplicationArtifact) öğesini platform tarafından üretilen çıktılarla doldurur. $(GetApplicationArtifactsDependsOn) öğesine eklenen hedefler daha sonra, @(ApplicationArtifact) yayımlama dosyalarını hesaplamadan ve Publish, Publish değerini döndürmeden önce bu mevcut öğeler üzerinde çalıştırılır; böylece sonraki içe aktarmalar, yayımlama çağıranları için meta veri ekleyebilir.

Örneğin, yayınlanan artefaktları sorgulamak için:

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

RunWithLogging

Uygulamayı gelişmiş günlük kaydı ile çalıştırır. Uygulama veya çalışma zamanıyla ilgili bir sorunu bildirirken veya araştırırken yararlı olur. Başarılı olursa, ekrana yazdırılan iletiler günlüğe kaydedilen iletilerin bulunduğu logcat dosyasının konumunu gösterir.

Hedefin çalışma şeklini etkileyen özellikler:

  • /p:RunLogVerbose=true çok daha ayrıntılı çalışma zamanı günlüğünü etkinleştirir
  • /p:RunLogDelayInMS=X burada, günlük çıkışını dosyaya yazmadan önce X milisaniye cinsinden bekleme süresi ile değiştirilmelidir. Varsayılan olarak 1000 değerini alır.

SignAndroidPackage

Android paket (.apk) dosyasını oluşturur ve imzalar.

"Bağımsız 'Release' paketleri oluşturmak için /p:Configuration=Release ile kullanın."

Bu hedef tarafından oluşturulan paket dosyaları öğe grubunda kullanılabilir @(ApplicationArtifact) .

StartAndroidActivity (Android Aktivitesini Başlat)

Cihazda veya çalışan öykünücüde varsayılan etkinliği başlatır.

Farklı bir etkinlik başlatmak için $(AndroidLaunchActivity) özelliğini etkinlik adına ekleyin.

Bu, şuna eşdeğerdir:

adb shell am start -S -n @PACKAGE_NAME@/$(AndroidLaunchActivity)

Xamarin.Android 10.2'de eklendi.

StopAndroidPackage

Cihazdaki veya çalışan öykünücüdeki uygulama paketini tamamen durdurur.

Bu, şuna eşdeğerdir:

adb shell am force-stop @PACKAGE_NAME@

Xamarin.Android 10.2'de eklendi.

Uninstall

Android paketini varsayılan cihazdan veya sanal cihazdan kaldırır.

özelliği, $(AdbTarget) Android paketinin yüklenebileceği veya kaldırılabileceği Android hedef cihazını belirtir.

AndroidKaynaklarınıGüncelle

Resource.designer.cs Dosyayı güncelleştirir.

Bu hedef genellikle projeye yeni kaynaklar eklendiğinde IDE tarafından çağrılır.