Існує багато публікацій про MultiDex. Іноді у мене виникають помилки, в тому числі multiDexEnabled true
в defaultConfig
розділі мого build.gradle.
Але, в чому саме полягає ця особливість? Які сценарії його використання?
Існує багато публікацій про MultiDex. Іноді у мене виникають помилки, в тому числі multiDexEnabled true
в defaultConfig
розділі мого build.gradle.
Але, в чому саме полягає ця особливість? Які сценарії його використання?
Відповіді:
Цитування документації :
Файли програми Android (APK) містять виконувані файли байт-коду у вигляді файлів Dalvik Executable (DEX), які містять скомпільований код, який використовується для запуску вашої програми. Специфікація Dalvik Executable обмежує загальну кількість методів, на які можна посилатися в одному файлі DEX, до 65 536, включаючи рамкові методи Android, методи бібліотеки та методи у власному коді. Щоб подолати цей ліміт, потрібно налаштувати процес збирання додатків для створення більше одного файлу DEX, відомого як конфігурація мультидекса.
Отже, особливість така: вона дозволяє складати ваш складний додаток. Сценарії його використання - це коли ваша програма не може компілюватись із-за досягнення межі 64K DEX. Це відображається як помилка збірки, наприклад:
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
Один файл .dex може мати 65536 методів (посилань), тому якщо кількість посилань перевищує 65 536, ви переходите до мультидекса.
Програма для андроїд компілюється у файл .dex, який, у свою чергу, перетворюється на один файл .apk.
DVM (Dalvik Virtual Machine) використовує файл / файли .dex для виконання байт-кодів.
Через що кількість посилань перевищує 65 536 лімітів?
Методи, написані вами + методи Android Framework + методи сторонніх бібліотек (наприклад, Volley, Retrofit, Facebook SDK тощо).
Я прочитав "десь"
App Compat 24.2.1 містить 16,5 тис. Методів
Google Play Services GCM 9.6.1 містить методи 16,7k.
Отже, якщо ви створили просту програму Hello world, яка має App Compat 24.2.1, ви вже 1/4 спосіб перетнути межу методів єдиного dex
Dex розшифровується як Dalvik Executable, який використовує процесор віртуальної машини Google (Dalvik) для обробки програм Android. Android був побудований з невеликими і простими програмами на увазі, і обмеження в одному одному Dalvik Executable закріпили дах кодових посилань 65 656 методів. Через цю проблему та спосіб, яким машина Dalvik займається виконанням коду, виникли деякі проблеми з компіляцією та викликом, аж до інтеграції Monkey Patch або MultiDex . Інтеграція MultiDex в Android Studio дозволяє розробникам Android можливість збирати та виконувати кодову базу з понад 65 536 методів!
Офіційний сайт розробника Android.
If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.