Derleme İşlemi

Xamarin.Android derleme işlemi her şeyi birbirine yapıştırmaktan sorumludur: oluşturma, ,Resource.designer.cs ve diğer derleme eylemlerini destekleme@(AndroidAsset)@(AndroidResource), Android çağrılabilen sarmalayıcılar oluşturma ve Android cihazlarda yürütme için bir .apk oluşturma.

Uygulama Paketleri

Geniş anlamda, Xamarin.Android derleme sisteminin oluşturabileceği iki tür Android uygulama paketi (.apk dosyalar) vardır:

  • Tamamen bağımsız olan ve yürütmek için ek paketler gerektirmeyen sürüm derlemeleri. Bunlar Bir App Store'a sağlanan paketlerdir.

  • Olmayan derlemelerde hata ayıklama .

Bu paket türleri, paketi oluşturan MSBuild Configuration ile eşleşer.

Paylaşılan Çalışma Zamanı

Xamarin.Android 11.2'nin öncesinde paylaşılan çalışma zamanı, Temel Sınıf Kitaplığı 'nı (vb.) ve Android bağlama kitaplığını (mscorlib.dllMono.Android.dllvb.) sağlayan bir çift ek Android paketiydi. Hata ayıklama derlemeleri, Temel Sınıf Kitaplığı ve Bağlama derlemelerini Android uygulama paketi içinde dahil etmek yerine paylaşılan çalışma zamanına dayanır ve Hata Ayıklama paketinin daha küçük olmasını sağlar.

Paylaşılan çalışma zamanı hata ayıklama derlemelerinde devre dışı bırakılabilir. $(AndroidUseSharedRuntime)özelliğine.False

Paylaşılan Çalışma Zamanı desteği Xamarin.Android 11.2'de kaldırıldı.

Hızlı Dağıtım

Hızlı dağıtım , Android uygulama paketi boyutunu daha da küçülterek çalışır. Bu, uygulamanın derlemelerini paketten dışlayarak ve bunun yerine uygulamanın derlemelerini genellikle içinde /data/data/com.some.packagebulunan uygulamanın iç files dizinine dağıtarak yapılır. İç files dizin genel olarak yazılabilir bir klasör olmadığından, run-as araç dosyaları bu dizine kopyalamak için tüm komutları yürütmek için kullanılır.

Yalnızca derlemeler değiştirildiğinde paket yeniden yüklenmediğinden bu işlem derleme/dağıtma/hata ayıklama döngüsünü hızlandırır. Yalnızca güncelleştirilmiş derlemeler hedef cihaza yeniden eşitlenir.

Uyarı

Hızlı dağıtımın, genellikle Android 5.0'dan eski cihazları içeren ve engelleyen run-ascihazlarda başarısız olduğu bilinmektedir.

Hızlı dağıtım varsayılan olarak etkindir ve özelliği Trueolarak ayarlanarak derlemelerde hata ayıklama özelliği $(EmbedAssembliesIntoApk) devre dışı bırakılabilir.

Gelişmiş Hızlı Dağıtım modu, dağıtımları daha da hızlandırmak için bu özellik ile birlikte kullanılabilir. Bu işlem hem derlemeleri, yerel kitaplıkları, tür haritalarını hem de dex'leri dizine files dağıtır. Ancak bunu yalnızca yerel kitaplıkları, bağlamaları veya Java kodunu değiştiriyorsanız etkinleştirmeniz gerekir.

MSBuild projeleri

Xamarin.Android derleme işlemi, Mac için Visual Studio ve Visual Studio tarafından kullanılan proje dosyası biçimi olan MSBuild'i temel alır. Normalde, kullanıcıların MSBuild dosyalarını el ile düzenlemesi gerekmez; IDE tamamen işlevsel projeler oluşturur ve yapılan tüm değişikliklerle bunları güncelleştirir ve gerektiğinde derleme hedeflerini otomatik olarak çağırır.

İleri düzey kullanıcılar IDE'nin GUI'sinde desteklenmeyen işlemler yapmak isteyebilir, bu nedenle derleme işlemi proje dosyasını doğrudan düzenleyerek özelleştirilebilir. Bu sayfada yalnızca Xamarin.Android'e özgü özellikler ve özelleştirmeler belgelenmiştir; normal MSBuild öğeleri, özellikleri ve hedefleri ile daha birçok şey mümkündür.

Projeleri Bağlama

Bağlama projeleriyle aşağıdaki MSBuild özellikleri kullanılır:

Resource.designer.cs Nesil

Dosyanın oluşturulmasını Resource.designer.cs denetlemek için aşağıdaki MSBuild özellikleri kullanılır:

İmzalama Özellikleri

İmzalama özellikleri, Uygulama paketinin bir Android cihazına yüklenebilmesi için nasıl imzalandığını denetler. Daha hızlı derleme yinelemesine izin vermek için Xamarin.Android görevleri, imzalama işlemi oldukça yavaş olduğundan derleme işlemi sırasında paketleri imzalamaz. Bunun yerine, yüklemeden önce veya dışarı aktarma sırasında, IDE veya Derlemeyi yükle hedefi tarafından imzalar (gerekirse). SignAndroidPackage hedefini çağırmak, çıkış dizininde sonek içeren -Signed.apk bir paket oluşturur.

Varsayılan olarak, imzalama hedefi gerekirse yeni bir hata ayıklama imzalama anahtarı oluşturur. Örneğin bir derleme sunucusunda belirli bir anahtar kullanmak istiyorsanız, aşağıdaki MSBuild özellikleri kullanılır:

keytool Seçenek Eşleme

Aşağıdaki keytool çağrıyı göz önünde bulundurun:

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

Yukarıda oluşturulan anahtar depoyu kullanmak için özellik grubunu kullanın:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Uzantı Noktaları Oluşturma

Xamarin.Android derleme sistemi, derleme sürecimize bağlanmak isteyen kullanıcılar için birkaç genel uzantı noktası sunar. Bu uzantı noktalarından birini kullanmak için özel hedefinizi içindeki PropertyGroupuygun MSBuild özelliğine eklemeniz gerekir. Örneğin:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

Uzantı noktaları şunlardır:

Derleme işlemini genişletme konusunda dikkatli olun: Doğru yazılmazsa, derleme uzantıları özellikle her derlemede çalıştırıldıklarında derleme performansınızı etkileyebilir. Bu tür uzantıları uygulamadan önce MSBuild belgelerini okumanız kesinlikle önerilir.

Hedef Tanımları

Derleme işleminin Xamarin.Android'e özgü bölümleri içinde $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targetstanımlanır, ancak derlemeyi oluşturmak için Microsoft.CSharp.targets gibi dile özgü normal hedefler de gereklidir.

Dil hedefleri içeri aktarılmadan önce aşağıdaki derleme özellikleri ayarlanmalıdır:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Bu hedeflerin ve özelliklerin tümü, Xamarin.Android.CSharp.targets içeri aktarılarak C# için dahil edilebilir:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Bu dosya diğer diller için kolayca uyarlanabilir.