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.
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.
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.
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.
Untuk menggunakan filter guna menampilkan semua metode dan kolom dalam sebuah class, lakukan langkah berikut:
- Dalam daftar File, pilih file
classes.dex
. - Dalam daftar Class, buka dan pilih sebuah class.
- Luaskan class yang Anda pilih.
- Klik Show fields untuk menampilkan atau menyembunyikan kolom class.
- Klik Show methods untuk menampilkan atau menyembunyikan metode class.
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 metodeprintln()
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.
Untuk memuat file pemetaan ProGuard, lakukan langkah berikut:
- Klik Load Proguard mappings....
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
, danusage.txt
. Selanjutnya, pemilih file akan memeriksa apakah ada nama file yang berisi teksmapping
,usage
, atauseeds
di mana saja dan yang berakhiran.txt
. Misalnyarelease-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 sepertia
,b
,c
untukMyClass
,MainActivity
, danmyMethod()
.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:
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:
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.
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.
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.
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:
- Muat versi aplikasi yang akan Anda publikasikan ke APK Analyzer.
- Di sudut kanan atas APK Analyzer, klik Compare with previous APK....
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.