Слишком много полевых ссылок: 70613; макс 65536

Мой проект использует эти плагины:

  • OneSignal
  • GooglePlayServices
  • регулировать
  • Гугл Аналитика
  • Unity IAP
  • Facebook SDK

Эти плагины используются практически в каждом проекте.

Но я за счет подсчета полей

Это мой список файлов.aar Список

Что я должен сделать, чтобы уменьшить количество ссылок?

2 ответа

Решение

Так что я должен сделать, чтобы уменьшить количество ссылок?

У вас так много плагинов с множеством функций / полей. Существует ограничение при создании этого из редактора Unity, и вы достигли этого предела.

Чтобы уменьшить количество ссылок, вы должны удалить некоторые из этих плагинов, но я уверен, что они вам нужны, и удаление может не подходить в этом случае.

Единственный способ обойти это и собрать для Android на данный момент - это экспортировать проект как Android-проект, а затем собрать его с помощью Android Studio. Это удаляет ограничение ссылки, наложенное Редактором Unity.


РЕДАКТИРОВАТЬ

Я забыл упомянуть, что вы должны включить multidex после его экспорта. Поскольку многие люди ежедневно сталкиваются с этой проблемой, я решил добавить подробные инструкции о том, как решить эту проблему, экспортировав ее, а также о том, как исправить ее, не экспортируя.

ИСПРАВИТЬ ЭКСПОРТ ПРОЕКТА

1A. Экспортируйте проект Unity как проект Android.

1B. Импорт в Android Studio:

Если при импорте в Android Studio появляется ошибка оценки, как показано ниже:

Ошибка: org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection не может быть приведен к org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.

В блоке "зависимостей", который находится в блоке "buildscript" в файле build.gradle, измените:

classpath 'com.android.tools.build.gradle.2.1.0'

в

classpath 'com.android.tools.build:gradle:2.2.3'


Если вы экспортируете проект и по-прежнему получаете ту же ошибку, вам нужно вручную включить мультидекс. Ниже приведен упрощенный шаг из документа Google, который будет показан вам в ошибке:

2.Добавить android:name="android.support.multidex.MultiDexApplication" > в тег приложения в файле AndroidManifest.xml.


3. Добавить compile 'com.android.support:multidex:1.0.1' в блок "зависимости" в файле build.gradle.


4. Добавить multiDexEnabled true в блок "defaultConfig", который находится в блоке "android" в файле build.gradle.

Постройте APK и посмотрите, работает ли он. Если ошибка подсчета ссылок исчезла, остановитесь здесь.


5.Получить исключение заголовка GC, как показано ниже?

java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC

Увеличьте размер кучи, которая будет использоваться при выполнении операции dex. Из этого решения добавьте следующее в блок "android" в файле build.gradle:

dexOptions {
    javaMaxHeapSize "4g"
}

ИСПРАВИТЬ БЕЗ ЭКСПОРТА ПРОЕКТА

Должен иметь Unity 5.5 и выше, чтобы сделать это:

1. Перейти к <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates Скопируйте mainTemplate.gradle подать в ваш <ProjectName>Assets\Plugins\Android папка.


2. Перейти к <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk Скопируйте AndroidManifest.xml подать в ваш <ProjectName>Assets\Plugins\Android


3. Откройте оба mainTemplate.gradle а также AndroidManifest.xml файл, который вы только что скопировали с помощью Visual Studio, затем внесите изменения из инструкции FIX, экспортируя команду PROJECT выше. Пропустить / игнорировать шаг № 1А и № 1Б. Просто сделайте шаги от № 2 до № 5. Вот и все.

Это то, что финал mainTemplate.gradle должно выглядеть, и это то, что финал AndroidManifest.xmlдолжен выглядеть так. Это только для справочных целей. Я предлагаю вам не использовать мой, а вместо этого следовать приведенным выше шагам, чтобы создать свой, потому что будущие версии Unity могут поставляться с разными файлами. Вы хотите убедиться, что используете последнюю версию, или у вас могут возникнуть проблемы с ее сборкой.


4. Создайте APK и посмотрите, работает ли он:

-

Если ошибка подсчета ссылок исчезла, остановитесь здесь:

5. Получаете ошибку, как показано ниже?

Build Failure Release сборки должны быть подписаны при использовании Gradle

Просто подпишите apk из настроек публикации в настройках сборки. Вы можете создать новое хранилище ключей или использовать существующее.


6. Другая ошибка, как показано ниже?

Ошибка: избегайте жесткого кодирования режима отладки; оставив его, можно отлаживать и выпускать сборки для автоматического назначения одного [HardcodedDebugMode]

Удалить android:debuggable="true"> от AndroidManifest.xml файл.


Если это неэкспортируемое решение не сработало для вас, вы должны использовать экспортирующее решение.

IMO, принятый ответ не правильный (или только частично правильный). Экспорт Android-студии не может "волшебным образом" решить эту проблему. Кроме того, по моему опыту, экспортированный проект Android-студии не всегда собирается сразу, и вам нужно исправить многое, прежде чем вы сможете его реально построить.

Вы используете много плагинов, и поэтому вы столкнулись с ограничением Android, заключающимся в том, что вы не можете ссылаться на более чем 64 000 методов.

Есть несколько вещей, которые вы можете попытаться решить:

  1. Удалите некоторые из этих плагинов, если это возможно (как уже было предложено в принятом ответе).
  2. Используйте мультидекс. В прошлом это было возможно только при экспорте проекта в Android-студию и создании его там. Начиная с Unity 5.5 вы можете построить свой проект, используя Gradle прямо из Unity. Это означает, что вы можете создать собственный файл Gradle, который настраивает вашу игру на использование Multidex. Это не уменьшает количество ссылок на метод, но обходит его, разделяя ваш собственный счетчик Java на несколько файлов dex.
  3. Используйте ProGuard - поскольку вы можете использовать Gradle из Unity, вы также можете определить ProGuard для запуска и удаления любого кода, который не используется.
Другие вопросы по тегам