web-dev-qa-db-fra.com

Impossible de construire apk: le nombre de références de méthodes ne peut pas dépasser 64 Ko

J'ai essayé de créer le fichier apk pour mon application. Cependant, le message d'erreur suivant s'affiche: Le nombre de références de méthodes ne peut pas dépasser 64 Ko.

Voici les erreurs,

Erreur: le nombre de références de méthodes dans un fichier .dex ne peut pas dépasser 64 Ko. Découvrez comment résoudre ce problème à l'adresse https://developer.Android.com/tools/building/multidex.html

Erreur: L'exécution a échoué pour la tâche ': app: transformClassesWithDexForDebug'.

com.Android.build.api.transform.TransformException: com.Android.ide.common.process.ProcessException: Java.util.concurrent.ExecutionException: com.Android.Common.process.ProcessException: exception.org.gradle.process. internal.ExecException: la commande de processus 'C:\Program Files\Java\jdk1.7.0_15\bin\Java.exe' 's'est terminée avec une valeur de sortie non nulle 2

Ceci est mon fichier de classement,

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

Je veux construire le fichier apk et le déployer sans aucun problème, comment puis-je le faire?

Mettre à jour

J'ai aussi essayé ce qui suit

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

Ceci produit le message:

Erreur: L'exécution a échoué pour la tâche ': app: transformClassesWithNewClassShrinkerForDebug'.

Avertissements détectés lors du rétrécissement, utilisez -dontwarn ou -ignorewarnings pour les supprimer.

Comment puis-je gérer cela et construire un apk approprié? S'il vous plaît aider.

26
Nikhil Raghavendra
Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.try.app"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

ici multiDexEnabled true devrait faire le jeu pour vous

UPDATE: Support de la dernière version Android version
1. Si votre minSdkVersion est défini sur 21 ou supérieur, il vous suffit de définir multiDexEnabled sur true dans votre fichier build.gradle au niveau du module, comme indiqué ci-dessus. .
2. Toutefois, si votre minSdkVersion est défini sur 20 ou une valeur inférieure, vous devez utiliser la bibliothèque de prise en charge multidex avec les modifications ci-dessus, comme suit:

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}

Outre l'ajout ci-dessus de la bibliothèque de support, vous devez apporter des modifications à votre classe Application comme indiqué dans ce Lien .

MEILLEURE PRATIQUE:
1. Supprimez tout code inutilisé avec proguard.
2. Évitez d’ajouter des dépendances inutiles dans votre projet.
3. Si un nombre limité de méthodes ou de classes de n'importe quelle bibliothèque open source est nécessaire, il est conseillé de ne copier que celles de votre projet, car cela vous donne non seulement un contrôle total sur elles, mais permet également à proguard de les utiliser et vous n'aurez aucune information inutilisée. méthodes dans votre code.

Source: Développeurs Android - Configurer les applications avec un nombre de méthodes de 64 Ko

64
Mohammed Atif

Impossible de générer un apk: le nombre de références de méthodes ne peut pas dépasser 64 Ko si le fichier app .dex contient plus de 65 536 méthodes.

Exceed 65K Method Cela signifie que la méthode compte plus de 65 536 méthodes. Il existe différentes façons de résoudre ce problème:

1. Réduisez les dépendances dans votre projet en mettant les dépendances nécessaires

La plupart des problèmes que j'ai trouvés chez d'autres développeurs sont l'utilisation des services Google Play dans leur projet comme celui-ci.

 compile 'com.google.Android.gms:play‐services:8.4.0'

Par conséquent, la meilleure solution consiste à ne choisir que certaines dépendances dans les services Google Play que vous souhaitez vraiment utiliser.

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. Définir la version minimale du SDK sur 21 ou supérieure

Pourquoi cela a fonctionné quand changer le SDK minimum à 21? C'est à cause de Android 5.0 ou supérieur sont des applications ART (Android Runtime) prenant en charge MultiDex au lieu de Dalvik. Ainsi, ART peut prendre en charge plus de 65 536 méthodes.

. Utilisez Proguard pour réduire la méthode inutile

4. Utilisez MultiDex

Mais ce sont les limites de la bibliothèque MultiDex

• Peut se produire ANR lors du lancement de l'application si les fichiers .dex sont trop volumineux.

• Doit être défini au minimum SDK à la version 14 ou supérieure.

• MulitDex utilise plus de mémoire et peut se bloquer lors de l'exécution de l'application si la mémoire d'allocation est supérieure à la limite.

• Prenez plus de temps pour construire le projet

30
Devraj Singh

Mettez ceci dans votre defaultConfig:

multiDexEnabled true
4