web-dev-qa-db-fra.com

Trop de références de champ: 70613; max 65536

Mon projet utilise ces plugins:

  • OneSignal
  • GooglePlayServices
  • Régler
  • Google Analytics
  • Unity IAP
  • SDK Facebook

Ces plugins sont utilisés dans presque tous les projets.

Mais j'ai dépassé le nombre de références sur le terrain

Ceci est ma liste de fichiers .aar List

Que dois-je faire pour diminuer le nombre de références?

11
Kerem Bekman

Alors, que dois-je faire pour diminuer le nombre de références?

Vous avez tellement de plugins avec de nombreuses fonctions/champs. Il y a une limite lors de la construction à partir de l'éditeur Unity et vous avez atteint cette limite.

Pour diminuer le nombre de références, vous devez supprimer certains de ces plugins mais je suis sûr que vous en avez besoin et la suppression peut ne pas être la solution appropriée dans ce cas.

La seule manière de contourner cela et de construire pour Android en ce moment est de -- exporter le projet sous la forme Android Project puis le construire avec Android Studio. Cela supprime la limite de référence imposée par l'éditeur de Unity .


[~ # ~] modifier [~ # ~]

J'ai oublié de mentionner que vous devez activer le multidex après l'avoir exporté. Étant donné que de nombreuses personnes traversent ce problème quotidiennement, j'ai décidé d'ajouter une instruction approfondie sur la façon de résoudre ce problème en en l'exportant et également comment le résoudre. sans l'exporter .

CORRIGER EN EXPORTANT LE PROJET

1A . Exportez le projet Unity en tant que Android Project.

enter image description here

1B . Importez dans Android Studio:

enter image description here

Si vous obtenez une erreur de note lors de l'importation dans Android Studio comme celui ci-dessous:

Erreur: org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection ne peut pas être converti en org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection

enter image description here

Dans le bloc "dépendances" qui se trouve dans le bloc "buildscript" du fichier build.gradle, changez:

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

à

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

enter image description here


Si vous exportez le projet et obtenez toujours la même erreur, vous devez activer manuellement le multidex. Voici une étape simplifiée à suivre de Google doc qui vous sera montrée dans l'erreur:

2 . Ajoutez Android:name="Android.support.multidex.MultiDexApplication" > à la balise application dans le fichier AndroidManifest.xml.

enter image description here


3 . Ajoutez compile 'com.Android.support:multidex:1.0.1' au bloc "dépendances" dans le fichier build.gradle.

enter image description here


4 . Ajoutez multiDexEnabled true au bloc "defaultConfig" qui se trouve dans le bloc "Android" du fichier build.gradle.

enter image description here

Construisez l'APK et voyez si cela fonctionne. Si l'erreur de comptage de référence a disparu, arrêtez-vous ici.


5 . Obtenir une exception de surcharge GC comme celle ci-dessous?

Java.lang.OutOfMemoryError: dépassement de la limite de surcharge du GC

Augmentez la taille de segment de mémoire qui sera utilisée lors de l'exécution d'une opération dex. A partir de cette solution , ajoutez ce qui suit au bloc "Android" dans le fichier build.gradle:

dexOptions {
    javaMaxHeapSize "4g"
}

enter image description here

CORRIGER SANS EXPORTER LE PROJET

Doit avoir Unity 5.5 et supérieur pour ce faire:

1 . Allez à <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates, Copiez le mainTemplate.gradle fichier dans votre <ProjectName>Assets\Plugins\Android dossier.


2 . Allez à <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk, Copiez le AndroidManifest.xml fichier dans votre <ProjectName>Assets\Plugins\Android


3 . Ouvrez les deux mainTemplate.gradle et AndroidManifest.xml fichier que vous venez de copier avec Visual Studio, puis effectuez la modification à partir de l'instruction CORRIGER EN EXPORTANT LE PROJET ci-dessus. Étape Ignorer/Ignorer # 1A et # 1B . Suivez simplement les étapes de # 2 à # 5 . C'est ça.

Ce est ce que le final mainTemplate.gradle devrait ressembler et this est ce à quoi la finale AndroidManifest.xml devrait ressembler. Ceci est uniquement à des fins de référence. Je suggère de ne pas utiliser le mien mais de suivre les étapes de copie ci-dessus pour créer le vôtre, car les futures versions d'Unity peuvent contenir des fichiers différents. Vous voulez vous assurer que vous utilisez la dernière version ou vous pourriez avoir des problèmes pour la construire.


4 . Construisez l'APK et voyez si cela fonctionne:

enter image description here

-

Si l'erreur de comptage de référence a disparu, arrêtez-vous ici:

5 . Vous obtenez une erreur comme celle ci-dessous?

Les builds Release Failure Release doivent être signés lors de l'utilisation de Gradle

Juste signe l'apk du Paramètres de publication dans le Paramètres de construction. Vous pouvez créer un nouveau fichier de clés ou utiliser un fichier existant.

enter image description here


6 . Une autre erreur comme ci-dessous?

Erreur: évitez de coder en dur le mode de débogage; le laisser de côté permet aux versions de débogage et de publication d'attribuer automatiquement une [HardcodedDebugMode]

Retirer Android:debuggable="true"> du AndroidManifest.xml fichier.


Si cette solution non exportatrice ne fonctionnait pas pour vous, vous devez utiliser la solution d'exportation.

31
Programmer

OMI, la réponse acceptée n'est pas correcte (ou seulement partiellement correcte). L'exportation d'un Android studio ne résoudra pas "par magie" ce problème. De plus, d'après mon expérience, le projet de studio Android Android) ne se construit pas toujours tout de suite et vous devez réparer beaucoup de choses avant de pouvoir le construire.

Vous utilisez beaucoup de plugins et vous avez donc dû faire face à limitation Android de ne pas pouvoir référencer plus de 64k méthodes.

Il y a quelques choses que vous pouvez essayer de résoudre:

  1. Supprimez certains de ces plugins, si possible (comme déjà suggéré dans la réponse acceptée).
  2. Utilisez multidex . Dans le passé, cela n'était possible qu'en exportant le projet vers Android studio et en le construisant là-bas. À partir de Unity 5.5, vous pouvez créer votre projet à l'aide de Gradle directement depuis Unity. Cela signifie que vous pouvez créer un fichier gradle qui configure votre jeu pour utiliser Multidex. Cela ne réduit pas le nombre de références de méthode, mais cela fonctionne en divisant votre compte natif Java en plusieurs fichiers dex).
  3. Utilisez ProGuard - puisque vous pouvez utiliser Gradle from Unity, vous pouvez également définir ProGuard pour exécuter et supprimer tout code non utilisé.
5
lysergic-acid