Menganalisis build Anda dengan APK Analyzer

Android Studio menyertakan APK Analyzer yang memberikan analisis langsung tentang komposisi APK atau Android App Bundle Anda setelah proses build selesai. Penggunaan APK Analyzer dapat mengurangi waktu yang diperlukan untuk men-debug masalah terkait file DEX dan resource dalam aplikasi Anda, serta membantu mengurangi ukuran APK Anda. Alat ini juga tersedia dari command line dengan apkanalyzer.

Dengan APK Analyzer, Anda dapat menyelesaikan hal berikut:

  • Melihat ukuran absolut dan relatif file dalam aplikasi, seperti file resource DEX dan Android.
  • Memahami komposisi file DEX.
  • Melihat versi final file dalam aplikasi dengan cepat, seperti file AndroidManifest.xml.
  • Membandingkan dua APK atau app bundle secara berdampingan.

Ada tiga cara untuk mengakses Penganalisis APK saat suatu project terbuka:

  • Tarik APK atau app bundle ke dalam jendela Editor Android Studio.
  • Beralihlah ke tampilan Project di jendela Project, lalu klik dua kali APK di direktori build/output/apks/ default.
  • Pilih Build > Analyze APK di panel menu, lalu pilih APK atau app bundle Anda

Melihat informasi file dan ukuran

APK adalah file yang mengikuti format file ZIP. Penganalisis APK menampilkan setiap file atau folder sebagai entity dengan fungsionalitas ekspansi yang disediakan untuk mengakses folder. Hierarki entity ini mencerminkan struktur file dan folder dalam file APK tersebut.

Penganalisis APK menunjukkan nilai ukuran file mentah dan ukuran file download untuk setiap entity, seperti ditunjukkan pada gambar 1. Raw File Size mewakili ukuran entity yang telah diekstrak pada disk, sementara Download Size mewakili perkiraan ukuran terkompresi entity sebagaimana yang akan dikirim oleh Google Play. % of Total Download Size mewakili persentase total ukuran download APK yang diwakili entity.

Gambar 1. Ukuran file di Penganalisis APK

Melihat AndroidManifest.xml

Jika project Anda menyertakan beberapa file AndroidManifest.xml (misalnya untuk ragam produk), atau menyertakan library yang juga menyediakan file manifes, maka akan digabung menjadi satu file dalam aplikasi Anda. File manifes ini biasanya berupa file biner di dalam APK atau app bundle, tetapi saat dipilih dalam APK Analyzer, format XML entity ini akan direkonstruksi dan ditampilkan. Penampil ini memungkinkan Anda untuk memahami setiap perubahan yang mungkin telah dibuat untuk aplikasi selama proses build. Misalnya, Anda dapat melihat bagaimana file AndroidManifest.xml dari library yang menjadi dependensi aplikasi Anda digabungkan ke dalam file AndroidManifest.xml akhir.

Selain itu, penampil ini menyediakan beberapa kapabilitas lint, dan peringatan atau error ditampilkan di sudut kanan atas. Gambar 2 menunjukkan error yang dilaporkan untuk file manifes yang dipilih.

Gambar 2. Ikon error muncul di margin kanan untuk file manifes yang dipilih

Melihat file DEX

Penampil file DEX pada APK Analyzer memberi Anda akses langsung ke informasi pokok dalam file DEX aplikasi Anda. Class, paket, referensi total, dan jumlah deklarasi disediakan di dalam penampil, yang dapat membantu Anda memutuskan apakah akan menggunakan multidex atau tidak, atau cara menghapus dependensi untuk mendapatkan ukuran di bawah batas DEX 64K.

Gambar 3 menunjukkan aplikasi berukuran sedang yang berada di bawah batas DEX 64K. Setiap paket, class, dan metode di dalam file DEX mencantumkan jumlah di kolom Defined Method dan Referenced Methods. Kolom Referenced Methods menghitung semua metode yang direferensikan oleh file DEX. Jumlah ini biasanya mencakup metode yang ditentukan dalam kode Anda, library dependensi, dan metode yang ditentukan dalam paket Java dan Android standar yang digunakan oleh kode tersebut—ini adalah metode yang memengaruhi batas metode 64k di setiap file DEX. Kolom Defined Methods hanya menghitung metode yang ditentukan dalam salah satu file DEX Anda, sehingga angka ini merupakan subset Referenced Methods. Perhatikan bahwa saat Anda memaketkan dependensi dalam aplikasi, metode yang ditentukan dalam dependensi tersebut akan ditambahkan ke kedua jumlah metode. Selain itu, perhatikan bahwa minifikasi dan penyingkatan kode masing-masing juga secara signifikan dapat mengubah isi file DEX setelah kode sumber dikompilasi.

Gambar 3. Aplikasi berukuran sedang

Memfilter tampilan hierarki file DEX

Tepat di atas daftar Class, Penganalisis APK menyediakan filter untuk melihat isi file DEX yang dipilih.

Gambar 4. Filter DEX diatur untuk menampilkan kolom dan metode untuk BuildConfig

Untuk menggunakan filter guna menampilkan semua metode dan kolom dalam sebuah class, lakukan langkah berikut:

  1. Dalam daftar File, pilih file classes.dex.
  2. Dalam daftar Class, buka dan pilih sebuah class.
  3. Luaskan class yang Anda pilih.
  4. Klik Show fields untuk menampilkan atau menyembunyikan kolom class.
  5. Klik Show methods untuk menampilkan atau menyembunyikan metode class.
  6. Klik Show all referenced methods or fields untuk menampilkan atau menyembunyikan paket, class, metode, dan kolom yang direferensikan. Dalam tampilan hierarki, node yang dicetak miring adalah referensi yang tidak memiliki definisi dalam file DEX yang dipilih.

    File DEX dapat mereferensikan metode dan kolom yang ditentukan dalam file berbeda. Misalnya, System.out.println() adalah referensi ke metode println() dalam framework Android.

Memuat pemetaan ProGuard

Di samping ikon pemfilteran terdapat ikon pemetaan ProGuard. Ikon ini berwarna abu-abu sampai Anda memuat sekumpulan file pemetaan ProGuard yang menambahkan fungsionalitas ke penampil DEX, seperti men-deobfuscate nama (mapping.txt), menampilkan node yang telah dihapus (usage.txt), dan menunjukkan node yang tidak dapat dihapus (seeds.txt). File pemetaan ProGuard yang Anda impor harus berasal dari build yang sama dengan yang menghasilkan file DEX dengan penyingkatan kode aktif. Untuk mempelajari lebih lanjut, lihat Menyingkat, meng-obfuscate, dan mengoptimalkan aplikasi.

Gambar 5. Memuat pemetaan ProGuard

Untuk memuat file pemetaan ProGuard, lakukan langkah berikut:

  1. Klik Load Proguard Mappings.
  2. Buka folder project yang berisi file pemetaan dan muat semua file, kombinasi apa pun dari file tersebut, atau folder yang berisi file tersebut.

    File pemetaan biasanya berada di project/app/build/outputs/mappings/release/. Alat pilih file didefaultkan ke folder release jika struktur project ini terdeteksi. Pertama, alat pilih file akan memeriksa apakah ada nama file yang sama persis dengan mapping.txt, seeds.txt, dan usage.txt. Selanjutnya, alat pilih file akan memeriksa apakah ada nama file yang berisi teks mapping, usage, atau seeds di mana saja dan yang berakhiran .txt. Misalnya release-seeds-1.10.15.txt adalah kecocokan.

Daftar berikut ini menjelaskan file pemetaan:

  • seeds.txt: Node yang dicegah konfigurasi ProGuard agar tidak terhapus selama penyingkatan ditunjukkan dengan huruf tebal.
  • mapping.txt: Mengaktifkan Deobfuscate names , sehingga Anda dapat memulihkan nama asli dari node yang di-obfuscate oleh R8. Misalnya, Anda dapat memulihkan nama node yang di-obfuscate seperti a, b, c untuk MyClass, MainActivity, dan myMethod().
  • usage.txt: Mengaktifkan Show removed nodes agar Anda dapat menampilkan class, metode, dan kolom yang telah dihapus oleh R8 selama penyingkatan kode. Node yang dipulihkan ditampilkan dengan dicoret.

    Untuk informasi selengkapnya tentang cara menggunakan R8 untuk meng-obfuscate dan meminimalkan kode, lihat Menyingkat, meng-obfuscate, dan mengoptimalkan aplikasi Anda.

Menampilkan bytecode, menemukan penggunaan, dan membuat aturan Keep

Node dalam tampilan daftar Class memiliki menu konteks dengan opsi berikut yang memungkinkan Anda melihat bytecode, menemukan penggunaan, dan menampilkan dialog yang menunjukkan aturan ProGuard yang dapat Anda salin dan tempel untuk node yang dipilih. Klik kanan node apa pun dalam tampilan daftar Class untuk menampilkan menu konteksnya.

Show bytecode: Men-dekompilasi class, metode, atau kolom yang dipilih dan menampilkan representasi bytecode smali (bukan kode Java) dalam sebuah dialog, sebagai berikut:

Gambar 6. Kode byte DEX untuk metode init

Find usages: Menunjukkan bagian lain mana saja dari kode DEX yang memiliki referensi ke class atau metode yang dipilih (gambar 7). Jika Anda telah memuat seeds.txt, node yang ditampilkan dalam huruf tebal menunjukkan bahwa konfigurasi ProGuard mencegah dihapusnya node tersebut selama penyingkatan kode:

Gambar 7. Referensi ke MyClass

Generate ProGuard Keep rule: Menunjukkan aturan ProGuard yang dapat Anda salin dan tempel ke dalam file konfigurasi ProGuard project agar paket, class, metode, atau kolom tertentu dipertahankan selama tahap penyingkatan kode (gambar 8). Untuk informasi selengkapnya, lihat Menyesuaikan kode yang perlu dipertahankan.

Gambar 8. Aturan Proguard yang dapat Anda salin dari dialog ke dalam file konfigurasi Proguard

Melihat entity kode dan resource

Berbagai tugas build mengubah entity akhir dalam aplikasi. Misalnya, aturan penyusutan Proguard dapat mengubah kode akhir Anda, dan resource gambar dapat diganti oleh resource dalam ragam produk. Versi akhir file Anda dapat dilihat dengan mudah melalui APK Analyzer: Klik entity dan pratinjau untuk entity teks atau gambar akan ditampilkan di bawah, seperti ditunjukkan pada gambar 9.

Gambar 9. Pratinjau resource gambar akhir

Penganalisis APK juga dapat menampilkan berbagai file teks dan biner. Misalnya, penampil entity resources.arsc memungkinkan Anda melihat nilai untuk konfigurasi tertentu seperti terjemahan bahasa untuk resource string. Pada Gambar 10, Anda dapat melihat terjemahan untuk setiap resource string.

Gambar 10. Pratinjau resource string yang telah diterjemahkan

Membandingkan file

APK Analyzer dapat membandingkan ukuran entity dalam dua file APK atau app bundle yang berbeda. Fungsi ini akan berguna saat Anda perlu memahami mengapa ukuran aplikasi Anda meningkat dibandingkan rilis sebelumnya. Sebelum memublikasikan aplikasi yang telah diperbarui, lakukan langkah berikut:

  1. Muat versi aplikasi yang akan Anda publikasikan ke APK Analyzer.
  2. Di kanan atas APK Analyzer, klik Compare With.
  3. Dalam dialog pemilihan, temukan artefak yang terakhir dipublikasikan ke pengguna Anda, lalu klik OK.

    Dialog yang mirip dengan yang ditampilkan pada gambar 11 akan muncul untuk membantu Anda menilai dampak update pada pengguna.

Gambar 11 menunjukkan perbedaan antara build debug dan build rilis untuk aplikasi tertentu. Opsi build yang berbeda digunakan dalam kedua jenis build ini, yang mengubah entity pokok dengan cara yang berbeda pula.

Gambar 11. Perbedaan antara APK debug dan rilis