Bagikan melalui


Menyiapkan Aplikasi untuk Rilis

Setelah aplikasi dikodekan dan diuji, perlu menyiapkan paket untuk distribusi. Tugas pertama dalam menyiapkan paket ini adalah membangun aplikasi untuk rilis, yang terutama memerlukan pengaturan beberapa atribut aplikasi.

Gunakan langkah-langkah berikut untuk membuat aplikasi untuk rilis:

  • Tentukan Ikon Aplikasi – Setiap aplikasi Xamarin.Android harus memiliki ikon aplikasi yang ditentukan. Meskipun tidak diperlukan secara teknis, beberapa pasar, seperti Google Play, memerlukannya.

  • Versi Aplikasi - Langkah ini melibatkan inisialisasi atau pembaruan informasi penerapan versi. Ini penting untuk pembaruan aplikasi di masa mendatang dan untuk memastikan bahwa pengguna mengetahui versi aplikasi mana yang telah mereka instal.

  • Menyusutkan APK – Ukuran APK akhir dapat dikurangi secara substansial dengan menggunakan linker Xamarin.Android pada kode terkelola dan ProGuard pada bytecode Java.

  • Lindungi Aplikasi – Mencegah pengguna atau penyerang melakukan debugging, mengubah, atau membalikkan rekayasa aplikasi dengan menonaktifkan penelusuran kesalahan, mengaburkan kode terkelola, menambahkan anti-debug dan anti-perusakan, dan menggunakan kompilasi asli.

  • Atur Properti Kemasan – Properti pengemasan mengontrol pembuatan paket aplikasi Android (APK). Langkah ini mengoptimalkan APK, melindungi asetnya, dan memodulasi kemasan sesuai kebutuhan. Selain itu, Anda dapat memberi pengguna Android App Bundle yang dioptimalkan untuk perangkat mereka.

  • Kompilasi – Langkah ini mengkompilasi kode dan aset untuk memverifikasi bahwa kode dan aset tersebut dibuat dalam mode Rilis.

  • Arsip untuk Penerbitan – Langkah ini membangun aplikasi dan menempatkannya dalam arsip untuk penandatanganan dan penerbitan.

Masing-masing langkah ini dijelaskan di bawah ini secara lebih rinci.

Tentukan Ikon Aplikasi

Sangat disarankan agar setiap aplikasi Xamarin.Android menentukan ikon aplikasi. Beberapa marketplace aplikasi tidak akan mengizinkan aplikasi Android dipublikasikan tanpa aplikasi tersebut. Properti IconApplication atribut digunakan untuk menentukan ikon aplikasi untuk proyek Xamarin.Android.

Di Visual Studio 2017 dan yang lebih baru, tentukan ikon aplikasi melalui bagian Manifes Android dari properti proyek, seperti yang ditunjukkan pada cuplikan layar berikut:

Set the application icon

Dalam contoh ini, @drawable/icon mengacu pada file ikon yang terletak di Sumber Daya/dapat digambar /icon.png (perhatikan bahwa ekstensi .png tidak disertakan dalam nama sumber daya). Atribut ini juga dapat dideklarasikan dalam file Properties\AssemblyInfo.cs, seperti yang ditunjukkan dalam cuplikan sampel ini:

[assembly: Application(Icon = "@drawable/icon")]

Biasanya, using Android.App dinyatakan di bagian atas AssemblyInfo.cs (namespace Application atribut adalah Android.App); namun, Anda mungkin perlu menambahkan pernyataan ini using jika belum ada.

Versi Aplikasi

Penerapan versi penting untuk pemeliharaan dan distribusi aplikasi Android. Tanpa semacam penerapan versi di tempat, sulit untuk menentukan apakah atau bagaimana aplikasi harus diperbarui. Untuk membantu penerapan versi, Android mengenali dua jenis informasi yang berbeda:

  • Nomor Versi – Nilai bilangan bulat (digunakan secara internal oleh Android dan aplikasi) yang mewakili versi aplikasi. Sebagian besar aplikasi dimulai dengan nilai ini diatur ke 1, dan kemudian bertahap dengan setiap build. Nilai ini tidak memiliki hubungan atau afinitas dengan atribut nama versi (lihat di bawah). Aplikasi dan layanan penerbitan tidak boleh menampilkan nilai ini kepada pengguna. Nilai ini disimpan dalam file AndroidManifest.xml sebagai android:versionCode.

  • Nama Versi – String yang hanya digunakan untuk mengomunikasikan informasi kepada pengguna tentang versi aplikasi (seperti yang diinstal pada perangkat tertentu). Nama versi dimaksudkan untuk ditampilkan kepada pengguna atau di Google Play. String ini tidak digunakan secara internal oleh Android. Nama versi dapat berupa nilai string apa pun yang akan membantu pengguna mengidentifikasi build yang diinstal di perangkat mereka. Nilai ini disimpan dalam file AndroidManifest.xml sebagai android:versionName.

Di Visual Studio, nilai-nilai ini dapat diatur di bagian Manifes Android dari properti proyek, seperti yang ditunjukkan pada cuplikan layar berikut:

Set the version number

Menyusutkan APK

API Xamarin.Android dapat dibuat lebih kecil melalui kombinasi linker Xamarin.Android, yang menghapus kode terkelola yang tidak perlu, dan alat ProGuard dari Android SDK, yang menghapus bytecode Java yang tidak digunakan. Proses build terlebih dahulu menggunakan linker Xamarin.Android untuk mengoptimalkan aplikasi pada tingkat kode terkelola (C#), dan kemudian menggunakan ProGuard (jika diaktifkan) untuk mengoptimalkan APK di tingkat bytecode Java.

Mengonfigurasi Penaut

Mode rilis menonaktifkan runtime bersama dan mengaktifkan penautan sehingga aplikasi hanya mengirimkan potongan Xamarin.Android yang diperlukan saat runtime. Linker di Xamarin.Android menggunakan analisis statis untuk menentukan anggota rakitan, jenis, dan jenis mana yang digunakan atau dirujuk oleh aplikasi Xamarin.Android. Linker kemudian membuang semua rakitan, jenis, dan anggota yang tidak digunakan (atau direferensikan). Ini dapat mengakibatkan pengurangan ukuran paket yang signifikan. Misalnya, pertimbangkan sampel HelloWorld , yang mengalami pengurangan 83% dalam ukuran akhir APK-nya:

  • Konfigurasi: None – Xamarin.Android 4.2.5 Size = 17.4 MB.

  • Konfigurasi: Rakitan SDK Saja – Ukuran Xamarin.Android 4.2.5 = 3.0 MB.

Atur opsi linker melalui bagian Opsi Android dari properti proyek:

Linker options

Menu tarik-turun Penautan menyediakan opsi berikut untuk mengontrol linker:

  • None – Ini mematikan linker; tidak ada penautan yang akan dilakukan.

  • Rakitan SDK Saja - Ini hanya akan menautkan rakitan yang diperlukan oleh Xamarin.Android. Rakitan lain tidak akan ditautkan.

  • Sdk dan Rakitan Pengguna - Ini akan menautkan semua rakitan yang diperlukan oleh aplikasi, dan bukan hanya yang diperlukan oleh Xamarin.Android.

Penautan dapat menghasilkan beberapa efek samping yang tidak diinginkan, jadi penting bahwa aplikasi diuji ulang dalam mode Rilis pada perangkat fisik.

ProGuard

ProGuard adalah alat Android SDK yang menautkan dan mengaburkan kode Java. ProGuard biasanya digunakan untuk membuat aplikasi yang lebih kecil dengan mengurangi jejak pustaka besar yang disertakan (seperti Google Play Services) di APK Anda. ProGuard menghapus bytecode Java yang tidak digunakan, yang membuat aplikasi yang dihasilkan lebih kecil. Misalnya, menggunakan ProGuard pada aplikasi Xamarin.Android kecil biasanya mencapai sekitar 24% pengurangan ukuran - menggunakan ProGuard pada aplikasi yang lebih besar dengan beberapa dependensi pustaka biasanya mencapai pengurangan ukuran yang lebih besar.

ProGuard bukan alternatif untuk linker Xamarin.Android. Linker Xamarin.Android menautkan kode terkelola, sementara ProGuard menautkan bytecode Java. Proses build terlebih dahulu menggunakan linker Xamarin.Android untuk mengoptimalkan kode (C#) terkelola di aplikasi, dan kemudian menggunakan ProGuard (jika diaktifkan) untuk mengoptimalkan APK di tingkat bytecode Java.

Saat Enable ProGuard diperiksa, Xamarin.Android menjalankan alat ProGuard pada APK yang dihasilkan. File konfigurasi ProGuard dihasilkan dan digunakan oleh ProGuard pada waktu build. Xamarin.Android juga mendukung tindakan build ProguardConfiguration kustom. Anda dapat menambahkan file konfigurasi ProGuard kustom ke proyek Anda, mengklik kanan, dan memilihnya sebagai tindakan build seperti yang ditunjukkan dalam contoh ini:

ProGuard dinonaktifkan secara default. Opsi Aktifkan ProGuard hanya tersedia saat proyek diatur ke mode Rilis . Semua tindakan build ProGuard diabaikan kecuali Aktifkan ProGuard dicentang. Konfigurasi Xamarin.Android ProGuard tidak mengaburkan APK, dan tidak mungkin untuk mengaktifkan obfuscation, bahkan dengan file konfigurasi kustom. Jika Anda ingin menggunakan obfuscation, silakan lihat Perlindungan Aplikasi dengan Dotfuscator.

Untuk informasi selengkapnya tentang menggunakan alat ProGuard, lihat ProGuard.

Lindungi Aplikasi

Nonaktifkan Penelusuran Kesalahan

Selama pengembangan aplikasi Android, debugging dilakukan dengan penggunaan Java Debug Wire Protocol (JDWP). Ini adalah teknologi yang memungkinkan alat seperti adb berkomunikasi dengan JVM untuk tujuan debugging. JDWP diaktifkan secara default untuk build Debug dari aplikasi Xamarin.Android. Meskipun JDWP penting selama pengembangan, JDWP dapat menimbulkan masalah keamanan untuk aplikasi yang dirilis.

Penting

Selalu nonaktifkan status debug dalam aplikasi yang dirilis karena mungkin (melalui JDWP) untuk mendapatkan akses penuh ke proses Java dan menjalankan kode sewenang-wenang dalam konteks aplikasi jika status debug ini tidak dinonaktifkan.

Manifes Android berisi android:debuggable atribut , yang mengontrol apakah aplikasi dapat di-debug atau tidak. Ini dianggap sebagai praktik yang baik untuk mengatur android:debuggable atribut ke false. Cara paling sederhana untuk melakukan ini adalah dengan menambahkan pernyataan kompilasi bersyarah dalam AssemblyInfo.cs:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

Perhatikan bahwa build Debug secara otomatis mengatur beberapa izin untuk mempermudah debug (seperti Internet dan ReadExternalStorage). Build rilis, namun, hanya gunakan izin yang Anda konfigurasi secara eksplisit. Jika Anda menemukan bahwa beralih ke build Rilis menyebabkan aplikasi Anda kehilangan izin yang tersedia di build Debug, verifikasi bahwa Anda telah mengaktifkan izin ini secara eksplisit di daftar Izin yang diperlukan seperti yang dijelaskan dalam Izin.

Perlindungan Aplikasi dengan Dotfuscator

Bahkan dengan penelusuran kesalahan dinonaktifkan, penyerang masih dapat mengemas ulang aplikasi, menambahkan atau menghapus opsi atau izin konfigurasi. Ini memungkinkan mereka untuk merekayasa balik, men-debug, atau mengubah aplikasi. Dotfuscator Community Edition (CE) dapat digunakan untuk mengaburkan kode terkelola dan menyuntikkan kode deteksi status keamanan runtime ke dalam aplikasi Xamarin.Android pada waktu build untuk mendeteksi dan merespons jika aplikasi berjalan pada perangkat berakar.

Dotfuscator CE disertakan dengan Visual Studio 2017. Untuk menggunakan Dotfuscator, klik Alat > Perlindungan PreEmptive - Dotfuscator.

Untuk mengonfigurasi Dotfuscator CE, silakan lihat Menggunakan Dotfuscator Community Edition dengan Xamarin. Setelah dikonfigurasi, Dotfuscator CE akan secara otomatis melindungi setiap build yang dibuat.

Bundel Rakitan ke dalam Kode Asli

Ketika opsi ini diaktifkan, rakitan dibundel ke dalam pustaka bersama asli. Ini memungkinkan rakitan dikompresi, mengizinkan file yang lebih .apk kecil. Kompresi rakitan juga menganugerahkan bentuk obfuscation minimal ; obfuscation seperti itu tidak boleh diandalkan.

Opsi ini memerlukan lisensi Enterprise dan hanya tersedia saat Gunakan Penyebaran Cepat dinonaktifkan. Rakitan bundel ke dalam kode asli dinonaktifkan secara default.

Perhatikan bahwa opsi Bundel ke Dalam Kode Asli tidak berarti bahwa rakitan dikompilasi ke dalam kode asli. Tidak dimungkinkan untuk menggunakan Kompilasi AOT untuk mengkompilasi rakitan ke dalam kode asli.

Kompilasi AOT

Opsi Kompilasi AOT (pada halaman Properti Kemasan) memungkinkan kompilasi rakitan Ahead-of-Time (AOT). Ketika opsi ini diaktifkan, overhead startup Just In Time (JIT) diminimalkan dengan rakitan prakompilasi sebelum runtime. Kode asli yang dihasilkan disertakan dalam APK bersama dengan rakitan yang tidak dikompilasi. Ini menghasilkan waktu startup aplikasi yang lebih singkat, tetapi dengan mengorbankan ukuran APK yang sedikit lebih besar.

Opsi Kompilasi AOT memerlukan lisensi Enterprise atau yang lebih tinggi. Kompilasi AOT hanya tersedia ketika proyek dikonfigurasi untuk mode Rilis, dan dinonaktifkan secara default. Untuk informasi selengkapnya tentang Kompilasi AOT, lihat AOT.

LLVM Mengoptimalkan Pengkompilasi

LLVM Optimizing Compiler akan membuat kode yang dikompilasi yang lebih kecil dan lebih cepat dan mengonversi rakitan yang dikompilasi AOT menjadi kode asli, tetapi dengan mengorbankan waktu build yang lebih lambat. Pengkompilasi LLVM dinonaktifkan secara default. Untuk menggunakan pengkompilasi LLVM, opsi Kompilasi AOT harus diaktifkan terlebih dahulu (pada halaman Properti Kemasan).

Catatan

Opsi Pengoptimalan Kompilator LLVM memerlukan lisensi Enterprise.

Mengatur Properti Kemasan

Properti pengemasan dapat diatur di bagian Opsi Android dari properti proyek, seperti yang ditunjukkan pada cuplikan layar berikut:

Packaging Properties

Banyak dari properti ini, seperti Gunakan Shared Runtime, dan Gunakan Penyebaran Cepat ditujukan untuk mode Debug. Namun, ketika aplikasi dikonfigurasi untuk mode Rilis, ada pengaturan lain yang menentukan bagaimana aplikasi dioptimalkan untuk ukuran dan kecepatan eksekusi, bagaimana aplikasi dilindungi dari perubahan, dan bagaimana aplikasi dapat dikemas untuk mendukung arsitektur dan batasan ukuran yang berbeda.

Tentukan Arsitektur yang Didukung

Saat menyiapkan aplikasi Xamarin.Android untuk rilis, perlu untuk menentukan arsitektur CPU yang didukung. Satu APK dapat berisi kode mesin untuk mendukung beberapa arsitektur yang berbeda. Lihat Arsitektur CPU untuk detail tentang mendukung beberapa arsitektur CPU.

Hasilkan Satu Paket (. APK) per ABI Terpilih

Ketika opsi ini diaktifkan, satu APK akan dibuat untuk setiap ABI yang didukung (dipilih pada tab Tingkat Lanjut , seperti yang dijelaskan dalam Arsitektur CPU) daripada APK besar tunggal untuk semua ABI yang didukung. Opsi ini hanya tersedia ketika proyek dikonfigurasi untuk mode Rilis, dan dinonaktifkan secara default.

Multi-Dex

Saat opsi Aktifkan Multi-Dex diaktifkan, alat Android SDK digunakan untuk melewati batas metode 65K dari format file .dex. Batasan metode 65K didasarkan pada jumlah metode Java yang direferensikan aplikasi (termasuk yang ada di pustaka apa pun yang bergantung pada aplikasi) - itu tidak didasarkan pada jumlah metode yang ditulis dalam kode sumber. Jika aplikasi hanya mendefinisikan beberapa metode tetapi menggunakan banyak (atau pustaka besar), ada kemungkinan bahwa batas 65K akan terlampaui.

Ada kemungkinan bahwa aplikasi tidak menggunakan setiap metode di setiap pustaka yang dirujuk; oleh karena itu, ada kemungkinan bahwa alat seperti ProGuard (lihat di atas) dapat menghapus metode yang tidak digunakan dari kode. Praktik terbaiknya adalah mengaktifkan Aktifkan Multi-Dex hanya jika benar-benar diperlukan, yaitu aplikasi masih mereferensikan lebih dari 65K metode Java bahkan setelah menggunakan ProGuard.

Untuk informasi selengkapnya tentang Multi-Dex, lihat Mengonfigurasi Aplikasi dengan Metode Lebih dari 64K.

Bundel Aplikasi Android

Bundel aplikasi berbeda dari APK karena tidak dapat disebarkan langsung ke perangkat. Sebaliknya, ini adalah format yang dimaksudkan untuk diunggah dengan semua kode dan sumber daya yang dikompilasi. Setelah Anda mengunggah bundel aplikasi yang ditandatangani, Google Play akan memiliki semua yang diperlukan untuk membuat dan menandatangani APK aplikasi Anda dan menyajikannya kepada pengguna Anda menggunakan Pengiriman Dinamis.

Untuk mengaktifkan dukungan untuk Android App Bundles, Anda harus ikut serta dalam nilai properti Format Paket Android dalam bundle opsi proyek Android Anda. Sebelum melakukan ini, pastikan Anda mengubah proyek ke Release konfigurasi karena bundel aplikasi hanya ditujukan untuk paket rilis.

Anda sekarang dapat membuat bundel aplikasi dengan mengikuti Alur Arsip. Ini akan menghasilkan bundel aplikasi untuk aplikasi Anda.

Untuk informasi selengkapnya tentang Android App Bundles, lihat Android App Bundles.

Mengompilasi

Setelah semua langkah di atas selesai, aplikasi siap untuk kompilasi. Pilih Bangun > Solusi Pembangunan Ulang untuk memverifikasi bahwa solusi berhasil dibangun dalam mode Rilis. Perhatikan bahwa langkah ini belum menghasilkan APK.

Menandatangani Paket Aplikasi membahas pengemasan dan masuk secara lebih rinci.

Arsip untuk Penerbitan

Untuk memulai proses penerbitan, klik kanan proyek di Penjelajah Solusi dan pilih item menu konteks Arsip... :

Archive app

Arsip...meluncurkan Archive Manager dan memulai proses pengarsipan App bundle seperti yang ditunjukkan pada cuplikan layar ini:

Archive Manager

Cara lain untuk membuat arsip adalah dengan mengklik kanan Solusi di Penjelajah Solusi dan memilih Arsipkan Semua... , yang membangun solusi dan mengarsipkan semua proyek Xamarin yang dapat menghasilkan arsip:

Archive All

Arsip dan Arsipkan Semua secara otomatis meluncurkan Manajer Arsip. Untuk meluncurkan Manajer Arsip secara langsung, klik item menu Pengelola Arsip Alat>... :

Launch Archive Manager

Arsip solusi kapan saja dengan mengklik kanan node Solusi dan memilih Lihat Arsip:

View Archives

Manajer Arsip

Manajer Arsip terdiri dari panel Daftar Solusi, Daftar Arsip, dan Panel Detail:

Archive Manager Panes

Daftar Solusi menampilkan semua solusi yang memiliki setidaknya satu proyek yang diarsipkan. Daftar Solusi mencakup bagian berikut:

  • Solusi Saat Ini – Menampilkan solusi saat ini. Perhatikan bahwa area ini mungkin kosong jika solusi saat ini tidak memiliki arsip yang ada.
  • Semua Arsip – Menampilkan semua solusi yang memiliki arsip.
  • Kotak teks pencarian (di bagian atas) – Memfilter solusi yang tercantum dalam daftar Semua Arsip sesuai dengan string pencarian yang dimasukkan dalam kotak teks.

Daftar Arsip menampilkan daftar semua arsip untuk solusi yang dipilih. Daftar Arsip mencakup bagian berikut:

  • Nama solusi yang dipilih – Menampilkan nama solusi yang dipilih di Daftar Solusi. Semua informasi yang ditampilkan dalam Daftar Arsip mengacu pada solusi yang dipilih ini.
  • Filter Platform - Bidang ini memungkinkan untuk memfilter arsip berdasarkan jenis platform (seperti iOS atau Android).
  • Item Arsip – Daftar arsip untuk solusi yang dipilih. Setiap item dalam daftar ini mencakup nama proyek, tanggal pembuatan, dan platform. Ini juga dapat menampilkan informasi tambahan seperti kemajuan saat item sedang diarsipkan atau diterbitkan.

Panel Detail menampilkan informasi tambahan tentang setiap arsip. Ini juga memungkinkan pengguna untuk memulai alur kerja Distribusi atau membuka folder tempat distribusi telah dibuat. Bagian Komentar Build memungkinkan untuk menyertakan komentar build dalam arsip.

Distribusi

Ketika versi aplikasi yang diarsipkan siap diterbitkan, pilih arsip di Manajer Arsip dan klik tombol Distribusikan... :

Distribute button

Dialog Saluran Distribusi menampilkan informasi tentang aplikasi, indikasi kemajuan alur kerja distribusi, dan pilihan saluran distribusi. Pada eksekusi pertama, dua pilihan disajikan:

Select Distribution Channel

Dimungkinkan untuk memilih salah satu saluran distribusi berikut:

  • Ad-Hoc – Menyimpan APK yang ditandatangani ke disk yang dapat dimuat samping ke perangkat Android. Lanjutkan menandatangani Paket Aplikasi untuk mempelajari cara membuat identitas penandatanganan Android, membuat sertifikat penandatanganan baru untuk aplikasi Android, dan menerbitkan versi ad hoc aplikasi ke disk. Ini adalah cara yang baik untuk membuat APK untuk pengujian.

  • Google Play – Menerbitkan APK yang ditandatangani ke Google Play. Lanjutkan memublikasikan ke Google Play untuk mempelajari cara menandatangani dan memublikasikan APK di Google Play store.