Zu viele Feldreferenzen: 70613; max ist 65536

8

Mein Projekt verwendet diese Plugins:

  • OneSignal
  • GooglePlayServices
  • Passen Sie
  • an
  • Google Analytics
  • Unity IAP
  • Facebook SDK

Diese Plugins werden in fast jedem Projekt verwendet.

Aber ich bin über Feldreferenzen count

Dies ist meine .aar Dateiliste

Was soll ich tun, um die Anzahl der Referenzen zu verringern?

    
Kerem Bekman 03.03.2017, 15:33
quelle

3 Antworten

20
  

Was soll ich tun, um die Anzahl der Referenzen zu verringern?

Sie haben so viele Plugins mit vielen Funktionen / Feldern. Es gibt ein Limit, wenn du dies mit dem Editor von Unity erstellst und du hast dieses Limit erreicht.

Um die Anzahl der Referenzen zu verringern, müssen Sie einige dieser Plugins löschen, aber ich bin mir sicher, dass Sie sie brauchen und das Löschen ist in diesem Fall möglicherweise nicht die richtige Lösung.

Der only Weg, dies zu umgehen und für Android zu bauen, ist exportiere das Projekt als Android-Projekt und baue es dann mit Android Studio . Dadurch wird das vom Unity-Editor festgelegte Referenzlimit entfernt.

BEARBEITEN

Ich habe vergessen zu erwähnen, dass Sie multidex aktivieren müssen, nachdem Sie es exportiert haben. Da viele Leute dieses Problem täglich behandeln, habe ich beschlossen, eine ausführliche Anleitung zur Behebung dieses Problems hinzuzufügen, indem Sie es exportieren und auch reparieren, ohne es zu exportieren .

FIX DURCH EXPORTIEREN DES PROJEKTS

1A .Exportieren Sie das Unity-Projekt als Android-Projekt.

1B .Im Android Studio importieren:

Wenn beim Importieren in Android Studio ein Fehler auftritt, z. B. wie folgt:

  

Fehler: org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection   kann nicht umgewandelt werden   org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection

Ändern Sie im Block "Abhängigkeiten", der sich im Block "buildscript" in der Datei build.gradle befindet:

%Vor%

bis

%Vor%

Wenn Sie das Projekt exportieren und immer noch denselben Fehler erhalten, müssen Sie multidex manuell aktivieren. Im Folgenden finden Sie einen vereinfachten Schritt aus dem Google-Dokument , das Ihnen in der Fehlermeldung angezeigt wird:

2 .Fügen Sie android:name="android.support.multidex.MultiDexApplication" > zur Anwendung -Tag in der AndroidManifest.xml -Datei.

3 Fügen Sie compile 'com.android.support:multidex:1.0.1' dem "Abhängigkeiten" -Block in der build.gradle -Datei hinzu.

4 Fügen Sie multiDexEnabled true dem "defaultConfig" -Block hinzu, der sich im "android" -Block in der build.gradle -Datei befindet .

Erstellen Sie APK und sehen Sie, ob es funktioniert. Wenn der Referenzzählerfehler verschwunden ist, stoppen Sie hier.

5 .Eine GC-Overhead-Ausnahme wie die folgende erhalten?

  

java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten

Erhöhen Sie die Größe des Zwischenspeichers, der beim Ausführen des dex-Vorgangs verwendet wird. Fügen Sie in dieser Lösung Folgendes zum Block "android" im < em> build.gradle Datei:

%Vor%

FIX OHNE DAS PROJEKT EXPORTIEREN

Muss Unity 5.5 und höher haben, um dies zu tun:

1 .Gehen Sie zu <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates , Kopieren Sie die mainTemplate.gradle -Datei in Ihren <ProjectName>Assets\Plugins\Android -Ordner.

2 .Gehen Sie zu <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk , Kopieren Sie die AndroidManifest.xml -Datei in Ihr <ProjectName>Assets\Plugins\Android

3 .Öffnen Sie sowohl die Dateien mainTemplate.gradle und AndroidManifest.xml , die Sie gerade mit Visual Studio kopiert haben, als auch die Änderung aus der obigen Anweisung FIX BY EXPORTING THE PROJECT . Überspringen / Ignorieren Sie die Schritte # 1A und # 1B . Führen Sie einfach Schritte von # 2 zu # 5 aus. Das ist es.

Dies ist das, was das endgültige mainTemplate.gradle sollte wie aussehen und das ist, was die endgültige AndroidManifest.xml sollte aussehen. Dies dient nur zu Referenzzwecken. Ich schlage vor, Sie verwenden nicht meins , sondern folgen Sie stattdessen den obigen Kopierschritten, um Ihre zu erstellen, da zukünftige Unity-Versionen mit unterschiedlichen Dateien geliefert werden können. Sie möchten sicherstellen, dass Sie die neueste verwenden, oder Sie haben möglicherweise Probleme beim Erstellen.

4 .Build APK und sehen, ob es funktioniert:

-

Wenn der Referenzzählerfehler verschwunden ist, stoppen Sie hier:

5 .Wird ein Fehler wie der folgende angezeigt?

  

Build-Fehler Release-Builds müssen signiert werden, wenn Gradle verwendet wird

Nur signieren die apk von den Veröffentlichungseinstellungen in der Build-Einstellungen Sie können einen neuen Schlüsselspeicher erstellen oder einen vorhandenen Schlüsselspeicher verwenden.

6 .Weitere Fehler wie unten?

  

Fehler: Vermeiden Sie die Hardcodierung des Debug-Modus; es auslassen ermöglicht Debuggen   und Releasebuilds, um automatisch einen [HardcodedDebugMode]

zuzuweisen

Entfernen Sie android:debuggable="true"> aus der AndroidManifest.xml -Datei.

Wenn diese nicht exportierende Lösung nicht für Sie funktioniert hat, müssen Sie Verwenden Sie die Exportlösung.

    
Programmer 03.03.2017, 15:52
quelle
5

IMO, die angenommene Antwort ist nicht korrekt (oder nur teilweise korrekt). Beim Exportieren eines Android-Studios wird dieses Problem nicht "magisch" behoben. Aus meiner Erfahrung heraus baut das exportierte Android-Studio-Projekt nicht immer sofort und Sie müssen viele Dinge reparieren, bevor Sie es tatsächlich erstellen können.

Sie verwenden viele Plugins und so haben Sie sich mit einem Android-Beschränkung , dass nicht mehr als 64k-Methoden referenziert werden können.

Es gibt ein paar Dinge, die Sie versuchen können, dies zu lösen:

  1. Löschen Sie einige dieser Plugins, wenn möglich (wie bereits in der angenommenen Antwort vorgeschlagen).
  2. Verwenden Sie multidex . In der Vergangenheit war dies nur möglich, indem das Projekt in Android Studio exportiert und dort gebaut wurde. Ab Unity 5.5 können Sie Ihr Projekt mit Gradle direkt von Unity aus erstellen. Dies bedeutet, dass Sie eine benutzerdefinierte Gradle-Datei erstellen können, die Ihr Spiel für die Verwendung von Multidex konfiguriert. Dies verringert zwar nicht die Anzahl der Methodenreferenzen, aber es funktioniert, indem die Anzahl der nativen Java-Dateien in mehrere Dex-Dateien aufgeteilt wird.
  3. Verwenden Sie ProGuard - da Sie Gradle von Unity verwenden können, können Sie ProGuard auch so definieren, dass Code ausgeführt und entfernt wird wird nicht benutzt.
lysergic-acid 13.06.2017 00:33
quelle
-2

Gemäß meiner Erfahrung und Lösung, geben Sie allen AndroidManifest-Dateien denselben Paketnamen. Es löst Ihr zu großes Feldbezugsproblem. Ich habe mein Problem auf diese Weise bereits gelöst, ich hoffe auch Sie:)

    
Siddharth 06.09.2017 18:16
quelle

Tags und Links