Відповіді:
Ця відповідь значною мірою покладається на офіційну документацію Android (зокрема цитовані частини).
Як налаштувати підтримку Multidex для Unity Project
Що таке мультидекс:
Файли програми Android (APK) містять виконувані файли байт-кодів у вигляді файлів Dalvik Executable (DEX), які містять скомпільований код, який використовується для запуску вашої програми. Специфікація Dalvik Executable обмежує загальну кількість методів, на які можна посилатися в одному файлі DEX, до 65 536, включаючи рамкові методи Android, методи бібліотеки та методи у власному коді. Для подолання цього обмеження потрібно налаштувати процес збирання додатків для створення більше одного файлу DEX, відомого як конфігурація мультидекса.
Коли ми використовуємо Multidex:
Коли ми перевищуємо загальну кількість методів, на які можна посилатися в одному файлі DEX, до 65 536 - включаючи рамкові методи Android, бібліотечні методи та методи у власному коді.
Уникайте обмеження 64K
Перш ніж налаштувати додаток, щоб увімкнути використання 64K або більше посилань на методи, слід вжити заходів щодо зменшення загальної кількості посилань, викликаних вашим кодом додатка, включаючи методи, визначені кодом вашого додатка або включеними бібліотеками. Наступні стратегії можуть допомогти вам уникнути перевищення базового ліміту DEX:
Перегляньте прямі та перехідні залежності вашого додатка. Переконайтеся, що будь-яка велика залежність бібліотеки, яку ви включаєте у свій додаток, використовується таким чином, що перевищує кількість коду, який додається до програми. Поширеним анти-шаблоном є включення дуже великої бібліотеки, оскільки кілька корисних методів були корисними. Зменшення залежностей від коду програми часто може допомогти вам уникнути довідкового ліміту DEX.
Видаліть невикористаний код за допомогою ProGuard - увімкніть скорочення коду для запуску ProGuard для вашої версії версій. Увімкнення скорочення гарантує, що ви не доставляєте невикористаний код з APK.
Окрім цих офіційних порад, під час створення проекту Unity наступні кроки допоможуть вам:
Налаштування вашого додатка для використання конфігурації мульти dex вимагає внести наступні зміни.
Якщо minSdkVersion встановлений на 21 або вище, все , що вам потрібно зробити , це встановити ,
multiDexEnabled
щобtrue
у файлі build.gradle рівня модуля, як показано тут:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Однак якщо для вашого
minSdkVersion
встановлено значення 20 або менше, вам потрібно використовувати бібліотеку підтримки мультидекса, як описано нижче:3.1. Змініть файл build.gradle на рівні модуля, щоб увімкнути multidex та додати бібліотеку мультидекса як залежність, як показано тут:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2. Залежно від того, перекриєте ви клас програми, виконайте одну з наступних дій:
- Якщо ви не переосмислюєте
Application
клас, відредагуйте файл маніфесту, щоб встановитиandroid:name
в<application>
тегу наступним чином:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
- Якщо ви переосмислите
Application
клас, змініть його, щоб розширити MultiDexApplication (якщо можливо) наступним чином:
public class MyApplication extends MultiDexApplication { ... }
- Або якщо ви перевстановите клас Application, але змінити базовий клас неможливо, тоді ви можете замінити метод attachBaseContext () і викликати MultiDex.install (це), щоб увімкнути multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Перевірте помилку у маніфесті інших плагінів та очистіть проект. І знову запустіть систему.
Якщо у вашому проекті є якась проблема залежності, запустіть цю команду в Android Terminal
% Gradle clean App."App name"
Скопіюйте ці залежності в Gradle Application, під залежність:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
Додайте підписConfig у своїх основних проектах Gradle.
Або встановіть режим підписання в режимі налагодження вручну. Перейдіть у меню Файл -> Структура проекту -> У розділі Модулі Клацніть на вашому проекті та в розділі Типи збірки виберіть Налагодження -> Виберіть налаштування підпису-> налагодження
Тепер синхронізуйте Gradle і складіть проект.
Я б рекомендував вам перейти за цим посиланням, яке допоможе вам створити ігри з підтримкою мультидекса безпосередньо через єдність.
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
Примітка. Це дозволить увімкнути лише мультидекс в самому єдності (і має виправити проблеми з кількома значеннями). Це не виправить проблеми, пов'язані з градуюванням.