android - play - identificador de llamadas con nombre
No se puede crear apk: el número de referencias de método no puede exceder de 64 K (3)
No se puede crear apk: el número de referencias de métodos no puede exceder de 64 K cuando el archivo .dex de la aplicación tiene más de 65,536 métodos.
Supere el método 65K que significa que el método cuenta con más de 65,536 métodos. Hay diferentes maneras de solucionarlo:
1. Reduzca las dependencias en su proyecto ponga las dependencias en gradle que son requeridas
La mayoría de los problemas que encontré de otros desarrolladores es usar Google Play Services en proyectos de este tipo.
compile ''com.google.android.gms:play‐services:8.4.0''
Por lo tanto, la mejor manera es elegir solo algunas dependencias en los servicios de Google Play que realmente desea 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 la versión mínima de SDK en 21 o superior
¿Por qué funcionó cuando se cambia el SDK mínimo a 21? Esto se debe a que Android 5.0 o superior es el uso de ART (Android Runtime) que admite MultiDex en lugar de Dalvik. Así que ART puede soportar más de 65,536 métodos.
3. Utilice Proguard para reducir el método inútil
4. Utilice MultiDex
Pero estas son las limitaciones de la librería MultiDex.
• Puede ocurrir ANR mientras se ejecuta la aplicación si los archivos .dex son demasiado grandes.
• Debe definirse el SDK mínimo a la versión 14 o superior.
• MulitDex usa más memoria y puede fallar mientras se ejecuta la aplicación si la memoria de asignación está por encima del límite.
• Toma más tiempo de construcción cuando construyes el proyecto
He estado tratando de compilar el archivo apk para mi aplicación, sin embargo, recibo el error: el número de referencias de métodos no puede superar los 64K.
Aquí están los errores,
Error: el número de referencias de método en un archivo .dex no puede exceder de 64K. Aprenda a resolver este problema en https://developer.android.com/tools/building/multidex.html
Error: la ejecución falló para la tarea '': aplicación: transformClassesWithDexForDebug''.
com.android.build.api.transform.TransformException: com.android.ide.mon.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.mon.process.ProcessException: org.gradle.process. internal.ExecException: El ''comando'' del proceso ''C: / Archivos de programa / Java / jdk1.7.0_15 / bin / java.exe'' ''terminó con un valor de salida 2 distinto de cero
Este es mi archivo de 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 compilar el archivo apk e implementarlo sin problemas, ¿cómo lo hago?
Actualizar
También probé 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: la ejecución falló para la tarea '': app: transformClassesWithNewClassShrinkerForDebug''.
Las advertencias encontradas durante la reducción, utilice -dontwarn o -ignorewarnings para suprimirlas.
¿Cómo me ocupo de esto y construyo un apk adecuado? Por favor ayuda.
Ponga esto dentro de su defaultConfig
:
multiDexEnabled true
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 soportar la última versión de Android
1. Si su minSdkVersion
está configurado a 21 o superior, todo lo que necesita hacer es establecer multiDexEnabled en verdadero en su archivo build.gradle a nivel de módulo, como se muestra arriba.
2. Sin embargo, si su minSdkVersion
está configurado a 20 o menos, entonces debe usar la biblioteca de soporte multidex junto con los cambios anteriores de la siguiente manera:
dependencies {
compile ''com.android.support:multidex:1.0.1''
}
Además de la adición anterior de la biblioteca de soporte, debe realizar cambios en su clase de aplicación como se menciona en este Link .
MEJORES PRÁCTICAS:
1. Elimine cualquier código no utilizado con proguard.
2. Evita agregar dependencias innecesarias en tu proyecto.
3. Si se necesitan métodos o clases de número limitado de cualquier biblioteca de código abierto, es recomendable clonar solo aquellos en su proyecto, ya que no solo le da control total sobre ellos, sino que también permite que proguard actúe sobre ellos y no tiene Cualquier método no utilizado en su código.
Fuente: Link