Jika Anda memublikasikan aplikasi ke Google Play, sebaiknya bangun dan upload Android App Bundle. Setelah Anda melakukannya, Google Play akan otomatis membuat dan menayangkan APK yang dioptimalkan untuk setiap konfigurasi perangkat pengguna, sehingga pengguna hanya mendownload kode dan resource yang diperlukan untuk menjalankan aplikasi Anda. Memublikasikan multi-APK akan berguna jika Anda tidak memublikasikan aplikasi ke Google Play. Namun, Anda harus membuat, menandatangani, dan mengelola setiap APK sendiri.
Saat mengembangkan aplikasi Android untuk memanfaatkan multi-APK di Google Play, Anda harus menerapkan beberapa praktik baik dari awal, dan mencegah sakit kepala yang tidak perlu terjadi. lebih jauh ke dalam proses pengembangan. Pelajaran ini menunjukkan cara membuat beberapa APK aplikasi, yang masing-masing mencakup kelas ukuran layar yang berbeda. Anda juga akan mendapatkan beberapa alat yang diperlukan untuk mempermudah pemeliharaan codebase multi-APK.
Mengonfirmasi bahwa Anda memerlukan multi-APK
Saat mencoba membuat aplikasi yang bekerja di berbagai ukuran perangkat Android, Anda tentu ingin aplikasi Anda memanfaatkan semua ruang yang tersedia di perangkat yang lebih besar, tanpa mengorbankan kompatibilitas atau kegunaan pada layar yang lebih kecil. Mungkin di awal akan tampak seolah-olah dukungan multi-APK adalah solusi terbaik, tetapi ini sering kali tidak sesuai harapan. Menggunakan APK Tunggal Bagian dari panduan developer multi-APK berisi beberapa informasi berguna tentang cara melakukannya dengan satu APK, termasuk penggunaan pustaka dukungan kami. Anda juga harus membaca panduan untuk mendukung beberapa layar, dan bahkan ada support library yang Anda dapat didownload menggunakan Android SDK, yang memungkinkan Anda menggunakan fragmen pada perangkat pra-Honeycomb (membuat dukungan multilayar dalam satu APK jauh lebih mudah).
Jika Anda dapat mengelolanya, membatasi aplikasi ke satu APK memiliki beberapa keuntungan, termasuk:
- Publikasi dan pengujian lebih mudah
- Hanya ada satu codebase yang harus dikelola
- Aplikasi Anda dapat beradaptasi dengan perubahan konfigurasi perangkat
- Pemulihan aplikasi berfungsi di seluruh perangkat
- Anda tidak perlu mengkhawatirkan preferensi pasar, perilaku dari "upgrade" dari satu APK ke berikutnya, atau APK mana yang sesuai dengan kelas perangkat
Bagian selanjutnya dari pelajaran ini mengasumsikan bahwa Anda telah meneliti topik tersebut, mempelajari topik tersebut dengan cermat dan dalam resource yang ditautkan, dan menentukan bahwa multi-APK adalah jalur yang tepat untuk aplikasi.
Membuat diagram kebutuhan Anda
Mulailah dengan membuat bagan sederhana untuk menentukan dengan cepat berapa banyak APK yang Anda butuhkan, dan layar apa ukuran yang dicakup oleh setiap APK. Untungnya, tidak sulit membuat diagram kebutuhan Anda secara cepat dan mudah, dan memiliki referensi untuk nanti. Mulailah dengan baris sel yang mewakili berbagai ukuran layar yang tersedia di platform Android.
small | normal | large | xlarge |
Sekarang warnai diagram sehingga setiap warna merepresentasikan APK. Berikut adalah salah satu contoh cara Anda dapat menerapkan setiap APK pada rentang ukuran layar tertentu.
small | normal | large | xlarge |
Tergantung kebutuhan, Anda juga bisa memiliki dua APK, "kecil dan yang lainnya" atau "xlarge dan lainnya". Mewarnai dalam bagan juga membuat komunikasi antartim lebih mudah—Anda bisa sekarang cukup rujuk setiap APK sebagai "biru", "hijau", atau "merah", tidak peduli berapa banyak jenis layar yang berbeda yang dicakup.
Memasukkan semua kode umum dan resource dalam project library
Baik Anda memodifikasi aplikasi Android yang ada atau memulai dari awal, ini adalah hal pertama yang harus Anda lakukan pada codebase, dan sejauh ini merupakan hal yang paling penting. Semua yang masuk ke proyek perpustakaan hanya perlu diperbarui sekali (pikirkan string yang dilokalkan tema warna, bug yang diperbaiki dalam kode bersama), yang mempercepat waktu pengembangan dan mengurangi kemungkinan kesalahan yang dapat dengan mudah dihindari.
Catatan: Meskipun detail penerapan terkait cara membuat dan menyertakan proyek perpustakaan berada di luar cakupan pelajaran ini, Anda bisa mendapatkan dengan membaca Membuat Library Android.
Jika Anda mengonversi aplikasi yang sudah ada untuk menggunakan dukungan multi-APK, jelajahi codebase Anda untuk setiap file string, daftar nilai, dan tema yang dilokalkan warna, ikon menu, dan tata letak yang tidak akan berubah di APK, serta semuanya dalam proyek perpustakaan. Kode yang tidak akan banyak berubah seharusnya juga masuk ke proyek perpustakaan. Anda mungkin akan memperluasnya untuk menambahkan satu atau dua metode dari APK ke APK.
Di sisi lain, jika Anda membuat aplikasi dari awal, coba sebanyak mungkin untuk menulis kode dalam project library terlebih dahulu, lalu memindahkannya ke bawah saja ke APK individual jika diperlukan. Ini jauh lebih mudah untuk dikelola dalam jangka panjang dibandingkan menambahkannya, lalu yang lain, lalu lagi, kemudian berbulan-bulan kemudian mencoba mencari tahu apakah blob ini dapat dipindahkan ke atas ke bagian perpustakaan tanpa mengacaukan apa pun.
Membuat project APK baru
Harus ada project Android terpisah untuk setiap APK yang akan Anda rilis. Untuk kemudahan organisasi, tempatkan project library dan semua project APK terkait dalam folder induk yang sama. Ingat juga bahwa setiap APK harus memiliki nama paket yang sama, meskipun belum tentu perlu membagikan nama paket dengan perpustakaan. Jika Anda memiliki 3 APK dengan mengikuti skema yang dijelaskan sebelumnya, direktori {i> root <i}Anda mungkin terlihat seperti ini:
alexlucas:~/code/multi-apks-root$ ls foo-blue foo-green foo-lib foo-red
Setelah project dibuat, tambahkan project library sebagai referensi untuk setiap project APK. Jika memungkinkan, tentukan Aktivitas awal dalam project library, dan perluas Aktivitas tersebut dalam APK Anda proyek. Memiliki aktivitas awal yang ditentukan dalam project library memberi Anda kesempatan untuk melakukan inisialisasi aplikasi di satu tempat, sehingga setiap APK tidak perlu menerapkan kembali "universal" seperti menginisialisasi Analytics, menjalankan pemeriksaan pemberian lisensi, prosedur inisialisasi yang tidak banyak berubah dari APK ke APK.
Menyesuaikan manifes
Ketika pengguna mengunduh aplikasi yang menggunakan multi-APK melalui Google Play, APK yang akan digunakan dipilih dengan dua aturan sederhana:
- Manifes harus menunjukkan bahwa APK tersebut memenuhi syarat
- Dari APK yang memenuhi syarat, nomor versi tertinggi akan menang
Sebagai contoh, mari lihat beberapa APK yang dijelaskan sebelumnya, dan asumsikan bahwa setiap APK telah ditetapkan untuk mendukung semua ukuran layar yang lebih besar dari ukuran layar "target". Diambil satu per satu, kemungkinan rentang setiap APK akan terlihat seperti ini:
small | normal | large | xlarge |
small | normal | large | xlarge |
small | normal | large | xlarge |
Namun, dengan menggunakan "nomor versi tertinggi yang menang" , jika kita menetapkan atribut versionCode di setiap APK sehingga merah ≥ hijau ≥ biru, diagram akan secara efektif menciut menjadi berikut:
small | normal | large | xlarg |
Sekarang, mari asumsikan bahwa APK Merah memiliki beberapa persyaratan yang tidak dimiliki oleh dua yang lain. Tujuan Halaman Filter di Google Play Android Panduan developer memiliki daftar lengkap kemungkinan penyebabnya. Sebagai contoh, anggaplah warna merah memerlukan kamera depan. Faktanya, tujuan APK merah secara keseluruhan adalah menggunakan ruang layar ekstra yang tersedia untuk melakukan hal-hal terkait hiburan dengan kamera depan. Tapi, ternyata, Tidak semua perangkat ekstra besar MEMILIKI kamera depan! Mengejutkan!
Untungnya, jika pengguna menjelajahi Google Play dari salah satu perangkat tersebut, Google Play akan melihat manifes tersebut, melihat bahwa Merah mencantumkan kamera depan sebagai persyaratan, dan diam-diam mengabaikannya, yang kemudian menentukan bahwa Merah dan perangkat tersebut tidak berjodoh di dunia digital. Kemudian kita akan melihat bahwa Warna hijau tidak hanya kompatibel dengan perangkat {i>xlarge<i}, tetapi juga tidak peduli apakah ada menghadap ke kamera depan! Aplikasi masih dapat diunduh dari Google Play oleh pengguna, karena meskipun terjadi gangguan dengan kamera depan, masih ada APK yang mendukung layar tersebut ukuran.
Untuk menyimpan semua APK di "jalur" yang terpisah, penting untuk memiliki kode versi yang baik skema baru. Fitur yang direkomendasikan dapat ditemukan di area Kode Versi pada panduan developer kami. Karena contoh kumpulan APK hanya menangani salah satu dari 3 kemungkinan dimensi, cukup pisahkan setiap APK dengan 1.000 dan tingkatkan dari sana. Ini akan terlihat seperti ini:
Biru: 1001, 1002, 1003, 1004...
Hijau: 2001, 2002, 2003, 2004...
Merah:3001, 3002, 3003, 3004...
Dengan menyatukan semuanya, Manifes Android Anda mungkin akan terlihat seperti berikut:
Biru:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> ...
Hijau:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="true" android:xlargeScreens="true" /> ...
Merah:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="3001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="false" android:xlargeScreens="true" /> ...
Perhatikan bahwa secara teknis, beberapa APK akan berfungsi dengan layar dukungan , atau tag layar yang kompatibel. Supports-screens biasanya lebih disukai, dan secara umum, menggunakan kedua tag dalam manifes yang sama adalah ide buruk. Ini membuat segalanya semakin rumit, dan meningkatkan peluang untuk kesalahan. Perhatikan juga bahwa alih-alih memanfaatkan nilai {i>default<i} (kecil dan normal selalu benar secara default), manifes secara eksplisit menetapkan nilai setiap ukuran layar. Hal ini tidak akan membuat Anda pusing. Misalnya, manifes dengan sebuah target SDK < 9 akan membuat xlarge disetel ke false secara otomatis, karena ukuran tersebut belum ada. Jadi, harus jelas!
Meninjau checklist pra-peluncuran Anda
Sebelum mengupload ke Google Play, periksa kembali item berikut. Ingatlah bahwa ini adalah yang secara khusus relevan dengan multi-APK, dan sama sekali tidak merepresentasikan checklist lengkap untuk semua. aplikasi yang diupload ke Google Play.
- Semua APK harus memiliki nama paket yang sama
- Semua APK harus ditandatangani dengan sertifikat yang sama
- Setiap ukuran layar yang Anda inginkan agar mendukung APK, tetapkan ke true di manifes. Setiap ukuran layar yang ingin Anda hindari, tetapkan ke false
- Periksa kembali filter manifes untuk informasi yang bertentangan (APK yang hanya mendukung cupcake di layar XLARGE tidak akan dilihat oleh siapa pun)
- Setiap manifes APK harus unik di setidaknya satu dari layar yang didukung, tekstur OpenGL, atau versi platform
- Coba uji setiap APK pada setidaknya satu perangkat. Jika tidak, Anda memiliki salah satu cara yang paling emulator perangkat yang dapat disesuaikan dalam bisnis yang ada di mesin pengembangan Anda. Cobalah!
Sebaiknya periksa juga APK yang telah dikompilasi sebelum meluncurkannya ke pasar, untuk memastikan tidak kejutan apa pun yang dapat menyembunyikan aplikasi Anda di Google Play. Penggunaan alat "aapt" sebenarnya cukup sederhana. Aapt (Android Asset Packaging Tool) adalah bagian dari proses build untuk membuat dan mengemas aplikasi Android Anda, dan juga merupakan alat yang sangat berguna untuk memeriksanya.
>aapt dump badging package: name='com.example.hello' versionCode='1' versionName='1.0' sdkVersion:'11' uses-permission:'android.permission.SEND_SMS' application-label:'Hello' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application: label='Hello' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.example.hello.HelloActivity' label='Hello' icon='' uses-feature:'android.hardware.telephony' uses-feature:'android.hardware.touchscreen' main supports-screens: 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240'
Ketika Anda memeriksa {i>output<i} aapt, pastikan untuk memeriksa bahwa Anda tidak memiliki nilai yang bertentangan untuk Support-screens dan kompatibel-screens, dan bahwa Anda tidak memiliki "uses-feature" yang tidak diinginkan nilai-nilai yang ditambahkan karena izin yang Anda tetapkan dalam manifes. Pada contoh di atas, APK tidak akan terlihat oleh sebagian besar, jika tidak semua perangkat.
Mengapa? Dengan menambahkan izin yang diperlukan SEND_SMS, persyaratan fitur android.hardware.telephony ditambahkan secara implisit. Karena sebagian besar (jika tidak semua) perangkat xlarge adalah tablet tanpa hardware ponsel di dalamnya, Google Play akan memfilter APK dalam kasus ini, hingga perangkat di masa mendatang akan hadir dengan ukuran yang cukup besar untuk dilaporkan sebagai ukuran layar xlarge, dan memiliki hardware ponsel.
Untungnya, hal ini dapat diperbaiki dengan menambahkan kode berikut ke manifes Anda:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Persyaratan android.hardware.touchscreen
juga ditambahkan secara implisit. Jika ingin APK terlihat di TV yang bukan merupakan perangkat layar sentuh, Anda harus menambahkan kode berikut ke manifes:
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
Setelah Anda melengkapi checklist pra-peluncuran, upload APK ke Google Play. Mungkin diperlukan beberapa saat sebelum aplikasi muncul saat menjelajahi Google Play, tetapi ketika aplikasi muncul, melakukan satu pemeriksaan terakhir. Download aplikasi ke perangkat pengujian apa pun yang mungkin perlu dipastikan bahwa APK menargetkan perangkat yang dimaksud.
Untuk informasi selengkapnya tentang memublikasikan multi-APK di Google Play, baca Dukungan multi-APK.