Apa arti zipalign dan bagaimana kesesuaiannya dengan cara kami menggunakan perangkat Android kami?

19

Apa arti "zipalign" dan apa artinya?

Ketika ROM mengklaim sebagai "zipaligned", apa artinya itu dan apa bedanya dari ROM yang tidak "zipaligned"?

Mat
sumber

Jawaban:

21

Mekanisme ini dijelaskan di situs pengembang Android sebagai berikut:

zipalign adalah alat penyelarasan arsip yang menyediakan optimasi penting untuk file aplikasi Android (.apk). Tujuannya adalah untuk memastikan bahwa semua data yang tidak terkompresi dimulai dengan penyelarasan tertentu relatif terhadap awal file. Secara khusus, ini menyebabkan semua data yang tidak terkompresi di dalam .apk, seperti gambar atau file mentah, untuk disejajarkan pada batas 4-byte. Ini memungkinkan semua bagian diakses secara langsung dengan mmap () walaupun mengandung data biner dengan batasan perataan. Manfaatnya adalah pengurangan jumlah RAM yang dikonsumsi saat menjalankan aplikasi.

Singkatnya: .apkkonten dapat lebih mudah / lebih cepat / lebih optimal diakses karena urutan data di dalam file yang dikemas.

Untuk informasi lebih lanjut, ada "panduan lengkap" yang tersedia di AddictiveTips: Apa itu Zipalign di Android dan Cara Membuat Aplikasi Zipaligned , yang menjawab bagian kedua dari pertanyaan Anda:

Dapat dimengerti, situasi akan disediakan untuk paket aplikasi yang tidak selaras. Pembacaan sumber daya akan lambat dan penggunaan memori akan menjadi lebih tinggi dari spektrum. Itu juga akan tergantung pada berapa banyak aplikasi yang tidak selaras hadir. Misalnya, jika lebih sedikit jumlah aplikasi dengan aplikasi rumah yang tidak selaras, Anda akan melihat waktu peluncuran aplikasi yang lebih lambat. Ini adalah skenario kasus terbaik. Untuk skenario terburuk, memiliki sejumlah aplikasi yang tidak selaras akan mengakibatkan sistem berulang kali memulai dan mematikan proses, berjuang dengan kelambatan dan pengurasan baterai yang sangat besar.

Izzy
sumber
Untuk programmer, ini kurang lebih mirip dengan struct alignment di C. Jangan lakukan struct x { uint16_t id; uint32_t data[100]; };jika Anda ingin 32-bit sejajar; usestruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Matthew Baca
Tampaknya tidak ada downside, mengapa tidak semua aplikasi zip selaras? Juga apakah ini benar-benar bahkan menjadi perhatian bagi pengguna akhir atau hanya relevan bagi pengembang?
Matt
1
Ini langkah tambahan untuk dev. Dan tentu saja kinerjanya menjadi perhatian bagi pengguna akhir;)
Izzy
1

Untuk menambahkan cara kerja zipalign di atas -

Dalam lingkungan operasi Android, file data yang disimpan dalam setiap paket aplikasi diakses oleh beberapa proses, misalnya, penginstal akan membaca manifes data untuk menentukan izin terkait; server sistem dapat membaca sumber daya ini karena berbagai alasan, seperti menampilkan pemberitahuan; aplikasi Beranda, misalnya, akan membaca sumber daya untuk mendapatkan nama dan ikon aplikasi. Karena Android didasarkan pada infrastruktur operasi multi-tugas yang sebenarnya, file-file ini diakses terus menerus dan berulang kali. Akhirnya, namun tidak kalah pentingnya, aplikasi itu sendiri membaca data manifes.

Karena Android berbasis Linux, pemetaan memori memainkan peran kunci dalam penanganan proses yang efisien. Pada dasarnya, penyelarasan optimal untuk kode penanganan sumber daya OS Android adalah batas 4-byte. Ini artinya, jika APK dipetakan ke batas 4 byte, dan selaras, OS tidak perlu 'membaca' seluruh paket aplikasi untuk mendapatkan manifes data yang diinginkan. Setiap proses sistem akan tahu sebelumnya di mana harus mencari sumber daya yang diinginkan, dan karenanya akan mengeksekusi jauh lebih halus dan lebih cepat.

Ringkasnya, men-zalinkkan APK menghasilkan semua data yang tidak terkompresi dalam paket untuk disejajarkan pada batas 4-byte, memungkinkan semua bagian diakses secara langsung dengan peta memori. Konsumsi RAM diturunkan saat eksekusi karena kode kueri tidak harus membaca seluruh paket aplikasi.

Sumber

Aniket Thakur
sumber
Mengapa tidak membaca seluruh paket aplikasi? Apakah manifes dijamin berada pada offset tertentu?
Kenneth Worden