Mengaktifkan pengoptimalan aplikasi

Untuk mendapatkan pengalaman pengguna terbaik, Anda harus mengoptimalkan aplikasi agar sekecil dan secepat mungkin. Pengoptimal aplikasi kami, yang disebut R8, menyederhanakan aplikasi Anda dengan menghapus kode dan resource yang tidak terpakai, menulis ulang kode untuk mengoptimalkan performa runtime, dan banyak lagi. Bagi pengguna Anda, hal ini berarti:

  • Waktu mulai lebih cepat
  • Peningkatan performa rendering dan runtime
  • Lebih sedikit ANR

Untuk mengaktifkan pengoptimalan aplikasi, tetapkan isMinifyEnabled = true (untuk pengoptimalan kode) dan isShrinkResources = true (untuk pengoptimalan resource) dalam skrip build tingkat aplikasi build rilis seperti yang ditunjukkan dalam kode berikut. Sebaiknya Anda selalu mengaktifkan kedua setelan tersebut. Sebaiknya aktifkan pengoptimalan aplikasi hanya di versi akhir aplikasi yang Anda uji sebelum dipublikasikan—biasanya build rilis—karena pengoptimalan meningkatkan waktu build project dan dapat membuat proses debug lebih sulit karena cara pengoptimalan mengubah kode.

Kotlin

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            isMinifyEnabled = true

            // Enables resource shrinking.
            isShrinkResources = true

            proguardFiles(
                // Default file with automatically generated optimization rules.
                getDefaultProguardFile("proguard-android-optimize.txt"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            minifyEnabled true

            // Enables resource shrinking.
            shrinkResources true

            // Default file with automatically generated optimization rules.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

            ...
        }
    }
}

Mengoptimalkan penyusutan resource untuk aplikasi yang lebih kecil

Plugin Android Gradle (AGP) versi 8.12.0 memperkenalkan penyingkatan resource yang dioptimalkan, yang bertujuan untuk mengintegrasikan pengoptimalan resource dan kode untuk membuat aplikasi yang lebih kecil dan lebih cepat.

Mengaktifkan penyingkatan resource yang dioptimalkan

Untuk mengaktifkan pipeline penyingkatan resource yang dioptimalkan baru untuk versi AGP sebelum 9.0.0, tambahkan kode berikut ke file gradle.properties project Anda:

android.r8.optimizedResourceShrinking=true

Jika Anda menggunakan AGP 9.0.0 atau versi yang lebih baru, Anda tidak perlu menyetel android.r8.optimizedResourceShrinking=true. Penyingkatan resource yang dioptimalkan diterapkan secara otomatis saat isShrinkResources = true diaktifkan dalam konfigurasi build Anda.

Memverifikasi dan mengonfigurasi setelan pengoptimalan R8

Untuk mengaktifkan R8 menggunakan kemampuan pengoptimalan penuhnya, hapus baris berikut dari file gradle.properties project Anda, jika ada:

android.enableR8.fullMode=false # Remove this line from your codebase.

Perhatikan bahwa mengaktifkan pengoptimalan aplikasi membuat pelacakan tumpukan sulit dipahami, terutama jika R8 mengganti nama class atau metode. Untuk mendapatkan pelacakan tumpukan yang sesuai dengan kode sumber Anda, lihat Memulihkan pelacakan tumpukan asli.

Jika R8 diaktifkan, Anda juga harus membuat Profil Startup untuk performa startup yang lebih baik.

Jika Anda mengaktifkan pengoptimalan aplikasi dan menyebabkan error, berikut beberapa strategi untuk memperbaikinya:

Jika Anda tertarik untuk mengoptimalkan kecepatan build, lihat Mengonfigurasi cara R8 berjalan untuk mengetahui informasi tentang cara mengonfigurasi R8 berdasarkan lingkungan Anda.

Perubahan perilaku versi AGP dan R8

Tabel berikut menguraikan fitur utama yang diperkenalkan dalam berbagai versi Plugin Gradle Android (AGP) dan compiler R8.

Versi AGP Fitur yang diperkenalkan
9.0 Penciutan resource yang dioptimalkan: Diaktifkan secara default (dikontrol menggunakan android.r8.optimizedResourceShrinking). Penciutan resource yang dioptimalkan membantu mengintegrasikan penciutan resource dengan pipeline pengoptimalan kode, sehingga menghasilkan aplikasi yang lebih kecil dan lebih cepat. Dengan mengoptimalkan referensi kode dan resource secara bersamaan, alat ini mengidentifikasi dan menghapus resource yang direferensikan secara eksklusif dari kode yang tidak digunakan. Hal ini merupakan peningkatan signifikan dibandingkan dengan proses pengoptimalan terpisah sebelumnya.

Hal ini sangat berguna untuk aplikasi yang membagikan resource dan kode yang substansial di berbagai vertikal faktor bentuk, dengan peningkatan terukur lebih dari 50% dalam ukuran aplikasi. Pengurangan ukuran yang dihasilkan akan menghasilkan download yang lebih kecil, penginstalan yang lebih cepat, dan pengalaman pengguna yang lebih baik dengan startup yang lebih cepat, rendering yang lebih baik, dan lebih sedikit ANR.

Pemfilteran aturan library: Dukungan untuk opsi global (misalnya, -dontobfuscate) dalam aturan konsumen library telah dihentikan, dan aplikasi akan memfilter opsi tersebut. Untuk mengetahui informasi selengkapnya, lihat Menambahkan opsi global.

Pemeriksaan null Kotlin: Dioptimalkan secara default (dikontrol menggunakan -processkotlinnullchecks). Versi ini juga memperkenalkan peningkatan signifikan dalam kecepatan build. Untuk mengetahui informasi selengkapnya, lihat Opsi global untuk pengoptimalan tambahan.

Mengoptimalkan paket tertentu: Anda dapat menggunakan packageScope untuk mengoptimalkan paket tertentu. Fitur ini dalam dukungan eksperimental. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan paket tertentu dengan packageScope.

Dioptimalkan secara default: Dukungan untuk getDefaultProguardFile("proguard-android.txt") telah dihentikan, karena mencakup -dontoptimize, yang harus dihindari. Sebagai gantinya, gunakan "proguard-android-optimize.txt". Jika Anda perlu menonaktifkan pengoptimalan secara global di aplikasi, tambahkan tanda secara manual ke file proguard.
8.12 Penciutan resource: Dukungan awal ditambahkan (Nonaktif secara default. Aktifkan penggunaan isShrinkResources). Penciutan resource bekerja bersama R8 untuk mengidentifikasi dan menghapus resource yang tidak digunakan secara efektif.

Penelusuran ulang Logcat: Dukungan untuk penelusuran ulang otomatis di jendela Logcat Android Studio.
8.6 Penelusuran ulang yang ditingkatkan: Menyertakan penelusuran ulang nomor baris dan nama file secara default untuk semua level minSdk (sebelumnya memerlukan minSdk 26+ di versi 8.2).

Memperbarui R8 membantu memastikan bahwa stack trace dari build yang di-obfuscate dapat dibaca dengan mudah dan jelas. Versi ini meningkatkan pemetaan nomor baris dan file sumber, sehingga alat seperti Logcat Android Studio dapat secara otomatis melacak ulang error ke kode sumber asli dengan lebih mudah.
8.0 Mode penuh secara default: Mode penuh R8 memberikan pengoptimalan yang jauh lebih efektif. Opsi ini diaktifkan secara default. Anda dapat memilih untuk tidak ikut menggunakan android.enableR8.fullMode=false.
7,0 Mode penuh tersedia: Diperkenalkan sebagai fitur keikutsertaan menggunakan android.enableR8.fullMode=true. Mode penuh menerapkan pengoptimalan yang lebih canggih dengan membuat asumsi yang lebih ketat tentang cara kode Anda menggunakan refleksi dan fitur dinamis lainnya. Meskipun mengurangi ukuran aplikasi dan meningkatkan performa, hal ini mungkin memerlukan aturan keep tambahan untuk mencegah kode yang diperlukan dihapus.