Proses Build
Proses build Xamarin.Android bertanggung jawab untuk menempelkan semuanya bersama-sama: menghasilkan Resource.designer.cs
, mendukung @(AndroidResource)
@(AndroidAsset)
, , dan tindakan build lainnya, menghasilkan pembungkus yang dapat dipanggil Android, dan menghasilkan .apk
untuk eksekusi di perangkat Android.
Paket Aplikasi
Secara luas, ada dua jenis paket aplikasi Android (.apk
file) yang dapat dihasilkan oleh sistem build Xamarin.Android:
Build rilis , yang sepenuhnya mandiri dan tidak memerlukan paket tambahan untuk dijalankan. Ini adalah paket yang disediakan untuk App store.
Build debug , yang tidak.
Jenis paket ini cocok dengan MSBuild Configuration
yang menghasilkan paket.
Runtime Bersama
Sebelum Xamarin.Android 11.2, runtime bersama adalah sepasang paket Android tambahan yang menyediakan Pustaka Kelas Dasar (mscorlib.dll
, dll.) dan pustaka pengikatan Android (Mono.Android.dll
, dll.). Build debug mengandalkan runtime bersama sebagai pengganti termasuk Pustaka Kelas Dasar dan rakitan Pengikatan dalam paket aplikasi Android, memungkinkan paket Debug menjadi lebih kecil.
Runtime bersama dapat dinonaktifkan di build Debug dengan mengatur $(AndroidUseSharedRuntime)
properti ke False
.
Dukungan untuk Shared Runtime dihapus di Xamarin.Android 11.2.
Penyebaran Cepat
Penyebaran cepat bekerja dengan lebih menyusutkan ukuran paket aplikasi Android. Ini dilakukan dengan mengecualikan rakitan aplikasi dari paket, dan sebaliknya menyebarkan rakitan aplikasi langsung ke direktori internal files
aplikasi, biasanya terletak di /data/data/com.some.package
. Direktori internal files
bukan folder yang dapat ditulis secara global, sehingga run-as
alat ini digunakan untuk menjalankan semua perintah untuk menyalin file ke direktori tersebut.
Proses ini mempercepat siklus build/deploy/debug karena paket tidak diinstal ulang ketika hanya rakitan yang diubah. Hanya rakitan yang diperbarui yang disinkronkan ulang ke perangkat target.
Peringatan
Penyebaran cepat diketahui gagal pada perangkat yang memblokir run-as
, yang sering mencakup perangkat yang lebih lama dari Android 5.0.
Penyebaran cepat diaktifkan secara default, dan dapat dinonaktifkan di build Debug dengan mengatur $(EmbedAssembliesIntoApk)
properti ke True
.
Mode Penyebaran Cepat yang Ditingkatkan dapat digunakan bersama dengan fitur ini untuk mempercepat penyebaran lebih jauh.
Ini akan menyebarkan rakitan, pustaka asli, peta jenis, dan deks ke files
direktori. Tetapi Anda hanya harus benar-benar perlu mengaktifkan ini jika Anda mengubah pustaka asli, pengikatan, atau kode Java.
Proyek MSBuild
Proses build Xamarin.Android didasarkan pada MSBuild, yang juga merupakan format file proyek yang digunakan oleh Visual Studio untuk Mac dan Visual Studio. Biasanya, pengguna tidak perlu mengedit file MSBuild dengan tangan - IDE membuat proyek yang berfungsi penuh dan memperbaruinya dengan perubahan apa pun yang dibuat, dan secara otomatis memanggil target build sesuai kebutuhan.
Pengguna tingkat lanjut mungkin ingin melakukan hal-hal yang tidak didukung oleh GUI IDE, sehingga proses build dapat disesuaikan dengan mengedit file proyek secara langsung. Halaman ini hanya mencakup fitur dan penyesuaian khusus Xamarin.Android – banyak hal lainnya yang dimungkinkan dengan item, properti, dan target MSBuild normal.
Proyek Pengikatan
Properti MSBuild berikut digunakan dengan proyek Pengikatan:
Resource.designer.cs
Generasi
Properti MSBuild berikut digunakan untuk mengontrol pembuatan Resource.designer.cs
file:
$(AndroidAapt2CompileExtraArgs)
$(AndroidAapt2LinkExtraArgs)
$(AndroidExplicitCrunch)
$(AndroidR8IgnoreWarnings)
$(AndroidResgenExtraArgs)
$(AndroidResgenFile)
$(AndroidUseAapt2)
$(MonoAndroidResourcePrefix)
Properti Penandatanganan
Properti penandatanganan mengontrol bagaimana paket Aplikasi ditandatangani sehingga dapat diinstal ke perangkat Android. Untuk memungkinkan iterasi build yang lebih cepat, tugas Xamarin.Android tidak menandatangani paket selama proses build, karena penandatanganan cukup lambat. Sebaliknya, mereka ditandatangani (jika perlu) sebelum penginstalan atau selama ekspor, oleh IDE atau target Instal build. Memanggil target SignAndroidPackage akan menghasilkan paket dengan -Signed.apk
akhiran di direktori output.
Secara default, target penandatanganan menghasilkan kunci penandatanganan debug baru jika perlu. Jika Anda ingin menggunakan kunci tertentu, misalnya di server build, properti MSBuild berikut digunakan:
$(AndroidDebugKeyAlgorithm)
$(AndroidDebugKeyValidity)
$(AndroidDebugStoreType)
$(AndroidKeyStore)
$(AndroidSigningKeyAlias)
$(AndroidSigningKeyPass)
$(AndroidSigningKeyStore)
$(AndroidSigningStorePass)
$(JarsignerTimestampAuthorityCertificateAlias)
$(JarsignerTimestampAuthorityUrl)
keytool
Pemetaan Opsi
Pertimbangkan pemanggilan berikut keytool
:
$ 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]
Untuk menggunakan keystore yang dihasilkan di atas, gunakan grup properti:
<PropertyGroup>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
<AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>
Titik Ekstensi Build
Sistem build Xamarin.Android memaparkan beberapa titik ekstensi publik bagi pengguna yang ingin terhubung ke dalam proses build kami. Untuk menggunakan salah satu titik ekstensi ini, Anda harus menambahkan target kustom Anda ke properti MSBuild yang PropertyGroup
sesuai dalam . Contohnya:
<PropertyGroup>
<AfterGenerateAndroidManifest>
$(AfterGenerateAndroidManifest);
YourTarget;
</AfterGenerateAndroidManifest>
</PropertyGroup>
Titik ekstensi meliputi:
Kata hati-hati tentang memperluas proses build: Jika tidak ditulis dengan benar, ekstensi build dapat memengaruhi performa build Anda, terutama jika dijalankan pada setiap build. Sangat disarankan agar Anda membaca dokumentasi MSBuild sebelum menerapkan ekstensi tersebut.
Definisi Target
Bagian khusus Xamarin.Android dari proses build didefinisikan dalam $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets
, tetapi target khusus bahasa normal seperti Microsoft.CSharp.targets juga diperlukan untuk membangun perakitan.
Properti build berikut harus diatur sebelum mengimpor target bahasa apa pun:
<PropertyGroup>
<TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
<MonoDroidVersion>v1.0</MonoDroidVersion>
<TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>
Semua target dan properti ini dapat disertakan untuk C# dengan mengimpor Xamarin.Android.CSharp.targets:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
File ini dapat diadaptasi dengan mudah untuk bahasa lain.