Membuat multi-APK untuk ukuran layar yang berbeda-beda

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 perlu menerapkan beberapa praktik baik sejak awal, dan lebih menghindari masalah yang tidak perlu dalam proses pengembangan. Tutorial ini menunjukkan cara membuat multi-APK untuk aplikasi, yang masing-masing mencakup kelas ukuran layar yang berbeda. Anda juga akan mendapatkan beberapa alat yang diperlukan untuk memudahkan pemeliharaan codebase multi-APK.

Mengonfirmasi bahwa Anda memerlukan multi-APK

Saat mencoba membuat aplikasi yang berfungsi di berbagai ukuran perangkat Android, tentu Anda ingin aplikasi memanfaatkan semua ruang yang tersedia di perangkat yang lebih besar, tanpa mengorbankan kompatibilitas atau kegunaan pada layar yang lebih kecil. Ini mungkin tampak di awal karena dukungan multi-APK adalah solusi terbaik, tetapi ini sering kali tidak sesuai. Bagian Menggunakan APK Tunggal Sebagai gantinya pada panduan developer multi-APK berisi informasi berguna tentang cara melakukannya dengan satu APK, termasuk penggunaan support library kami. Anda juga harus membaca panduan untuk mendukung beberapa layar, dan bahkan ada support library yang dapat Anda download 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 khawatir tentang preferensi pasar, perilaku akibat "upgrade" dari satu APK ke APK berikutnya, atau kesesuaian APK dengan kelas perangkatnya

Bagian selanjutnya dalam pelajaran ini mengasumsikan bahwa Anda telah meneliti topik, mempelajari materi dalam resource yang ditautkan, dan menentukan bahwa multi-APK adalah jalur yang tepat untuk aplikasi Anda.

Membuat diagram kebutuhan Anda

Mulailah dengan membuat diagram sederhana untuk menentukan dengan cepat berapa banyak APK yang Anda butuhkan, dan ukuran layar yang dicakup setiap APK. Untungnya, tidak sulit membuat diagram kebutuhan Anda dengan cepat dan mudah, serta memiliki referensi untuk digunakan 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 ini salah satu contoh cara menerapkan setiap APK ke rentang ukuran layar tertentu.

small normal large xlarge

Bergantung pada kebutuhan, Anda juga dapat memiliki dua APK, "small dan lainnya" atau "xlarge dan lainnya". Mewarnai pada diagram juga mempermudah komunikasi intra-tim. Sekarang Anda cukup menyebut setiap APK sebagai "biru", "hijau", atau "merah", berapa pun banyaknya jenis layar yang tercakup.

Memasukkan semua kode umum dan resource dalam project library

Baik Anda memodifikasi aplikasi Android yang sudah ada maupun memulai dari awal, ini adalah hal pertama yang harus Anda lakukan pada codebase, dan yang paling penting. Semua yang masuk ke project library hanya perlu diperbarui sekali (misalnya string yang dilokalkan ke bahasa, tema warna, bug yang diperbaiki dalam kode bersama), yang akan meningkatkan waktu pengembangan dan mengurangi kemungkinan kesalahan yang dapat dengan mudah dihindari.

Catatan: Meskipun detail penerapan cara membuat dan menyertakan project library berada di luar cakupan tutorial ini, Anda dapat memperoleh informasi selengkapnya dengan membaca Membuat Library Android.

Jika Anda mengonversi aplikasi yang sudah ada untuk menggunakan dukungan multi-APK, periksa codebase untuk setiap file string yang dilokalkan, daftar nilai, warna tema, ikon menu, dan tata letak yang tidak akan berubah di seluruh APK, dan masukkan semuanya ke dalam project library. Kode yang tidak akan banyak berubah juga harus dimasukkan ke project library. Anda mungkin perlu memperluas class ini 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 pindahkan ke APK individual jika perlu. Ini jauh lebih mudah untuk dikelola dalam jangka panjang daripada menambahkannya ke satu, lalu yang lain, lalu yang lain, kemudian beberapa bulan kemudian mencoba mencari tahu apakah blob ini dapat dipindahkan ke bagian library tanpa mengacaukan apa pun.

Membuat project APK baru

Harus ada project Android terpisah untuk setiap APK yang akan Anda rilis. Untuk memudahkan pengaturan, 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 tidak harus memiliki nama paket yang sama dengan library. Jika Anda memiliki 3 APK yang mengikuti skema yang dijelaskan sebelumnya, direktori utama 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 Anda dalam project library, lalu perluas Aktivitas tersebut dalam project APK Anda. Memiliki aktivitas awal yang ditentukan dalam project library memberi Anda kesempatan untuk menempatkan semua inisialisasi aplikasi di satu tempat, sehingga setiap APK tidak perlu mengimplementasikan kembali tugas "universal" seperti menginisialisasi Analytics, menjalankan pemeriksaan pemberian lisensi, dan prosedur inisialisasi lainnya yang tidak banyak berubah dari APK ke APK.

Menyesuaikan manifes

Saat pengguna mendownload aplikasi yang menggunakan multi-APK melalui Google Play, APK yang tepat untuk digunakan akan 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 "targetnya". Jika dilihat 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 aturan "nomor versi tertinggi yang menang", jika kita menetapkan atribut versionCode di setiap APK seperti merah ≥ hijau ≥ biru, diagram akan secara efektif menciut menjadi seperti ini:

small normal large xlarg

Sekarang, mari asumsikan bahwa APK Merah memiliki beberapa persyaratan yang tidak dimiliki oleh dua yang lain. Halaman Filter di Google Play pada panduan Developer Android memiliki daftar lengkap kemungkinan penyebabnya. Sebagai contoh, anggaplah bahwa warna merah membutuhkan kamera depan. Bahkan, tujuan utama APK merah adalah menggunakan ruang layar tambahan yang tersedia untuk melakukan hal-hal hiburan dengan kamera depan. Tapi, ternyata, tidak semua perangkat xlarge MEMILIKI kamera depan! Mengejutkan!

Untungnya, jika pengguna menjelajahi Google Play dari satu perangkat tersebut, Google Play akan melihat manifes, melihat bahwa Merah mencantumkan kamera depan sebagai persyaratan, dan diam-diam mengabaikannya, setelah menentukan bahwa Merah dan perangkat itu tidak sama persis di dunia digital. Kemudian akan terlihat bahwa Hijau tidak hanya kompatibel dengan perangkat xlarge, tetapi juga tidak peduli apakah ada kamera depan atau tidak. Aplikasi masih dapat didownload dari Google Play oleh pengguna, karena meskipun terjadi hal tidak terduga pada kamera depan, masih ada APK yang mendukung ukuran layar tersebut.

Untuk menyimpan semua APK di "jalur" yang terpisah, Anda harus memiliki skema kode versi yang baik. Fitur yang direkomendasikan dapat ditemukan di area Kode Versi dalam panduan developer kami. Karena contoh kumpulan APK hanya menangani salah satu dari 3 kemungkinan dimensi, masing-masing APK cukup dipisah per 1.000 dan ditingkatkan dari jumlah tersebut. Ini mungkin terlihat seperti:

Biru: 1001, 1002, 1003, 1004...
Hijau: 2001, 2002, 2003, 2004...
Merah:3001, 3002, 3003, 3004...

Dengan menggabungkan 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 tag supported-screens, atau tag kompatibel-screens. Supports-screens biasanya lebih disukai, dan secara umum, menggunakan kedua tag dalam manifes yang sama adalah ide yang sangat buruk. Hal ini membuat segalanya menjadi lebih rumit, dan meningkatkan peluang untuk kesalahan. Selain itu, perhatikan bahwa, bukannya memanfaatkan nilai default (small dan normal selalu benar secara default), tetapi manifes secara eksplisit menetapkan nilai untuk setiap ukuran layar. Hal ini tidak akan membuat Anda pusing. Misalnya, manifes dengan SDK target < 9 akan memiliki xlarge yang ditetapkan secara otomatis ke false, karena ukuran tersebut belum ada. Jadi, harus jelas!

Meninjau checklist pra-peluncuran Anda

Sebelum mengupload ke Google Play, periksa kembali item berikut. Ingat bahwa hal ini khususnya 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, setel ke false
  • Periksa kembali filter manifes untuk informasi yang bertentangan (APK yang hanya mendukung cupcake di layar XLARGE tidak akan terlihat oleh siapa pun)
  • Setiap manifes APK harus unik di setidaknya satu dari layar, tekstur OpenGL, atau versi platform yang didukung
  • Coba uji setiap APK pada setidaknya satu perangkat. Jika tidak, Anda memiliki salah satu emulator perangkat yang paling dapat disesuaikan dalam bisnis yang ada di mesin pengembangan Anda. Cobalah!

Sebaiknya periksa juga APK yang dikompilasi sebelum mengirimkannya ke pasar, untuk memastikan tidak ada kejutan yang dapat menyembunyikan aplikasi Anda di Google Play. Menggunakan alat "aapt" sebenarnya cukup sederhana. Aapt (Android Asset Packaging Tool) adalah bagian dari proses build untuk membuat dan memaketkan aplikasi Android, serta 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'

Saat memeriksa output aapt, pastikan untuk memeriksa bahwa Anda tidak memiliki nilai yang bertentangan untuk supports-screens dancompatible-screens, serta bahwa Anda tidak memiliki nilai "uses-feature" yang tidak diinginkan yang ditambahkan sebagai hasil dari izin yang ditetapkan dalam manifes. Dalam contoh di atas, APK tidak akan terlihat oleh sebagian besar perangkat, bahkan untuk 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 mudah 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 perlu beberapa saat agar aplikasi muncul saat menjelajahi Google Play, tetapi saat aplikasi muncul, lakukan satu pemeriksaan terakhir. Download aplikasi ke perangkat pengujian apa pun yang mungkin Anda miliki untuk memastikan bahwa APK menargetkan perangkat yang dituju.

Untuk informasi selengkapnya tentang memublikasikan multi-APK di Google Play, baca Dukungan multi-APK.