С чего все началось
Всем привет. На определенном этапе разработки игры под Android на движке Unity я столкнулся с одной проблемой при билде. После добавления в проект таких плагинов как Appodeal и Google Play Games количество используемых методов превысило 65K и во время билда появилась следующая ошибка:
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Почитав документацию Appodeal, понял что надо включить Multidex. Решил это сделать. На сайте была ссылка с инструкцией для Android Studio. А мы то с вами на Unity, что же делать?
А все довольно просто надо сделать всего три действия:
Включить систему сборки Gradle
Чтобы в своем проекте на Android включить систему Gradle в Unity выполним пару действий
- В Unity откройте Build Settings (File >> Build Settings)
- Если вы еще не выбрали платформу, то пора сделать это (Platform >> Android)
- В списке Build System выбираем Gradle (Build System >> Gradle )
Изменение настроек Gradle
1. Чтобы изменить настройки Gradle, вам сначала нужно получить файл настроек Gradle, который расположен в папке (Assets/Plugins/Android/mainTemplate.gradle). Если файла mainTemplate.gradle скачайте по ссылке и вставьте по адресу Assets/Plugins/Android/:
Скачать файл
2. Если файл у вас уже есть, добавляем строку multiDexEnabled true в объект defaultConfig
3. Если минимальный уровень API Android равен 20 или ниже, добавьте эту строку compile ‘com.android.support:multidex:1.0.1’
4. Закомментируем или удалим строки:
minifyEnabled **MINIFY_DEBUG**
useProguard **PROGUARD_DEBUG**
Окончательный вид файла:
Инициализация Multidex
Если минимальный уровень API Android, установленный на 20 или ниже.
Обновите файл манифеста, расположенный в Assets/Plugins/Android/AndroidManifest.XML. Если у вас нет этого файла, вам придется его создать. Вы можете найти AndroidManifest по умолчанию.xml в месте установки Unity. Но вам также придется вручную применить параметры проекта вашего приложения: имя пакета, разрешения, параметры конфигурации и другую информацию.
Если вы только что создали новый файл манифеста или у вас уже был он, вы просто добавляете этот параметр(android:name) следующим образом:
На этом все. Ошибка исчезнет, и вы спокойно сбилдите свой проект.
Спасибо за внимание.
BoobenDancer
Привет. Всё верно, всё работает, но нужно обновить немного данные.
Добавить информацию об AnroidX, «если использованы библиотеки androidx — то есть две поправки».
Во-первых, implementation(который compile в mainTemplate) теперь такого вида:
implementation 'androidx.multidex:multidex:2.0.1'
Во-вторых, в AnroidManifest тоже немного нужно поправить:
android:name=«androidx.multidex.MultiDexApplication»
Также, необходимо заменить картинки — на код.
А в целом, всё верно написано, быстро и понятно.
Android Studio использовать нет необходимости.
Кроме того, в новых версиях юнити нужно просто поставить галку use custom template у gradle сборки в Player Settings. Файл шаблон будет создан автоматически.