android unity3d multidex android-multidex

android - Demasiadas referencias de campo: 70613; max es 65536



unity3d multidex (2)

Mi proyecto usa estos complementos:

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

Esos complementos se utilizan en casi todos los proyectos.

Pero ya superé el recuento de referencias de campo

Esta es mi lista de archivos .aar

¿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 construir esto desde el Editor de Unity y has 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 compilar para Android en este momento es export el Proyecto como Proyecto Android y luego compilarlo con Android Studio . Esto elimina el límite de referencia impuesto por el Editor de Unity.

EDITAR

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

ARREGLAR EXPORTANDO EL PROYECTO

1A. Exporte el Proyecto Unity como Proyecto Android.

1B. Importar a Android Studio:

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

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''

Si exporta el proyecto y sigue obteniendo el mismo error, debe habilitar manualmente multidex. A continuación se muestra un paso simplificado a seguir del doc de Google que se mostrará en el error:

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

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

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

Compile APK y vea si funciona. Si el error de recuento de referencias desapareció, deténgase aquí.

5. ¿ Obteniendo una excepción general de GC como la siguiente?

java.lang.OutOfMemoryError: se ha excedido el límite superior del GC

Aumente el tamaño de almacenamiento dinámico que se utilizará al realizar la operación dex. Desde esta solution , agregue lo siguiente al bloque "android" en el archivo build.gradle :

dexOptions { javaMaxHeapSize "4g" }

ARREGLAR SIN EXPORTAR EL PROYECTO

Debe tener Unity 5.5 y superior para hacer esto:

1. Vaya a <UnityInstallationDirecory>/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates , copie el archivo mainTemplate.gradle en su carpeta <ProjectName>Assets/Plugins/Android .

2. Vaya a <UnityInstallationDirecory>/Editor/Data/PlaybackEngines/AndroidPlayer/Apk , copie el archivo AndroidManifest.xml en su <ProjectName>Assets/Plugins/Android

3. mainTemplate.gradle archivo mainTemplate.gradle y AndroidManifest.xml que acaba de copiar con Visual Studio, luego realice la modificación desde el mainTemplate.gradle EL PROYECTO de la instrucción anterior. Omita / Ignore los pasos # 1A y # 1B . Solo haz los pasos del # 2 al # 5 . Eso es.

This es como debería verse el This final y This debería ser el this final. Esto es solo para fines 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 el último o puede tener problemas para crearlo.

4. Cree APK y vea si funciona:

-

Si el error de recuento de referencias desapareció, deténgase aquí:

5. ¿ Obteniendo un error como el de abajo?

Las versiones de lanzamiento de fallas de compilación deben firmarse cuando se usa Gradle

Simplemente sign el apk desde la Configuración de publicación en la Configuración de compilación . Puede crear un nuevo almacén de claves o utilizar uno existente.

6. Otro error como el de abajo?

Error: evite codificar el modo de depuración; dejarlo afuera permite que las compilaciones de depuración y lanzamiento asignen automáticamente uno [HardcodedDebugMode]

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

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


OMI, la respuesta aceptada no es correcta (o solo parcialmente correcta). Exportar un estudio de Android no solucionará "mágicamente" este problema. Además, desde mi experiencia, el proyecto de estudio de Android exportado no siempre se construye de inmediato y hay que arreglar muchas cosas antes de poder construirlo.

Está utilizando muchos complementos, por lo que se enfrentó 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. Elimine algunos de estos complementos, si es posible (como ya se sugirió en la respuesta aceptada).
  2. Utiliza doc . En el pasado, esto solo era posible exportando el proyecto al estudio de Android y construyéndolo allí. Comenzando con Unity 5.5, puede construir su proyecto usando Gradle directamente desde Unity. Esto significa que puedes crear un archivo gradle personalizado que configura tu juego para usar Multidex. Esto no reduce el recuento de referencias del método, pero funciona al dividir su recuento nativo de Java en múltiples archivos dex.
  3. Use ProGuard : dado que puede usar Gradle desde Unity, también puede definir ProGuard para ejecutar y eliminar cualquier código que no se use.