Mengapa Android menyimpan file APK aplikasi yang diinstal?

31

Android menyimpan file APK aplikasi pengguna yang diinstal dalam /data/appdirektori dan aplikasi sistem dalam /system/appdirektori.

Apakah itu berarti Android mengekstrak file dex dari file APK setiap kali aplikasi diluncurkan? Jika tidak, dapatkah saya menghapus file APK dengan aman dan masih menjalankan aplikasi?

PrashanD
sumber

Jawaban:

43

APK Android biasanya berisi hal-hal ini.

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

Setelah instalasi, file APK disalin ke /data/app, dan classes.dexdiekstraksi dan "dioptimalkan" dengan menjalankannya dex2oat(di Android 5+ lib/juga diekstraksi). Hasil optimasi disimpan /data/dalvik-cache/sehingga aplikasi perlu dioptimalkan hanya sekali per instalasi atau pembaruan . Semua lainnya disimpan di dalam APK. Jadi jawaban pertama sangat jelas: Hal-hal seperti assetsdan resyang diperlukan oleh aplikasi harus disediakan, dan semuanya ada di dalam APK. File APK disimpan untuk tujuan pendukung. Jika Anda menghapus APK, aplikasi pasti tidak akan memulai sama sekali. (Aplikasi: Di ​​mana aset saya?)

Kedua, Google Play menambahkan dukungan untuk "Delta Update" yang sangat lama . Dalam prosedur pembaruan delta, perbedaan antara paket lama dan paket baru dihitung. Kemudian GP mengunduh "Delta" dan menerapkan perubahan pada APK asli untuk menghasilkan APK yang diperbarui, sehingga mengurangi ukuran unduhan.

APK selalu masuk. Ini dapat mencegah modifikasi berbahaya pada paket. Anda pasti tidak ingin menginstal aplikasi mod tanpa mengetahui apa yang diubah, atau apakah virus telah disuntikkan. Bagian META-INF/dalam APK berfungsi untuk tujuan ini. Perubahan tidak resmi akan menghasilkan tanda tangan yang tidak cocok, dan sistem Android akan menolak untuk menginstal aplikasi modded.

Juga, ketika Anda memperbarui OS Android Anda, semua file dex "dioptimalkan" lagi sehingga Anda tidak perlu menginstalnya satu per satu. Seperti dikatakan di atas, optimasi memerlukan classes.dexfile dari paket asli.

iBug
sumber
5
Perhatikan bahwa kemampuan pembaruan delta Google Play Store bergantung pada memiliki APK untuk menghitung delta antara versi yang diinstal dan yang diperbarui, dan penambalan berikutnya. Plus, APK dikompresi sehingga menghemat beberapa ruang (ada yang ingat ZipAlign lama?)
Tamoghna Chowdhury
@Tamoghna Space tidak benar-benar masalah, jika Android 5+ tidak akan diekstraksi lib/dari APK, iOS tidak akan mengekstraksi semuanya dari IPA. Ini hanya untuk pemeriksaan integritas dasar.
iBug
Executables jarang dikompres dengan baik - penghematan ruang lebih terkait dengan sumber daya terkompresi seperti file XML yang ter-biner, yang tidak diekstraksi. Juga, tentang ZipAlign - akses sumber daya bisa menjadi lebih cepat pada file terkompresi yang dioptimalkan (baca-rata).
Tamoghna Chowdhury
1
Jadi file aset seperti file html dan js tidak disalin dari apk ke lokasi tertentu di sistem file android?
user1788736
1
@ user1788736 Ya. Mereka tertinggal di APK.
iBug