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 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 multi-APK APK masing-masing meliputi kelas ukuran layar yang berbeda. Anda juga akan mendapatkan beberapa alat yang dibutuhkan untuk membuat pemeliharaan codebase multi-APK semudah mungkin.

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. Hal ini mungkin tampak di awal sebagai meskipun 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 dengan cepat dan mudah, dan 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 adalah satu contoh 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 adalah hal pertama yang harus Anda lakukan pada codebase, dan sejauh ini 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 kita lihat beberapa APK yang dijelaskan sebelumnya, dan asumsikan bahwa setiap APK telah ditetapkan untuk mendukung semua ukuran layar yang lebih besar dari "target" ukuran layar. 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, anggap saja bahwa merah memerlukan kamera depan. Faktanya, tujuan keseluruhan APK merah adalah menggunakan ruang layar yang tersedia untuk melakukan hal-hal yang menghibur 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 melihat bahwa Red mencantumkan kamera depan sebagai persyaratan, dan diam-diam mengabaikannya, setelah dan menyimpulkan bahwa Red dan perangkat itu tidak cocok 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 maka Anda cukup memisahkan setiap APK dengan 1000 dan menambahkannya 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 ini:

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 umumnya merupakan ide yang sangat buruk untuk menggunakan kedua tag dalam manifes yang sama. Ini membuat segala sesuatunya menjadi rumit, dan meningkatkan peluang untuk kesalahan. Perhatikan juga bahwa alih-alih memanfaatkan nilai {i>default<i} (kecil dan normal selalu true 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. Ini sebenarnya cukup sederhana dengan menggunakan "aapt" menyediakan alat command line gcloud. 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 akan terlihat oleh sebagian besar, atau 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, masalah ini mudah diperbaiki dengan menambahkan kode berikut ke manifes:

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