Bagikan melalui


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:

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:

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 PropertyGroupsesuai 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.