Bagikan melalui


Bekerja dengan Manifes Android

AndroidManifest.xml adalah file canggih di platform Android yang memungkinkan Anda menggambarkan fungsionalitas dan persyaratan aplikasi Anda ke Android. Namun, bekerja dengan itu tidak mudah. Xamarin.Android membantu meminimalkan kesulitan ini dengan memungkinkan Anda menambahkan atribut kustom ke kelas Anda, yang kemudian akan digunakan untuk secara otomatis menghasilkan manifes untuk Anda. Tujuan kami adalah bahwa 99% pengguna kami seharusnya tidak perlu memodifikasi AndroidManifest.xml secara manual.

AndroidManifest.xml dihasilkan sebagai bagian dari proses build, dan XML yang ditemukan dalam Properti/AndroidManifest.xml digabungkan dengan XML yang dihasilkan dari atribut kustom. gabungan yang dihasilkan AndroidManifest.xml berada di subdirektori obj; misalnya, berada di obj/Debug/android/AndroidManifest.xml untuk build Debug. Proses penggabungan sepele: ini menggunakan atribut kustom dalam kode untuk menghasilkan elemen XML, dan menyisipkan elemen tersebut ke dalam AndroidManifest.xml.

Dasar-dasarnya

Pada waktu kompilasi, rakitan dipindai untuk non-kelasabstract yang berasal dari Aktivitas dan memiliki [Activity] atribut yang dinyatakan pada mereka. Kemudian menggunakan kelas dan atribut ini untuk membangun manifes. Sebagai contoh, perhatikan kode berikut:

namespace Demo
{
    public class MyActivity : Activity
    {
    }
}

Ini tidak menghasilkan apa pun yang dihasilkan dalam AndroidManifest.xml. Jika Anda ingin <activity/> elemen dibuat, Anda perlu menggunakan [Activity] atribut kustom:

namespace Demo
{
    [Activity]
    public class MyActivity : Activity
    {
    }
}

Contoh ini menyebabkan fragmen xml berikut ditambahkan ke AndroidManifest.xml:

<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

Atribut [Activity] tidak berpengaruh pada abstract jenis; abstract jenis diabaikan.

Nama Aktivitas

Dimulai dengan Xamarin.Android 5.1, nama jenis aktivitas didasarkan pada MD5SUM dari nama jenis yang memenuhi syarat rakitan yang sedang diekspor. Ini memungkinkan nama yang sepenuhnya memenuhi syarat yang sama disediakan dari dua rakitan yang berbeda dan tidak mendapatkan kesalahan pengemasan. (Sebelum Xamarin.Android 5.1, nama jenis default aktivitas dibuat dari namespace layanan berukuran kecil dan nama kelas.)

Jika Anda ingin mengambil alih default ini dan secara eksplisit menentukan nama aktivitas Anda, gunakan Name properti :

[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}

Contoh ini menghasilkan fragmen xml berikut:

<activity android:name="awesome.demo.activity" />

Catatan

Anda harus menggunakan Name properti hanya untuk alasan kompatibilitas mundur, karena penggantian nama tersebut dapat memperlambat pencarian jenis pada runtime. Jika Anda memiliki kode warisan yang mengharapkan nama jenis default aktivitas didasarkan pada namespace layanan berukuran kecil dan nama kelas, lihat Penamaan Pembungkus Yang Dapat Dipanggil Android untuk tips menjaga kompatibilitas.

Bilah Judul Aktivitas

Secara default, Android memberi aplikasi Anda bilah judul saat dijalankan. Nilai yang digunakan untuk ini adalah /manifest/application/activity/@android:label. Dalam kebanyakan kasus, nilai ini akan berbeda dari nama kelas Anda. Untuk menentukan label aplikasi Anda pada bilah judul, gunakan Label properti . Contohnya:

[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}

Contoh ini menghasilkan fragmen xml berikut:

<activity android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

Dapat diluncurkan dari Pemilih Aplikasi

Secara default, aktivitas Anda tidak akan muncul di layar peluncur aplikasi Android. Ini karena kemungkinan akan ada banyak aktivitas di aplikasi Anda, dan Anda tidak ingin ikon untuk setiap aktivitas. Untuk menentukan mana yang harus dapat diluncurkan dari peluncur aplikasi, gunakan MainLauncher properti . Contohnya:

[Activity (Label="Awesome Demo App", MainLauncher=true)] 
public class MyActivity : Activity
{
}

Contoh ini menghasilkan fragmen xml berikut:

<activity android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Ikon Aktivitas

Secara default, aktivitas Anda akan diberikan ikon peluncur default yang disediakan oleh sistem. Untuk menggunakan ikon kustom, pertama-tama tambahkan .png Anda ke Resource/drawable, atur Build Action ke AndroidResource, lalu gunakan Icon properti untuk menentukan ikon yang akan digunakan. Contohnya:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")] 
public class MyActivity : Activity
{
}

Contoh ini menghasilkan fragmen xml berikut:

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Izin

Saat Anda menambahkan izin ke Manifes Android (seperti yang dijelaskan di Tambahkan Izin ke Manifes Android), izin ini direkam di Properties/AndroidManifest.xml. Misalnya, jika Anda mengatur INTERNET izin, elemen berikut ditambahkan ke Properti/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

Build debug secara otomatis mengatur beberapa izin untuk mempermudah debug (seperti INTERNET dan READ_EXTERNAL_STORAGE) – pengaturan ini hanya diatur dalam obj/Debug/android/AndroidManifest.xml yang dihasilkan dan tidak ditampilkan sebagai diaktifkan di pengaturan Izin yang diperlukan.

Misalnya, jika Anda memeriksa file manifes yang dihasilkan di obj/Debug/android/AndroidManifest.xml, Anda mungkin melihat elemen izin tambahan berikut:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Dalam versi build rilis manifes (di obj/Debug/android/AndroidManifest.xml), izin ini tidak dikonfigurasi secara otomatis. Jika Anda menemukan bahwa beralih ke build Rilis menyebabkan aplikasi Anda kehilangan izin yang tersedia di build Debug, verifikasi bahwa Anda telah secara eksplisit mengatur izin ini di pengaturan Izin yang diperlukan untuk aplikasi Anda (lihat Membangun > Aplikasi Android di Visual Studio untuk Mac; lihat Properti > Manifes Android di Visual Studio).

Fitur Tingkat Lanjut

Tindakan dan Fitur Niat

Manifes Android menyediakan cara bagi Anda untuk menjelaskan kemampuan aktivitas Anda. Ini dilakukan melalui Niat dan [IntentFilter] atribut kustom. Anda dapat menentukan tindakan mana yang sesuai untuk aktivitas Anda dengan IntentFilter konstruktor, dan kategori mana yang sesuai dengan properti Categories. Setidaknya satu aktivitas harus disediakan (itulah sebabnya aktivitas disediakan di konstruktor). [IntentFilter] dapat disediakan beberapa kali, dan setiap penggunaan menghasilkan elemen terpisah <intent-filter/> dalam <activity/>. Contohnya:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")] 
[IntentFilter (new[]{Intent.ActionView}, 
        Categories=new[]{Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}

Contoh ini menghasilkan fragmen xml berikut:

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.SAMPLE_CODE" />
    <category android:name="my.custom.category" />
  </intent-filter>
</activity>

Elemen Aplikasi

Manifes Android juga menyediakan cara bagi Anda untuk mendeklarasikan properti untuk seluruh aplikasi Anda. Ini dilakukan melalui <application> elemen dan mitranya, atribut kustom Aplikasi . Perhatikan bahwa ini adalah pengaturan di seluruh aplikasi (seluruh rakitan) daripada pengaturan per Aktivitas. Biasanya, Anda mendeklarasikan <application> properti untuk seluruh aplikasi Anda dan kemudian mengambil alih pengaturan ini (sesuai kebutuhan) berdasarkan per Aktivitas.

Misalnya, atribut berikut Application ditambahkan ke AssemblyInfo.cs untuk menunjukkan bahwa aplikasi dapat di-debug, bahwa nama yang dapat dibaca pengguna adalah Aplikasi Saya, dan menggunakan Theme.Light gaya sebagai tema default untuk semua aktivitas:

[assembly: Application (Debuggable=true,   
                        Label="My App",   
                        Theme="@android:style/Theme.Light")]

Deklarasi ini menyebabkan fragmen XML berikut dihasilkan dalam obj/Debug/android/AndroidManifest.xml:

<application android:label="My App" 
             android:debuggable="true" 
             android:theme="@android:style/Theme.Light"
                ... />

Dalam contoh ini, semua aktivitas di aplikasi akan default ke Theme.Light gaya. Jika Anda mengatur tema Aktivitas ke Theme.Dialog, hanya Aktivitas yang akan menggunakan Theme.Dialog gaya sementara semua aktivitas lain di aplikasi Anda akan default ke Theme.Light gaya sebagaimana diatur dalam <application> elemen .

Elemen Application ini bukan satu-satunya cara untuk mengonfigurasi <application> atribut. Secara bergantian, Anda dapat menyisipkan atribut langsung ke <application> elemen Properti/AndroidManifest.xml. Pengaturan ini digabungkan ke dalam elemen akhir <application> yang berada di obj/Debug/android/AndroidManifest.xml. Perhatikan bahwa konten Properti/AndroidManifest.xml selalu mengambil alih data yang disediakan oleh atribut kustom.

Ada banyak atribut di seluruh aplikasi yang dapat Anda konfigurasi di <application> elemen ; untuk informasi selengkapnya tentang pengaturan ini, lihat bagian Properti Publik dari ApplicationAttribute.

Daftar Atribut Kustom