No se puede crear apk: El número de referencias de métodos no puede superar los 64K
He estado intentando construir el archivo apk para mi aplicación, sin embargo, estoy recibiendo el error: El número de referencias de método no puede superar los 64K.
Aquí están los errores,
- Gradle omite la tarea X ya que no tiene archivos de origen
- Cómo generar html informe con gradle 1.12?
- Usando Build Flavors - Estructurar las carpetas de origen y build.gradle correctamente
- Diminuir el tiempo de construcción del android studio 2.1
- Android: cómo establecer un valor de gradle de un enum conocido
Error: El número de referencias de método en un archivo .dex no puede superar los 64K. Obtenga información sobre cómo resolver este problema en https://developer.android.com/tools/building/multidex.html.
Error: Error de ejecución para la tarea ': app: transformClassesWithDexForDebug'.
Com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process. Internal.ExecException: Process 'command' C: \ Archivos de programa \ Java \ jdk1.7.0_15 \ bin \ java.exe terminado con valor de salida no nulo 2
Este es mi archivo gradle,
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "nikhilraghavendra.hopper" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { shrinkResources true minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE-FIREBASE.txt' exclude 'META-INF/NOTICE' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:design:23.2.1' compile 'com.google.android.gms:play-services-identity:8.4.0' compile 'com.firebase:firebase-client-android:2.3.1' compile 'com.android.support:cardview-v7:23.2.1' compile 'com.google.android.gms:play-services:8.4.0' }
Quiero crear el archivo apk y desplegarlo sin ningún problema, ¿cómo lo hago?
Actualizar
También intenté lo siguiente
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" dexOptions { maxProcessCount = 4 // this is the default value } dataBinding{ enabled = true } defaultConfig { applicationId "nikhilraghavendra.hopper" minSdkVersion 21 targetSdkVersion 23 resConfigs "en", "fr" versionCode 1 versionName "1.0" } buildTypes { release { shrinkResources true minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true useProguard false } } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE-FIREBASE.txt' exclude 'META-INF/NOTICE' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:design:23.2.1' compile 'com.google.android.gms:play-services-identity:8.4.0' compile 'com.firebase:firebase-client-android:2.3.1' compile 'com.android.support:cardview-v7:23.2.1' compile 'com.google.android.gms:play-services:8.4.0' }
Esto está produciendo el mensaje:
Error: Error de ejecución para la tarea ': app: transformClassesWithNewClassShrinkerForDebug'.
Las advertencias que se encuentran durante el encogimiento, utilice -dontwarn o -ignorewarnings para suprimirlas.
¿Cómo trato con esto y construyo un apk apropiado? Por favor ayuda.
- Gradle: La ejecución falló para la tarea compileReleaseAidl
- Androidmanifest xml no existe o tiene una etiqueta raíz incorrecta
- Archivos duplicados copiados en APK META-INF cuando se construye Gradle
- ¿Cómo puedo eliminar los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?
- Android Studio Stuck at Gradle Descargar en crear un nuevo proyecto
- ¿Por qué jcenter no puede resolver una dependencia mientras mavenCentral puede?
- Pruebas de Android con Gradle: Cambie el nombre de archivo de salida de prueba de JUnit
- Android Studio: Failure
android { compileSdkVersion 26 buildToolsVersion "26.0.0" defaultConfig { applicationId "com.try.app" minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" multiDexEnabled true }
Aquí multiDexEnabled true
debería hacer el juego por ti
ACTUALIZACIÓN: para admitir la versión más reciente de Android
1. Si su minSdkVersion
está establecida en 21 o superior, todo lo que necesita hacer es establecer multiDexEnabled como true en su archivo build.gradle a nivel de módulo, como se muestra arriba.
2. Sin embargo, si su minSdkVersion
está establecida en 20 o inferior, debe utilizar la biblioteca de soporte multidex junto con los cambios anteriores de la siguiente manera:
dependencies { compile 'com.android.support:multidex:1.0.1' }
Aparte de la adición anterior de la biblioteca de soporte, debe realizar cambios en su clase de aplicación como se menciona en este vínculo .
MEJORES PRÁCTICAS:
1. Quite cualquier código no utilizado con proguard.
2. Evite agregar dependencias innecesarias en su proyecto.
3. Si se necesita un número limitado de métodos o clases de cualquier biblioteca de código abierto, entonces es aconsejable clonar sólo a aquellos en su proyecto, ya que no sólo le da total control sobre ellos, sino que también le permite a proguard actuar sobre ellos y no tiene Cualquier método no utilizado en su código.
Fuente: Desarrolladores de Android – Configurar aplicaciones con 64 KB
No se puede crear apk: El número de referencias de método no puede exceder de 64K ocurren cuando el archivo .dex de la aplicación tiene más de 65.536 métodos.
Exceed 65K Método que significa que el método cuenta más de 65.536 métodos Hay diferentes maneras de solucionarlo:
1. Reducir las dependencias en su proyecto poner dependencias en gradle que se requieren
La mayoría de los problemas que encontré de otros desarrolladores es utilizar los servicios de Google Play en ellos.
compile 'com.google.android.gms:play‐services:8.4.0'
Así que la mejor manera es elegir solo algunas dependencias en Google Play Services que realmente quieras usar.
compile 'com.google.android.gms:play‐services‐location:8.4.0' compile 'com.google.android.gms:play‐services‐maps:8.4.0' compile 'com.google.android.gms:play‐services‐ads:8.4.0'
2. Establezca una versión mínima de SDK a 21 o superior
¿Por qué funcionó cuando el cambio SDK mínimo a 21? Eso es debido a Android 5.0 o superior son el uso de ART (Android Runtime) que soporta MultiDex en lugar de Dalvik. Por lo tanto, ART puede soportar más de 65.536 métodos.
3. Utilice Proguard para reducir el método inútil
4. Utilice MultiDex
Pero estos son la limitación de la biblioteca MultiDex
• Puede ocurrir ANR mientras se ejecuta la aplicación si los archivos .dex son demasiado grandes.
• Debe definirse SDK mínimo a la versión 14 o superior.
• MulitDex utiliza más memoria y puede bloquearse mientras la aplicación se ejecuta si la memoria de asignación está por encima del límite.
Toma más tiempo de construcción cuando construyes el proyecto
Ponga esto dentro de su defaultConfig
:
multiDexEnabled true
- Espacio flexible en Android
- ClassCastException: NoClassDefFoundError no se puede transmitir a RuntimeException