Il numero di riferimenti di metodo in un file .dex non può superare l'API API 64k

Sto costruendo un'applicazione con la biblioteca di SugarORM ma quando provo a build il progetto per API 17 (non ho controllato per altri), mostra l'errore di configuration.

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 

Ma quando costruisco questo progetto per android v5.0 o sopra, funziona bene. Se ho rimosso la dipendenza da graded SugarORM funziona bene per entrambi i dispositivi v4.2.2 e v5.0

  • Comprensione dei concetti Canvas e Surface
  • Outofmemeoryerror (viewpager + imageviews)
  • Studio di proguard di Android Studio in progetti multi-biblioteca
  • Descrizione dell'errore di Logcat: il button apre l'applicazione
  • Android: cambiamento di background in styles.xml
  • creare json in android
  • Azione Intent di Android "ACTION_INSERT_OR_EDIT" - deve essere utilizzato per aggiungere contatti?
  • L'applicazione non verrà eseguita sul dispositivo: DELETE_FAILED_INTERNAL_ERROR?
  • JNI: gestire correttamente la durata di un object Java
  • Operazioni simultanee di Android - "il database è bloccato"
  • Formattazione data basata su locale utente su android
  • Android: Come utilizzare la webcam in emulatore?
  • 10 Solutions collect form web for “Il numero di riferimenti di metodo in un file .dex non può superare l'API API 64k”

    Hai troppi methods. Ci possono essere solo 65536 methods per dex .

    Come suggerito è ansible utilizzare il supporto multidex .

    Basta aggiungere queste righe nel build.gradle :

     android { defaultConfig { ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.0' } 

    Inoltre nel tuo Manifest aggiungere la class MultiDexApplication dalla libreria di supporto multidex all'elemento dell'applicazione

      <?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> 

    sostituire il metodo attachBaseContext

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

    Se si utilizza la propria class Application , modificare la class padre da Application a MultiDexApplication .

    Un'altra soluzione è cercare di rimuovere il codice inutilizzato con ProGuard – Configurare le impostazioni ProGuard per la tua applicazione per eseguire ProGuard e assicurarsi che la restrizione sia abilitata per le build di rilascio.

     android { compileSdkVersion 23 buildToolsVersion '23.0.0' defaultConfig { applicationId "com.dkm.example" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } 

    Inserisci questo all'interno del tuo defaultConfig:

     multiDexEnabled true 

    il suo lavoro per me

    Ho ricevuto questo messaggio di errore mentre durante la codifica del mio aggiornamento automatico del progetto compila la versione nel mio file build.gradle :

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

    Risolvi correggere la versione:

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

    Questo è ciò che ha funzionato per me:

    Ciò accade perché ci sono troppi methods inutilizzati. La maggior parte di questi methods provengono dalle biblioteche incluse nel tuo build.gradle

    Utilizza minifica e riduce le risorse per risolvere questo problema con gradle e ripulire il codice allo stesso tempo.

     buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true shrinkResources true } } 

    Ho affrontato lo stesso problema e per il supporto multidex, devi tenere a mente la minSdkVersion della tua applicazione. Se si utilizza minSdkVersion 21 o superiore, basta scrivere multiDexEnabled true come questo

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

    Funziona per me e se stai utilizzando minSdkVersion sotto 21 (sotto lolipop ) allora devi fare due cose semplici

    1. Innanzitutto aggiungere questa dipendenza

    compilare 'com.android.support:multidex:1.0.1'

    nel tuo build.gradle.

    2. Ultimo e secondo aggiungete questa linea sotto alla tua domanda in manifesto

    android: name = "android.support.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 poi functionrà nella versione più bassa anche .. 🙂 Codifica felice

    Questo errore può verificarsi anche quando si carica tutti i servizi di gioco di google apis quando si utilizza solo in futuro.

    Come affermato da google: "Nelle versioni dei servizi di Google Play prima del 6.5, è necessario compilare l'integer pacchetto di API nella tua app. In alcuni casi, è stato più difficile mantenere il numero di methods nell'applicazione (inclusi API quadro, methods di libreria e il proprio codice) sotto il limite di 65,536.

    Dalla versione 6.5, puoi compilare selettivamente API API del servizio di Google Play nell'applicazione. "

    Ad esempio, quando l'applicazione necessita di mappe di servizi di gioco, il servizio di riproduzione dei servizi. È necessario aggiungere solo le due apis nel file build.gradle a livello dell'applicazione come mostrato di seguito:

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

    Invece di:

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

    Per la documentazione completa e l'elenco dei servizi di google play apis clicca qui

    Per me L'aggiornamento di Gradle works.Look per l'aggiornamento sul sito Android quindi aggiungerlo nel tuo build.gradle (Project) come questo

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

    quindi sincronizzare il progetto con il file gradle più potrebbe essere accaduto talvolta a causa di java.exe (nel mio caso) solo la forza uccidere java.exe dal task manager nelle windows quindi re run program

    Può anche provare questo:

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

    Spero che aiuta qualcuno. Grazie

    puoi triggersre "Instant Run" su Android Studio per get il supporto multidex.

    Fai questo, funziona:

     defaultConfig { applicationId "com.example.maps" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.