Saya sudah membaca tentang kinerja kode dan parameter penyetelan untuk waktu yang lama. Memang, program Android adalah salah satu fokus saya.
Mari kita intro pada awalnya konsep dasar atau paling penting yang membantu kita mencapai solusi.
Seperti yang dinyatakan Pengembang Android
modul dapat dibangun, diuji, dan disadap secara independen
Oleh karena itu, Modul memiliki Gradle & Dependensi mereka sendiri . Dan Anda dapat menjelajahinya dalam proyek Hierarchy Viewer
.
Sebagai soal fakta, Modularisasi menekankan pada masalah Pemeliharaan . Berbeda dengan Performance Matters. Karena, Modularisasi memiliki dampak penting ini:
- Meningkatkan Kedalaman pewarisan
Berikut adalah diagram yang saya plot untuk membuatnya jelas. Seperti yang Anda lihat. Ketika menggunakan modul diskrit, untuk memanggil Metode A ada 2N micro secs
dibandingkan dengan N micro secs
tanpa modul diskrit.
Pertanyaan ini muncul di benak Anda bahwa Metode yang Dirujuk menghitung apa yang terkait dengan Kedalaman pewarisan?
Jawabannya adalah: Meskipun menggunakan modularisasi meningkatkan Metode yang Dirujuk. Tetapi, itu sebenarnya tidak mempengaruhi kinerja aplikasi dan masalah utama yang mungkin adalah Kedalaman pewarisan di mana dalam banyak kasus diabaikan. .
Saya menekankan bahwa peningkatan Metode yang Direferensikan dalam modularisasi disebabkan oleh masing-masing Tingkat Modul & Ketergantungan
Bagaimana modularisasi aplikasi dapat meningkatkan jumlah metode yang dirujuk secara drastis begitu tinggi?
Kondisi di mana dampak penganalisis APK penting Metode yang Dirujuk
Perhatikan juga bahwa minifikasi dan penyusutan kode masing-masing juga dapat secara signifikan mengubah isi file DEX setelah kode sumber dikompilasi.
Selain pernyataan resmi di atas, saya ingin menambahkan kondisi lain di mana penganalisa APK berdampak:
berapa banyak yang dialami pengembang dalam modularisasi?
modularisasi seperti rumah yang arsitektur (pengembang) menentukan di mana harus dapur dan di mana harus kamar kecil dan di mana harus WC.
Bagaimana jika arsitektur memutuskan untuk menggabungkan WC & Kitchen?Ya ini bencana.
Ini dapat terjadi saat modularisasi jika pengembang tidak terlalu berpengalaman.
Menjawab pertanyaan OP di samping informasi tambahan
Di sini saya menjawab pertanyaan yang diajukan dalam komentar
Mengapa Gradle yang terpisah menambah jumlah metode yang dirujuk? Dan untuk dependensi terpisah, jika hasil akhirnya adalah APK tunggal maka saya tidak berpikir dependensi duplikat di 'app' dan modul fitur akan menambah jumlah metode yang direferensikan.
Karena modul dapat dibangun, diuji, dan di-debug maka mereka HARUS memiliki Gradle & Dependensi mereka sendiri.
Ketika proyek multi-modul sedang dipenuhi, kompiler menghasilkan beberapa .dex
file termasuk:
- sebuah
.dex
file untuk keseluruhan terintegrasi dependensi
- modul
.dex
s
.dex
File dependensi adalah integrasi dari semua modul modul
Mari kita lihat bagaimana dampak bertahap modul modul Dirujuk Mothods Count ?!
ada 2 APK
s dengan hasil yang sama tetapi perbedaan dalam penghitungan Metode yang Dirujuk.
Keduanya adalah aktivitas kosong yang memiliki 1.7k
perbedaan dalam Jumlah Metode yang Dirujuk yang sangat tinggi tergantung pada fungsinya. Perbedaan utama mereka ada pada Gradle Modul mereka , salah satunya dikonfigurasikan
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
Satu lagi dikonfigurasi untuk
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
}
Meskipun mereka hanya kegiatan kosong tetapi perbedaan minimal di Gradle disebabkan 1.7k
perbedaan dalam Jumlah Metode yang Dirujuk.
Dan App Gradle adalah
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation project(path: ':module')
}
Perhatian utama adalah mengapa penambahan jumlah metode yang dirujuk secara individual berbeda dari jumlah total metode yang direferensikan di Apk Analyzer?
Ini hanya tidak ada filter IDE. pasti, jika Anda hanya memilih .dex
file Metode Referensi Hitungan sama dengan SUM dari setiap baris Jumlah Metode yang Direferensikan tetapi jika Anda memilih banyak .dex
file, Anda akan melihat perbedaan dalam SUM dan Count aktual yang karena kesetaraan dalam Referensi yang disukai oleh Analyzer. saring mereka.
di tangkapan layar Anda, Anda telah memilih banyak .dex
file kemudian Analyzer menyaring kesetaraan.
dalam proyek kami, kami menggunakan file dependencies.gradle terpusat sehingga tidak ada peluang untuk versi yang berbeda. Jadi, apakah Anda berpikir bahkan jika kami memiliki set dependensi yang sama / tepat dan versinya dalam modul fitur, itu akan meningkatkan jumlah metode yang direferensikan?
Secara teoritis itu TIDAK harus meningkatkan jumlah metode yang dirujuk. NAMUN , Seperti yang saya jelaskan, Pengalaman Pengembang sangat memengaruhi hasil akhir.
Penganalisa Tim harus memeriksa dan memperbaiki masalah kinerja sebelum rilis seperti
- aturan proguard
- sumber daya menyusut & diperkecil
- androidManifest.xml
- pengaturan gradle
Sekarang saya ingin menjelaskan bagaimana Pengalaman Pengembang dan pemeliharaan kode mempengaruhi hasil akhir. BAHKAN jika APK Anda menggunakan Dependensi Terpusat
dalam contoh di atas, saya akan meningkat 5.1k
dalam Metode yang Dirujuk Hitung BAHKAN JIKA saya telah Ketergantungan Terpusat !!!!!
Bagaimana mungkin ?
Jawabannya adalah: saya baru saja menambahkan file yang tidak berguna dan tersembunyi .jar
dalam libs
direktori proyek. semudah yang Anda lihat saya mempengaruhi hasil akhir.
Seperti yang Anda lihat Pengalaman Pengembang mempengaruhi result.as akhir Akibatnya, Praktis itu mungkin bahwa metode direferensikan jumlah ditingkatkan Meskipun teori Haruskah TIDAK .
Dan mengapa tidak ada perbedaan dalam penghitungan metode yang direferensikan ketika saya hanya mengkompilasi modul 'aplikasi' dengan menonaktifkan kompilasi paralel? Seharusnya berkurang karena hanya dependensi modul 'aplikasi' yang akan digunakan, kan?
kompilasi tidak ada kaitannya dengan metode yang dirujuk, dihitung. Itu sesuai dengan apa yang ingin dipatuhi pengembang.
Kesimpulan
Saya telah membahas semua kemungkinan seputar masalah ini. Memang, itu bisa muncul dari situasi yang berbeda dan pengembang dengan menggunakan pedoman ini dapat memperbaiki masalah ini.
- Saya berharap Anda menemukan mengapa Metode yang Dirujuk ditingkatkan dan mengapa dalam beberapa kasus mungkin meningkat secara drastis.
- Modul memiliki Gradle & Dependency dan modul peningkatan modularisasi mereka. oleh karena itu, Referensi Metode ini.
- Modularisasi sebenarnya berdampak pada kinerja aplikasi yang diabaikan tetapi membuat pemeliharaan aplikasi Anda menjadi lebih baik.
- Pengalaman pengembang dalam modularisasi juga sangat memengaruhi hasil akhir.
CATATAN PENTING: hampir semua pernyataan adalah investigasi & penelitian saya. memang, mungkin ada kesalahan dan kesalahan dan akan diperbarui untuk menambahkan lebih banyak informasi di masa depan.