Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Menyiapkan build untuk APK konfigurasi

Anda dapat mengurangi ukuran APK aplikasi di tiap perangkat pengguna dengan menyiapkan build untuk APK konfigurasi (disingkat APK konfig). Tindakan ini menempatkan kode DEX perangkat dan resource yang dapat dijalankan di perangkat mana pun dalam satu APK, serta tiap set kode native dependen perangkat dan resource ke dalam APK tersendiri. Lalu, perangkat hanya akan meminta APK yang diperlukan untuk menjalankan aplikasi. Ini memungkinkan Anda mengurangi ukuran download aplikasi dengan membuat APK yang berisi file untuk kepadatan layar tertentu, ABI, dan/atau bahasa.

APK konfigurasi mirip dengan Multi-APK, dengan sedikit perbedaan penting:

  • Saat ini, APK Multipel hanya tersedia untuk aplikasi yang diinstal, dan APK konfigurasi hanya untuk aplikasi instan.
  • Dengan APK Multipel, satu APK dibuat untuk tiap kombinasi atribut. Dengan APK konfigurasi, ada satu APK dasar dengan kode DEX dependen perangkat, dan satu APK untuk tiap nilai dengan dimensi masing-masing yang bervariasi (yaitu, satu APK per bahasa yang didukung, kepadatan, atau ABI). Misalnya, bayangkan sebuah aplikasi yang bervariasi menurut kepadatan layar dan bahasa, yang mendukung empat kepadatan layar dan tiga bahasa. Dengan APK Multipel, developer akan mengupload 3 * 4 = 12 APK. Dengan APK konfigurasi, developer hanya akan mengupload 1 (dasar) + 3 + 4 = 8 APK. Dengan APK Multipel, hanya satu APK yang akan dikirimkan ke perangkat tertentu. Dengan APK konfigurasi, perangkat menerima APK dasar plus, kemungkinan, satu atau beberapa APK resource di tiap dimensi yang didukung (saat ini bahasa, kepadatan layar, dan ABI).
  • Dengan APK Multipel, kode versi digunakan untuk memilih di antara beberapa APK yang kompatibel untuk perangkat tertentu. APK konfigurasi tidak menggunakan pengurutan yang telah ditentukan oleh developer. Pengurutan akan ditentukan oleh penargetan APK yang tersedia.
  • APK konfigurasi mendukung dimensi penargetan baru language. Multi-APK tidak mendukungnya.

Prasyarat

Sebelum menyiapkan build untuk APK konfigurasi, tinjau langkah-langkah berikut untuk memastikan build Anda siap, dan pastikan bahwa Anda memiliki konfigurasi alat yang Anda perlukan di Android Studio:

  • Setel versi SDK minimum modul aplikasi instan ke 21 atau lebih tinggi
  • Gunakan Android Studio 3.0 atau lebih tinggi.

Menyiapkan build untuk APK konfigurasi

Guna menyiapkan build untuk APK konfigurasi berdasarkan bahasa, tambahkan blok bahasa ke blok splits pada modul fitur, dan tentukan generatePureSplits = true dalam blok android. Untuk informasi selengkapnya tentang cara mengonfigurasi blok splits, lihat Mengonfigurasi build untuk multi-APK.

    android {
      ...
      generatePureSplits = true
      splits {
        abi {
          enable = true
        }
        density {
          enable = true
        }
        language {
          enable = true
          include "es-rMX", "zh", "en"
        }
      }
    }
    

Nilai bahasa ada dalam format yang dijelaskan dalam artikel tentang Menyediakan resource alternatif.

Menyajikan APK konfigurasi

Tidak seperti menggunakan APK Multipel, developer tidak menentukan pengurutan berdasarkan beberapa APK kofnigurasi yang setara. Jadi, bagaimana cara Play menentukan APK mana yang akan disajikan?

Untuk ABI, Play memilih dari antara APK yang kompatibel menggunakan pengurutan tetap yang sama untuk setiap perangkat. Pengurutan tersebut adalah x86_64, x86, mips64, mips, arm64-v8a, armeabi-v7a, armeabi. Misalnya, jika perangkat mendukung x86 dan armeabi-v7a, dan APK tersedia untuk keduanya, APK x86 akan disajikan (beserta dasarnya).

Untuk kepadatan, Play memilih APK yang paling dekat dengan kepadatan layar perangkat dari perangkat yang tersedia.

Pemilihan APK menurut bahasa prosesnya lebih rumit.

Masalah khusus untuk penargetan bahasa

Pengguna mungkin berharap Play mencoba mencocokkan lokal pengguna dengan tepat. Jika lokalnya adalah en-GB, Play mungkin akan menyajikan APK yang ditargetkan ke en-GB, jika tersedia. Jika tidak, akan dikembalikan ke en. Akan terjadi dua masalah dengan pendekatan tersebut:

  1. Tidak ada persyaratan bahwa APK konfigurasi harus berisi terjemahan setiap string, sama seperti tidak ada persyaratan untuk file strings.xml. Anda bisa saja (dan ini bahkan sudah menjadi praktik umum) menambahkan bahasa hanya untuk satu string atau beberapa string. Misalnya, en/strings.xml mungkin berisi “car” dan “truck”, dan en-rGB/strings.xml mungkin hanya berisi “lorry”. Jadi, karena set terjemahan yang diperlukan untuk perangkat apa saja mungkin ada di sejumlah file strings.xml, maka file tersebut dapat dimuat dalam beberapa APK konfigurasi.
  2. Perangkat Android memiliki grafik fallback yang sangat bervariasi. Rilis Android dapat mengubah grafik fallback (lihat, misalnya, panduan Bahasa dan lokal). Selain itu, OEM menyesuaikan urutan fallback. (Misalnya, apakah “zh” lebih memilih “zh-TW” atau “zh-CN”, itu bergantung pada OEM.) Play tidak selalu mengetahui urutan fallback yang digunakan oleh perangkat yang meminta.

Play mengatasi masalah tersebut dengan menyajikan semua APK konfigurasi yang ditargetkan ke bahasa yang subtag bahasanya (bagian sebelum tanda hubung) cocok dengan subtag bahasa lokal pilihan pengguna. Ini bergantung pada hasil pengamatan bahwa algoritme fallback biasanya tidak kembali di berbagai bahasa. Berikut contohnya:

Bahasa lokal pengguna adalah de-CH.
APK yang tersedia adalah de, de-CH, de-AT, dan fr.
Play menyajikan de, de-CH, dan de-AT, tetapi tidak menyajikan fr.

Play juga menangani kasus tertentu yang sangat umum ketika bahasa harus dikelompokkan meski memiliki subtag bahasa yang tidak cocok, seperti fil/tag.

Pengelompokan dilakukan oleh Play pada waktu penyajian dan developer tidak perlu melakukan tindakan apa pun.

Pemecahan masalah dan pertanyaan umum (FAQ)

  • Gradle tidak menghasilkan APK konfigurasi, dan sebaliknya, menampilkan pesan berikut
        Variant ..., MinSdkVersion 18 is too low (<21) to support pure splits,
        reverting to full APKs
        

    Tentukan minSdkVersion = 21 di file build.gradle modul aplikasi instan

  • Plugin Gradle menampilkan pesan berikut:
        > Configure project :base
        Pure splits are not supported by PlayStore yet.
        

    Ini adalah masalah umum. Abaikan pesan ini.

  • Bagaimana pengaruh APK konfigurasi terhadap batas 4 MB?

    Ukuran fitur dihitung dengan menambahkan ukuran APK fitur, ukuran APK fitur dasar, dan set terbesar APK konfigurasi yang dapat dikirimkan ke perangkat. Misalnya, jika fitur memiliki tiga APK bahasa di APK dasar, dua APK kepadatan di dasar, dan dua APK kepadatan di APK fitur, ukuran fitur akhir diperoleh dengan menambahkan ukuran APK fitur, ukuran APK dasar, APK bahasa terbesar dan kepadatan terbesar untuk dasar, serta APK kepadatan terbesar untuk fitur.

Masalah umum

  • Gradle gagal membuat APK ABI untuk beberapa build inkremental (https://issuetracker.google.com/69680755 ). Masalah ini dapat diatasi dengan menghapus dan membuat ABI APK lagi.
  • Saat ini, alat build tidak mampu membuat APK konfigurasi multi-dimensi. Misalnya, project dapat berisi resource di res/drawable-fr-xhdpi untuk perangkat xhdpi dalam bahasa Prancis, tetapi Gradle tidak dapat memasukkan resource semacam itu ke dalam APK konfigurasi. Resource tersebut kemudian ditempatkan di APK dasar atau fitur.