Le nombre de références de méthode dans A. le fichier dex ne peut pas dépasser 64K API 17

je suis en train de construire une application avec la bibliothèque SugarORM, mais quand j'essaie de construire le projet pour L'API 17 (Je n'ai pas vérifié les autres) il montre une erreur de construction.

    Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':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 '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console

mais quand je construis ce projet pour android v5.0 ou plus, ça marche très bien.Si je supprime la dépendance de sugarorm gradle cela fonctionne très bien pour les deux périphériques v4.2.2 et v5.0

84
demandé sur onexf 2016-04-22 07:46:34

11 réponses

vous avez trop de méthodes. Il ne peut y avoir que des méthodes 65536 pour dex .

comme suggéré, vous pouvez utiliser le support multidex .

il suffit d'ajouter ces lignes dans le build.gradle :

android {

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

aussi dans votre Manifest ajouter la classe MultiDexApplication de la bibliothèque de soutien multidex à l'élément d'application

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.multidex.myapplication">
        <application
            ...
            android:name="android.support.multidex.MultiDexApplication">
<!--If you are using your own custom Application class then extend -->
<!--MultiDexApplication and change above line as-->
            android:name=".YourCustomApplicationClass">

            ...
        </application>
    </manifest>

remplacer attachBaseContext méthode

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    MultiDex.install(this);
}

si vous utilisez votre propre classe Application , changez la classe mère de Application en MultiDexApplication .

une autre solution est d'essayer de supprimer le code non utilisé avec ProGuard - configurer le ProGuard paramètres pour votre application pour exécuter ProGuard et de s'assurer que vous avez rétrécissement activé pour les constructions de version.

179
répondu Gabriele Mariotti 2017-09-22 05:16:01
android {

compileSdkVersion 23

 buildToolsVersion '23.0.0'

    defaultConfig {
        applicationId "com.dkm.example"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

mettez ceci dans votre defaultConfig:

multiDexEnabled true 

son travail pour moi

55
répondu Dharmendra Mishra 2016-07-23 11:19:12

j'ai reçu ce message d'erreur parce que tout en codant mon projet auto update compiler la version dans mon build.gradle fichier:

android {
    ...
    buildToolsVersion "23.0.2"
    ...
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0' }

résolvez la question en corrigeant la version:

android {
        ...
        buildToolsVersion "23.0.2"
        ...
    }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
}
16
répondu Quan Nguyen 2016-05-25 07:55:44

C'est ce qui a fonctionné pour moi:

cela se produit parce qu'il y a trop de méthodes inutilisées. La plupart de ces méthodes proviennent de bibliothèques incluses dans votre Compilation.Grad

utilisez les ressources minify et shrink pour corriger cela avec gradle et nettoyer votre code en même temps.

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            shrinkResources true
        }
    }
10
répondu Thunderstick 2016-07-14 03:40:49

cette erreur peut également se produire lorsque vous chargez tous les API google play services uniquement en utilisant afew.

comme l'indique google:" dans les versions des services Google Play antérieures à 6.5, vous deviez compiler le paquet entier D'API dans votre application. Dans certains cas, cela rendait plus difficile de garder le nombre de méthodes dans votre application (y compris les API de framework, les méthodes de bibliothèque, et votre propre code) sous la limite de 65,536.

de la version 6.5, vous pouvez à la place, compilez sélectivement les API de service Google Play dans votre application."

Par exemple, quand votre application doit jouer de services de cartes ,de jouer de services de localisation .Vous devez ajouter seulement les deux API dans votre construction.fichier gradle au niveau de l'application comme le montre ci-dessous:

compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'

au lieu de:

compile 'com.google.android.gms:play-services:10.2.1'

pour la documentation complète et la liste des services google play apis cliquez sur ici

9
répondu simiyukuta 2017-03-23 23:42:24

j'ai été confronté au même problème et pour le support multidex, vous devez garder à l'esprit la minSdkVersion de votre application. Si vous utilisez minSdkVersion 21 ou plus haut alors il suffit d'écrire multiDexEnabled true comme ceci

defaultConfig {
    applicationId *******************
    minSdkVersion 21
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

cela fonctionne pour moi et si vous utilisez minSdkVersion en dessous de 21 (en dessous de lolipop ) alors vous devez faire deux choses très simples

1. première ajouter cette dépendance

compiler", com.Android.support: multidex: 1.0.1 '

dans votre construction.gradle.

2. dernier et deuxième ajouter ce qui suit à votre demande dans le manifeste

android: name = " android.soutien.multidex.MultiDexApplication"

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name="android.support.multidex.MultiDexApplication"
    android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Bingo alors il fonctionnera dans la version inférieure aussi..:) Heureux de codage

4
répondu Sudhansu 2016-11-30 10:56:58

pour la modernisation de Gradle works.Rechercher la mise à jour à site Android puis l'ajouter dans votre construction.Grad le (projet) comme ceci

 dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-alpha4'   
          ....
    }

puis synchroniser le projet avec le fichier gradle plus cela peut arriver parfois à cause de java.exe (dans mon cas) vient de forcer kill java.exe du Gestionnaire des tâches dans windows puis relancer le programme

0
répondu androidXP 2016-07-30 12:33:50

peut aussi essayer ceci:

android{
    .
    .
    // to avoid DexIndexOverflowException
    dexOptions {
       jumboMode true
    }
}

J'espère que ça aidera quelqu'un. Merci

0
répondu Lazycoder_007 2017-03-20 07:25:33

support Multidex avant Android 5.0

Versions de la plate-forme Avant Android 5.0 (niveau API 21) utiliser le Dalvik runtime pour l'exécution de code app. Par défaut, Dalvik limite les applications à une seule classe.dex fichier bytecode par APK. Afin de contourner cette limitation, veuillez lire configurer votre application pour multidex

prise en charge Multidex pour Android 5.0 et plus

Android 5.0 (niveau API 21) et supérieur utilise une exécution appelée ART qui supporte nativement le chargement de plusieurs fichiers DEX à partir de fichiers APK. L'ART effectue une pré-compilation au moment de l'installation de l'application qui scanne pour la classe .dex les classe et les compile en un seul .avoine fichier pour l'exécution par l'appareil Android. Par conséquent, si votre minSdkVersion est de 21 ou plus, vous n'avez pas besoin de la bibliothèque de support multidex. Tout ce que vous devez faire est de définir multiDexEnabled à true dans votre construction au niveau du module.Grad

lire la suite - https://developer.android.com/studio/build/multidex

0
répondu yoAlex5 2018-06-18 11:54:29

vous pouvez activer" Instant Run " sur Android Studio pour obtenir le soutien multidex.

-1
répondu Quang Vĩnh Hà 2016-11-17 12:03:54

ce Faire, il travaille:

defaultConfig {
    applicationId "com.example.maps"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
-3
répondu tejasri 2016-06-30 22:00:28