Menganalisis build 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. APK Analyzer juga tersedia dari command line dengan apkanalyzer.


Dengan APK Analyzer, Anda dapat:

  • 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.
  • Melakukan perbandingan spesifikasi dua APK atau app bundle.

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

  • Tarik APK atau app bundle ke dalam jendela Editor Android Studio.
  • Beralih 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. APK Analyzer menampilkan setiap file atau folder sebagai entity yang dapat Anda luaskan untuk membuka folder. Hierarki entity ini mencerminkan struktur file dan folder dalam file APK tersebut.

APK Analyzer menunjukkan ukuran file zip (atau "ukuran file mentah") dan nilai ukuran file download untuk setiap entity, seperti ditunjukkan pada gambar 1. Raw File Size menunjukkan kontribusi entity terhadap ukuran APK total. Download Size menunjukkan perkiraan ukuran terkompresi entity sebagaimana akan dikirim oleh Google Play. % of Total Download Size menunjukkan persentase total ukuran download APK yang diwakili entity.

Gambar 1. Ukuran file di APK Analyzer.

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 membantu Anda memahami setiap perubahan yang mungkin telah dibuat pada 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 kemampuan lint. Peringatan atau error akan muncul di pojok kanan atas. Gambar 2 menunjukkan error yang dilaporkan untuk file manifes yang dipilih.

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

Melihat file DEX

Penampil file DEX pada APK Analyzer memberi Anda akses langsung ke informasi dasar dalam file DEX di aplikasi Anda. Penampil menyediakan class, paket, referensi total, dan jumlah deklarasi, yang dapat membantu dalam 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 file DEX. Hal ini biasanya mencakup metode yang ditentukan dalam kode Anda, library dependensi, dan metode yang ditentukan dalam paket Java dan Android standar yang digunakan kode tersebut. Ini adalah metode yang dihitung terhadap 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.

Gambar 3. Aplikasi berukuran sedang.

Memfilter tampilan hierarki file DEX

Tepat di atas daftar Class, APK Analyzer menyediakan filter untuk melihat isi file DEX yang dipilih, seperti ditunjukkan pada gambar 4.

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 ProGuard berwarna abu-abu sampai Anda memuat sekumpulan file pemetaan ProGuard yang menambahkan fungsi ke penampil DEX, seperti men-deobfuscate nama (mapping.txt), yang menunjukkan node yang telah dihapus (usage.txt), dan menunjukkan node yang tidak dapat dihapus (seeds.txt).

File pemetaan ProGuard yang Anda impor harus dihasilkan dari build yang sama yang menghasilkan file DEX dengan penyingkatan kode aktif.

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, pemilih file akan memeriksa apakah ada nama file yang sama persis dengan mapping.txt, seeds.txt, dan usage.txt. Selanjutnya, pemilih 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 mengetahui 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 dalam sebuah dialog, sebagai berikut:

Gambar 6. Bytecode DEX untuk metode init.

Find usages: Menunjukkan bagian lain mana dari kode DEX yang memiliki referensi ke class atau metode yang dipilih, seperti ditunjukkan dalam 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 Anda, seperti ditunjukkan pada gambar 8. Hal ini bertujuan agar paket, class, metode, atau kolom tertentu dihapus selama fase penyingkatan kode. Untuk mengetahui 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 penyingkatan ProGuard dapat mengubah kode akhir Anda, dan resource gambar dapat diganti oleh resource dalam ragam produk.

Untuk melihat versi akhir file Anda dengan APK Analyzer, klik entity untuk pratinjau teks atau entity gambar, 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 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 sudut kanan atas APK Analyzer, klik Compare with previous APK....
  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.