Mengoptimalkan paket tertentu dengan packageScope (Eksperimental)

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

Mempertimbangkan 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 lebih baik atau, jika menggunakan mode kompatibilitas, dengan bermigrasi ke mode penuh R8.

Untuk aplikasi yang belum menggunakan R8, tetapi sedang mengadopsi R8, gunakan packageScope untuk mengelola transisi secara bertahap. Karena R8 menerapkan pengoptimalan canggih yang dapat mengubah perilaku aplikasi, mencakup pengoptimalan ini ke paket tertentu yang aman untuk dioptimalkan—seperti AndroidX dan Kotlin—memungkinkan Anda mendapatkan peningkatan performa dengan risiko minimal. Setelah aplikasi stabil, Anda dapat memperluas pengoptimalan ini secara bertahap ke seluruh codebase dan dependensi, serta menguji stabilitas di setiap tahap.

Prasyarat

Menggunakan R8 dengan packageScope memerlukan Android Gradle Plugin 9.0 atau yang lebih baru.

Mengonfigurasi pengoptimalan

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

Memilih pustaka yang akan dioptimalkan

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

Mengaktifkan dukungan untuk menggunakan R8 dengan packageScope

Tambahkan kode berikut ke file gradle.properties project Anda:

android.r8.gradual.support=true

Menyiapkan blok pengoptimalan

Di 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, bungkus daftar paket Anda dalam setOf().

Kotlin

android {
  buildTypes {
    release {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

Groovy

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      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.

Beralih dari mengoptimalkan paket tertentu ke mengoptimalkan seluruh aplikasi Anda

Untuk memaksimalkan manfaat pengoptimalan, Anda harus berupaya melakukan transisi secara bertahap dari penggunaan packageScope ke penggunaan R8 di seluruh aplikasi Anda. Proses ini melibatkan perluasan cakupan pengoptimalan secara bertahap:

  1. Mulai dengan library yang stabil. Mulailah dengan hanya menyertakan library yang banyak digunakan dan stabil yang kompatibel dengan pengoptimalan R8 dalam daftar packageScope. Mulai dengan library AndroidX dan Kotlin androidx.**, kotlin.**, dan kotlinx.**.
  2. Tambahkan paket secara inkremental. 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 andal lainnya seperti OkHttp (misalnya, okhttp3.** dan okio.**). Prioritaskan library yang tidak melibatkan refleksi, serialisasi, atau panggilan kode native (JNI) yang berat.
    2. Prioritaskan berdasarkan ukuran paket. Gunakan APK Analyzer Android Studio untuk mengidentifikasi kontributor terbesar pada ukuran aplikasi Anda. 1. Buat AAB atau APK rilis dengan R8 dinonaktifkan. 1. Buka di Penganalisis dan periksa file dex. 1. Urutkan paket menurut ukuran. Paket terbesar menawarkan laba atas investasi (ROI) tertinggi untuk pengoptimalan. Menargetkan yang pertama memberi Anda pengurangan ukuran 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 menyelesaikan regresi atau perilaku yang tidak terduga.
  4. Tambahkan paket aplikasi terakhir. Jika paket aplikasi Anda tidak banyak menggunakan refleksi, sertakan paket aplikasi dalam packageScope dan tambahkan aturan keep secara bertahap sesuai kebutuhan. Jika paket aplikasi Anda menggunakan banyak refleksi, sertakan paket dalam packageScope dan tambahkan aturan penyimpanan di seluruh paket untuk paket yang diperlukan. Lakukan iterasi pada aturan penyimpanan untuk menyaringnya.
  5. Beralihlah 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.