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:
- Elimine algunos de estos complementos, si es posible (como ya se sugirió en la respuesta aceptada).
- 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.
- 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.