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.dll
Mono.Android.dll
vb.) 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.package
bulunan 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-as
cihazlarda başarısız olduğu bilinmektedir.
Hızlı dağıtım varsayılan olarak etkindir ve özelliği True
olarak 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:
$(AndroidAapt2CompileExtraArgs)
$(AndroidAapt2LinkExtraArgs)
$(AndroidExplicitCrunch)
$(AndroidR8IgnoreWarnings)
$(AndroidResgenExtraArgs)
$(AndroidResgenFile)
$(AndroidUseAapt2)
$(MonoAndroidResourcePrefix)
İ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:
$(AndroidDebugKeyAlgorithm)
$(AndroidDebugKeyValidity)
$(AndroidDebugStoreType)
$(AndroidKeyStore)
$(AndroidSigningKeyAlias)
$(AndroidSigningKeyPass)
$(AndroidSigningKeyStore)
$(AndroidSigningStorePass)
$(JarsignerTimestampAuthorityCertificateAlias)
$(JarsignerTimestampAuthorityUrl)
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 PropertyGroup
uygun 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.targets
tanı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.