Mengoptimalkan paket tertentu dengan packageScope (Eksperimental)

Anda dapat mengoptimalkan paket tertentu menggunakan R8 dengan packageScope. Fitur ini dirancang sebagai langkah pertama opsional untuk aplikasi yang belum menggunakan R8 dan tidak direkomendasikan untuk aplikasi yang sudah menggunakan R8.

Pertimbangkan apakah akan menggunakan packageScope

Jika aplikasi Anda sudah menggunakan R8, jangan gunakan packageScope, karena konfigurasi ini kurang optimal dalam hal performa dan ukuran aplikasi. Sebagai gantinya, tingkatkan konfigurasi R8 aplikasi Anda dengan aturan keep yang ditingkatkan atau, jika menggunakan mode kompatibilitas, dengan bermigrasi ke mode penuh R8.

Aplikasi yang belum menggunakan R8, tetapi mengadopsi R8, dapat menggunakan packageScope untuk mengelola transisi secara bertahap. Karena R8 menerapkan pengoptimalan yang efektif dan dapat mengubah perilaku aplikasi, cakupan pengoptimalan ini ke paket tertentu yang aman untuk dioptimalkan—seperti AndroidX dan Kotlin—memungkinkan Anda mendapatkan peningkatan performa dengan risiko minimal. Setelah aplikasi Anda stabil, Anda dapat secara bertahap memperluas pengoptimalan ini ke bagian kode dan dependensi lainnya, dengan menguji stabilitas di setiap tahap.

Prasyarat

Menggunakan R8 dengan packageScope memerlukan:

  • Plugin Android Gradle 9.0 atau yang lebih baru.
  • R8 dalam mode penuh, dan bukan mode kompatibilitas.

Mengonfigurasi pengoptimalan

Untuk mengaktifkan pengoptimalan dengan packageScope, selesaikan langkah-langkah berikut.

Memilih library yang akan dioptimalkan

Identifikasi library yang akan dioptimalkan. Sebaiknya mulai dengan library AndroidX dan Kotlin androidx.**, kotlin.**, dan kotlinx.** karena library ini stabil dan telah dikonfigurasi untuk kompatibilitas R8.

Mengaktifkan dukungan untuk menggunakan R8 dengan packageScope

Tambahkan hal berikut ke file gradle.properties project Anda:

android.r8.gradual.support=true

Menyiapkan blok pengoptimalan

Dalam file build.gradle.kts (atau build.gradle) tingkat modul, tambahkan blok optimization ke konfigurasi build rilis Anda. Di dalam blok ini, gunakan packageScope untuk mencantumkan paket tertentu yang ingin Anda optimalkan. Dalam file build.gradle.kts, gabungkan daftar paket Anda dalam setOf().

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

Menguji pengoptimalan

Setelah menerapkan atau memperbarui deklarasi packageScope, uji aplikasi Anda secara menyeluruh untuk memverifikasi bahwa tidak ada error atau perubahan perilaku yang tidak terduga yang terjadi.

Beralih dari mengoptimalkan paket tertentu ke mengoptimalkan seluruh aplikasi Anda

Untuk memaksimalkan manfaat pengoptimalan, Anda harus secara bertahap beralih dari menggunakan packageScope ke menggunakan R8 di seluruh aplikasi Anda. Proses ini melibatkan perluasan cakupan pengoptimalan secara bertahap:

  1. Mulai dengan library yang stabil. Mulai dengan hanya menyertakan library stabil yang banyak digunakan dan kompatibel dengan pengoptimalan R8 dalam daftar packageScope. Mulai dengan library AndroidX dan Kotlin androidx.**, kotlin.**, dan kotlinx.**.
  2. Tambahkan paket secara bertahap. Tambahkan awalan paket baru secara bertahap ke packageScope:
    1. Menilai dependensi. Tinjau library aplikasi Anda. Kandidat yang baik untuk ditambahkan ke daftar packageScope mencakup library Google resmi (misalnya, com.google.**) dan library tangguh lainnya seperti OkHttp (misalnya, okhttp3.** dan okio.**). Prioritaskan library yang tidak melibatkan panggilan kode native, serialisasi, atau refleksi yang berat (JNI).
    2. Prioritaskan berdasarkan ukuran paket. Gunakan APK Analyzer Android Studio untuk mengidentifikasi kontributor terbesar terhadap ukuran aplikasi Anda.
      1. Build AAB atau APK rilis dengan R8 dinonaktifkan.
      2. Buka di Analyzer dan periksa file dex.
      3. Urutkan paket berdasarkan ukuran. Paket terbesar menawarkan laba atas investasi (ROI) tertinggi untuk pengoptimalan. Menargetkan paket ini terlebih dahulu akan memberi Anda pengurangan ukuran yang paling signifikan di awal proses, selama library ini tidak memiliki aturan keep yang terlalu luas. Lihat Memilih library dengan bijak untuk mengetahui informasi selengkapnya.
  3. Verifikasi perubahan perilaku. Setelah menambahkan setiap awalan paket baru, lakukan pengujian komprehensif untuk mendeteksi dan mengatasi regresi atau perilaku yang tidak terduga.
  4. Tambahkan paket aplikasi terakhir. Jika paket aplikasi Anda tidak menggunakan banyak refleksi, sertakan paket aplikasi di packageScope dan tambahkan aturan keep secara bertahap sesuai kebutuhan. Jika paket aplikasi Anda menggunakan banyak refleksi, sertakan paket di packageScope dan tambahkan aturan keep di seluruh paket untuk paket yang diperlukan. Ulangi aturan keep untuk menyempurnakannya.
  5. Beralih ke penggunaan R8 di seluruh aplikasi Anda. Setelah sebagian besar dependensi aplikasi Anda disertakan dalam deklarasi packageScope dan aplikasi Anda stabil, hapus packageScope untuk mengoptimalkan seluruh aplikasi Anda dalam mode penuh.