Membuat multi-APK untuk berbagai tekstur GL

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, hal yang penting untuk menerapkan beberapa praktik baik sejak awal, dan mencegah sakit kepala yang tidak perlu lebih lanjut dalam proses pengembangan. Tutorial ini menunjukkan cara membuat multi-APK aplikasi, masing-masing mendukung subset yang berbeda dari format tekstur OpenGL. 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 berfungsi di semua aplikasi yang didukung Android perangkat seluler, Anda tentu ingin aplikasi Anda terlihat paling baik di setiap perangkat, apa pun faktanya mereka tidak semua mendukung rangkaian tekstur GL yang sama. Mungkin di awal akan terlihat seolah-olah dukungan multi-APK adalah solusi terbaik, tetapi sering kali tidak demikian. Menggunakan APK Tunggal Bagian dari panduan developer multi-APK berisi beberapa informasi berguna tentang cara melakukannya dengan satu APK, termasuk cara mendeteksi tekstur yang didukung format saat runtime. Tergantung situasinya, mungkin akan lebih mudah untuk memaketkan semua format dengan aplikasi Anda, dan cukup pilih yang akan digunakan saat runtime.

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

Panduan Developer Android menyediakan referensi praktis dari beberapa tekstur umum yang didukung pada lapisan supports-gl-texture halaman kami. Halaman ini juga berisi beberapa petunjuk tentang jenis ponsel (atau kelompok ponsel) yang didukung format tekstur tertentu. Perlu diketahui bahwa sebaiknya Anda mendukung salah satu APK ETC1, karena format tekstur tersebut didukung oleh semua perangkat yang didukung Android yang mendukung OpenGL ES spesifikasi 2.0.

Karena sebagian besar perangkat Android mendukung lebih dari satu format tekstur, Anda harus membuat urutan preferensi. Buat diagram yang menyertakan semua format yang akan digunakan aplikasi Anda dukungan teknis IT. Sel paling kiri akan menjadi prioritas terendah (Ini mungkin ETC1, yang solid dalam hal performa dan kompatibilitas). Kemudian beri warna pada diagram sehingga tiap sel merepresentasikan APK.

ETC1 ATI PowerVR

Pewarnaan pada bagan tidak hanya membuat panduan ini tidak terlalu monokrom - Ini juga memiliki cara membuat komunikasi antar tim lebih mudah- Anda kini dapat menyebut setiap APK sebagai "biru", "hijau", atau "merah", bukan "Yang mendukung format tekstur ETC1", dll.

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 menggunakan beberapa aturan sederhana:

  • Manifes harus menunjukkan bahwa APK tersebut memenuhi syarat
  • Dari APK yang memenuhi syarat, nomor versi tertinggi akan menang
  • Jika salah satu format tekstur yang tercantum dalam APK didukung oleh perangkat di pasar, perangkat tersebut dianggap memenuhi syarat

Sehubungan dengan Tekstur GL, aturan terakhir di atas menjadi penting. Artinya, untuk Misalnya, sangat berhati-hati saat menggunakan format GL yang berbeda dalam aplikasi yang sama. Jika Anda menggunakan PowerVR 99% sepanjang waktu, tetapi menggunakan ETC1 untuk, katakanlah, layar pembuka Anda... Kemudian, manifes Anda akan mengindikasikan dukungan untuk kedua format tersebut. Perangkat yang hanya mendukung ETC1 akan dianggap kompatibel, aplikasi Anda akan didownload, dan pengguna akan melihat beberapa error yang mendebarkan membuat pesan teks. Kasus yang umum adalah jika Anda menggunakan multi-APK secara khusus untuk perangkat yang berbeda berdasarkan dukungan tekstur GL, akan ada satu format tekstur per APK.

Ini sebenarnya membuat dukungan tekstur sedikit berbeda dari dua multi-APK lainnya seperti dimensi, tingkat API, dan ukuran layar. Setiap perangkat hanya memiliki satu level API dan satu layar ukuran file, dan APK bebas untuk mendukung rentangnya. Dengan tekstur, APK umumnya akan mendukung satu tekstur, dan perangkat akan mendukung banyak tekstur. Akan sering terjadi tumpang tindih dalam satu perangkat yang mendukung banyak APK, tetapi solusinya sama: Kode versi.

Contohnya, ambil beberapa perangkat, dan lihat berapa banyak APK yang didefinisikan sebelumnya yang sesuai untuk masing-masing perangkat perangkat seluler.

FooPhone Nexus S Evo
ETC1 ETC1 ETC1
PowerVR ATI TC

Dengan asumsi bahwa format PowerVR dan ATI lebih disukai daripada ETC1 jika tersedia, daripada menurut "nomor versi tertinggi menang" aturan, jika kita menetapkan atribut versionCode di setiap APK sehingga merah ≥ hijau ≥ biru, maka Merah dan Hijau akan selalu dipilih daripada Biru pada yang mendukungnya, dan jika ada perangkat yang mendukung Merah dan Hijau, merah akan dipilih.

Untuk menyimpan semua APK di "jalur" terpisah, penting untuk memiliki kode versi yang baik skema baru. Fitur yang direkomendasikan dapat ditemukan di area Kode Versi dalam panduan developer kami. Sejak contoh kumpulan APK hanya berhubungan dengan salah satu dari 3 kemungkinan dimensi, memisahkan setiap APK dengan 1000 dan bertambah dari sana. Ini mungkin terlihat seperti:

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-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

Hijau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

Merah:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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
  • 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, hal ini dapat 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 agar aplikasi muncul saat menjelajahi Google Play. Namun saat aplikasi muncul, lakukan satu pemeriksaan terakhir. Download aplikasi ke perangkat uji apa pun yang mungkin Anda miliki untuk memastikan bahwa APK menargetkan perangkat yang dituju. Selamat, Anda sudah selesai!