У меня только что возникла проблема, связанная с методом 64k в Unity, поэтому я не могу построить свой проект. Это показывает, что ограничение метода превышает предел числа методов 64 КБ. Так может ли кто-нибудь здесь помочь мне решить эту проблему?
У меня только что возникла проблема, связанная с методом 64k в Unity, поэтому я не могу построить свой проект. Это показывает, что ограничение метода превышает предел числа методов 64 КБ. Так может ли кто-нибудь здесь помочь мне решить эту проблему?
Этот ответ в значительной степени опирается на официальную документацию Android (указанные части, в частности).
Как настроить поддержку Multidex для Unity Project
Что такое Multidex:
Файлы приложения Android (APK) содержат исполняемые файлы байт-кода в виде файлов Dalvik Executable (DEX), которые содержат скомпилированный код, используемый для запуска вашего приложения. Спецификация исполняемого файла Dalvik ограничивает общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536, включая методы платформы Android, библиотечные методы и методы в вашем собственном коде. Чтобы преодолеть это ограничение, необходимо настроить процесс сборки приложения для создания более одного файла DEX, известного как конфигурация мультидекса.
Когда мы используем Multidex:
Когда мы превышаем общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536, включая методы платформы Android, библиотечные методы и методы в вашем собственном коде.
Избегайте ограничения в 64К
Перед настройкой приложения для использования 64К или более ссылок на методы необходимо предпринять шаги для уменьшения общего числа ссылок, вызываемых кодом приложения, включая методы, определенные кодом приложения или включенными библиотеками. Следующие стратегии могут помочь вам избежать превышения контрольного предела DEX:
Просмотрите прямые и транзитивные зависимости вашего приложения. Убедитесь, что любая большая зависимость от библиотеки, которую вы включаете в свое приложение, используется таким образом, что перевешивает объем кода, добавляемого в приложение. Распространенным анти-паттерном является включение очень большой библиотеки, потому что несколько полезных методов были полезны. Уменьшение зависимостей кода вашего приложения часто помогает вам избежать ограничения ссылок DEX.
Удалите неиспользуемый код с помощью ProGuard - включите сжатие кода для запуска ProGuard для ваших сборок выпуска. Включение сжатия гарантирует, что вы не отправляете неиспользуемый код с вашими APK.
Помимо этих официальных советов, при создании проекта Unity, следующие шаги помогут вам в дальнейшем:
Настройка проекта приложения для использования конфигурации multi dex требует внесения следующих изменений.
Если minSdkVersion установлен на 21 или выше, все , что вам нужно сделать , это установить ,
multiDexEnabled
чтобыtrue
в файле build.gradle уровня модуля, как показано здесь:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Однако, если для вас
minSdkVersion
установлено значение 20 или ниже, вы должны использовать библиотеку поддержки multidex следующим образом:3.1. Измените файл build.gradle уровня модуля, чтобы включить multidex и добавить библиотеку multidex в качестве зависимости, как показано здесь:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2. В зависимости от того, переопределите ли вы класс Application, выполните одно из следующих действий:
- Если вы не переопределяете
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 (this), чтобы включить multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Проверьте ошибку в форме других плагинов и очистите проект. И снова запустите sysc.
Если в вашем проекте есть проблемы с зависимостями, запустите эту команду в Android Terminal
% Gradle clean App."App name"
Скопируйте эти зависимости в Application Gradle, под зависимостями:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
Добавьте signatureConfig в свои основные проекты Gradle.
Или вручную установите режим подписи в режим отладки, выберите «Файл» -> «Структура проекта» -> «Под модулями». Нажмите на свой проект, а в разделе «Типы сборки» выберите «Отладка» -> выберите «Настройка подписи» -> «Отладка».
Теперь синхронизируйте ваш Gradle и постройте проект.
Я бы порекомендовал вам перейти по этой ссылке, которая поможет вам создавать мультидексные игры напрямую через Unity.
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
Примечание. При этом включается только мультидекс в единстве (и это должно устранять проблемы мультидекса). Это не решит проблемы, связанные с gradle.
источник