Чому Android зберігає файли APK встановлених програм?


31

Android зберігає файли APK встановлених програм користувача в /data/appкаталозі, а системні додатки в /system/appкаталозі.

Це означає, що Android вилучає файли dex з файлів APK кожного разу при запуску програми? Якщо ні, чи можу я безпечно видалити файли APK і все-таки запустити додаток?

Відповіді:


43

Android APK зазвичай містить ці речі.

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

Після встановлення файл APK копіюється в нього /data/appта classes.dexвитягується та "оптимізується", запустивши dex2oatйого (на Android 5+ lib/також витягується). Результат оптимізації зберігається, /data/dalvik-cache/тому додаток потрібно оптимізувати лише один раз за встановлення чи оновлення . Все інше зберігається всередині АПК. Таким чином, перша відповідь дуже ясно: речі , як assetsі resщо потрібно для реалізації , повинні бути передбачені додатки, і вони знаходяться всередині APK. Файл APK зберігається для підтримки. Якщо ви видалите APK, програма точно не запуститься. (Додаток: Де мої активи?)

По-друге, Google Play дуже давно додав підтримку "Delta Update" . У процедурі оновлення дельти обчислюється різниця між старим і новим пакетом. Потім GP завантажує "Delta" і застосовує зміни до вихідного APK, щоб отримати оновлений APK, зменшуючи таким чином розмір завантаження.

APK завжди підписаний. Це може запобігти зловмисним змінам пакета. Ви точно не хочете встановлювати модифікований додаток, не знаючи, що змінилося, чи ін'єкція вірусу. META-INF/Усередині APK працює для цієї мети. Неофіційні зміни призведуть до невідповідності підписів, а система Android відмовиться встановлювати модифікований додаток.

Крім того, коли ви оновлюєте ОС Android, всі файли dex знову "оптимізуються", так що вам не потрібно буде повторно встановлювати їх по черзі. Як сказано вище, для оптимізації потрібен classes.dexфайл з оригінального пакета.


5
Зауважте, що можливості оновлення дельти Google Play Store залежать від наявності APK для обчислення дельти між встановленою та оновленою версіями та подальшим виправленням. Крім того, APK стискається, тому він економить трохи місця (хто пам’ятає, ви старі ZipAlign?)
Tamoghna Chowdhury

@Tamoghna Space насправді не є проблемою, інакше Android 5+ не витяг би lib/з APK, iOS не витяг би все з IPA. Це лише для базової перевірки цілісності.
iBug

Виконані файли рідко стискаються - економія місця більшою мірою пов'язана з стислими ресурсами, такими як бінарнізовані XML-файли, які не витягуються. Крім того, щодо цього ZipAlign - доступ до ресурсів може бути дещо швидшим на оптимізованих (читати вирівнювання словах) файлах, що стискаються.
Tamoghna Chowdhury

1
Тож файли активів, такі як html та js файли, не копіюються з apk у певне місце у файловій системі Android?
користувач1788736

1
@ user1788736 Так. Вони залишилися в АПК.
iBug
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.