Demasiadas referencias de campo: 70613; max es 65536

Mi proyecto usa estos complementos:

  • OneSignal
  • GooglePlayServices
  • Ajustar
  • Google analitico
  • Unidad IAP
  • SDK de Facebook

Esos complementos se usan en casi todos los proyectos.

Pero estoy sobre el recuento de referencias de campo

Esta es mi lista de archivos .aar Lista

¿Qué debo hacer para disminuir el recuento de referencias?

Entonces, ¿qué debo hacer para disminuir el recuento de referencias?

Tienes tantos complementos con muchas funciones / campos. Hay un límite al crear esto desde el Editor de Unity y ha alcanzado ese límite.

Para disminuir el recuento de referencias, debe eliminar algunos de estos complementos, pero estoy seguro de que los necesita y la eliminación puede no ser la solución adecuada en este caso.

La única forma de evitar esto y construir para Android en este momento es exportar el Proyecto como Proyecto de Android y luego comstackrlo con Android Studio . Esto elimina el límite de referencia impuesto por el Editor de Unity.


EDITAR

Olvidé mencionar que debes habilitar multidex después de exportarlo. Como muchas personas pasan por este problema a diario, decidí agregar una instrucción completa sobre cómo solucionar este problema exportándolo y también cómo solucionarlo sin exportarlo .

CORREGIR AL EXPORTAR EL PROYECTO

1A. Exportar el proyecto de Unity como proyecto de Android.

enter image description here

1B .Importación a Android Studio:

enter image description here

Si obtiene un error de calificación al importar a Android Studio como el siguiente:

Error: org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection no se puede convertir en org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection

enter image description here

En el bloque “dependencias” que se encuentra en el bloque “buildscript” en el archivo build.gradle , cambie:

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

a

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

enter image description here


Si exporta el proyecto y aún obtiene el mismo error, debe habilitar manualmente Multidex. A continuación se muestra un paso simplificado a seguir del documento de Google que se le mostrará en el error:

2. Agregue android:name="android.support.multidex.MultiDexApplication" > a la etiqueta de la aplicación en el archivo AndroidManifest.xml .

enter image description here


3. Agregue compile 'com.android.support:multidex:1.0.1' al bloque “dependencias” en el archivo build.gradle .

enter image description here


4. Agregue multiDexEnabled true al bloque “defaultConfig” que está en el bloque “android” en el archivo build.gradle .

enter image description here

Crea APK y mira si funciona. Si el error de conteo de referencia se ha ido, deténgase aquí.


5. ¿ Obtiene una excepción de gastos generales de GC como la de abajo?

java.lang.OutOfMemoryError: se excedió el límite superior del GC

Aumente el tamaño de almacenamiento dynamic que se usará al realizar la operación de dex. Desde esta solución , agregue lo siguiente al bloque “android” en el archivo build.gradle :

 dexOptions { javaMaxHeapSize "4g" } 

enter image description here

REPARAR SIN EXPORTAR EL PROYECTO

Debe tener Unity 5.5 o superior para hacer esto:

1. Vaya a \Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates , copie el archivo mainTemplate.gradle en su carpeta Assets\Plugins\Android .


2. Vaya a \Editor\Data\PlaybackEngines\AndroidPlayer\Apk , copie el archivo AndroidManifest.xml a su Assets\Plugins\Android


3. mainTemplate.gradle ambos archivos mainTemplate.gradle y AndroidManifest.xml que acaba de copiar con Visual Studio y luego realice la modificación desde la instrucción FIX BY EXPORTING THE PROJECT anterior. Saltar / Ignorar paso # 1A y # 1B . Simplemente haga los pasos del n . ° 2 al n . ° 5 . Eso es.

Esto es lo que debería ser la mainTemplate.gradle final de mainTemplate.gradle debería ser el AndroidManifest.xml final. Esto es solo para propósitos de referencia. Le sugiero que no use el mío, sino que siga los pasos de copia anteriores para crear el suyo porque las futuras versiones de Unity pueden venir con diferentes archivos. Desea asegurarse de usar la última o puede tener problemas para desarrollarla.


4. Cree la APK y vea si funciona:

enter image description here

Si el error de recuento de referencias se ha ido, deténgase aquí:

5. ¿ Obtiene un error como el de abajo?

Build Failure Las comstackciones de versión deben ser firmadas cuando se utiliza Gradle

Simplemente firme la aplicación desde la configuración de publicación en la configuración de comstackción . Puede crear un nuevo almacén de claves o usar uno existente.

enter image description here


6. ¿ Otro error como el de abajo?

Error: evite codificar el modo de depuración; dejarlo fuera permite que las versiones de depuración y liberación asignen automáticamente un [HardcodedDebugMode]

Eliminar android:debuggable="true"> del archivo AndroidManifest.xml .


Si esta solución no exportadora no funcionó para usted, entonces debe usar la solución de exportación.

IMO: la respuesta aceptada no es correcta (o solo parcialmente correcta). Exportar un estudio de Android no solucionará “mágicamente” este problema. Además, según mi experiencia, el proyecto de estudio de Android exportado no siempre se construye de inmediato y tienes que arreglar muchas cosas antes de que puedas construirlo.

Está utilizando muchos complementos y se enfrenta a una limitación de Android de no poder hacer referencia a más de 64k métodos.

Hay algunas cosas que puedes intentar para resolver esto:

  1. Borre algunos de estos complementos, si es posible (como ya se sugirió en la respuesta aceptada).
  2. Usa multidex . En el pasado, esto solo fue posible al exportar el proyecto a un estudio de Android y construirlo allí. Comenzando con Unity 5.5 puede construir su proyecto usando Gradle directamente desde Unity. Esto significa que puede crear un archivo gradle personalizado que configure su juego para usar Multidex. Esto no reduce el conteo de ref de método, pero funciona a su alrededor al dividir su conteo de Java nativo en múltiples archivos dex.
  3. Use ProGuard , ya que puede usar Gradle desde Unity, también puede definir ProGuard para ejecutar y eliminar cualquier código que no se use.