2016-04-15 37 views
22

Ho cercato di creare il file apk per la mia app, tuttavia, sto ricevendo l'errore: il numero di riferimenti al metodo non può superare i 64 KB.Impossibile creare apk: il numero di riferimenti al metodo non può superare 64K

Qui ci sono gli errori,

Errore: Il numero di metodo riferimenti in un file .dex non può superare i 64 KB. Ulteriori informazioni su come risolvere questo problema in https://developer.android.com/tools/building/multidex.html

Errore: esecuzione non riuscita per l'attività ': 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:\Program Files\Java\jdk1.7.0_15\bin\java.exe'' finished with non-zero exit value 2

Questo è il mio file 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' 
} 

voglio costruire il file apk e distribuirlo senza problemi, come posso fare?

Aggiornamento

Ho anche provato il seguente

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

Questo sta producendo il messaggio:

errore: Esecuzione non riuscita per l'attività ': app: transformClassesWithNewClassShrinkerForDebug'.

Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them.

Come gestirlo e creare un apk corretto? Per favore aiuto.

+0

http://developer.android.com/tools/building/multidex.html – camelCaseCoder

+0

http://developer.android.com/tools/building/multidex .html devi abilitare Multidex, per favore segui il link sopra – Azahar

risposta

57
android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.0" 

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

qui multiDexEnabled true dovrebbe fare il gioco per voi

AGGIORNAMENTO: Per supportare la versione più recente di Android
1. Se il minSdkVersion è impostato a o superiore, tutto ciò che dovete fare è impostare multiDexEnabled su true in voi r file build.gradle a livello di modulo, come mostrato sopra.
2. Tuttavia, se il minSdkVersion è impostato su o più basso, quindi è necessario utilizzare la libreria di supporto multidex insieme a cambiamenti di cui sopra come segue:

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

Oltre a quanto sopra aggiunta di libreria di supporto, è è necessario apportare modifiche alla classe dell'applicazione come indicato in questo Link.

BEST PRACTICE:
1. Rimuovere qualsiasi codice inutilizzato con Proguard.
2. Evitare di aggiungere dipendenze non necessarie nel progetto.
3. Se sono necessari metodi di numeri limitati o classi di qualsiasi libreria open source, è consigliabile clonare solo quelli del progetto in quanto non solo ti dà il controllo totale su di essi, ma consente anche a proguard di agire su di essi e tu don ' t avere metodi inutilizzati nel codice.

Fonte: Android Developers - Configure Apps with 64K Method count

+0

Proprio quello? E il resto qui descritto? https://developer.android.com/studio/build/multidex.html –

+0

Ciao @AndrewS, grazie per aver segnalato questa roba. Questa risposta non viene aggiornata da un po ', la aggiornerà presto. Grazie –

+0

Quando aggiornerai la tua risposta? Tutti noi stiamo aspettando il vostro aggiornamento –

4

Mettere questo all'interno del vostro defaultConfig:

multiDexEnabled true 
29

Impossibile costruire apk: Il numero di metodo riferimenti non può superare i 64 KB verificarsi quando file app .dex hanno più di 65.536 metodi.

Exceed 65K Metodo che significa metodo contano più di 65.536 metodi Ci sono diversi modi per risolvere il problema:

1. Ridurre le dipendenze nel progetto put dipendenze in Gradle che sono necessari

La maggior parte dei problemi riscontrati da altri sviluppatori è l'utilizzo di Google Play Services in progetti come questo.

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

Quindi il modo migliore è scegliere solo alcune dipendenze in Google Play Services che si vuole veramente usarlo.

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. Set versione minima SDK a 21 o superiore

perché ha funzionato quando minima variazione SDK per 21? A causa di Android 5.0 o versioni successive si utilizza ART (Android Runtime) che supporta MultiDex anziché Dalvik. Quindi ART può supportare più di 65.536 metodi .

3. Utilizzare Proguard per ridurre metodo inutile

4. Utilizzare MultiDex

ma queste sono le Limitazione della libreria MultiDex

• Maggio si verifica ANR mentre applicazione di lancio se .dex file troppo grandi.

• Deve essere definito l'SDK minimo alla versione 14 o successiva.

• MulitDex utilizza più memoria e potrebbe bloccarsi durante l'esecuzione dell'app se la memoria di allocazione supera il limite.

• Prendere più costruire momento in cui si genera il progetto

+0

Non giocare con le tue dipendenze da google-service in base a questa spiegazione. Se hai un sistema funzionante, il mio gradle è inattivo in questo momento .. ( – Sam

+0

In suvate.) Che cosa è tutta questa matematica con il multidex? Inoltre c'è anche un'operazione con differenze. https://developers.google.com/android/guides/ setup Ecco un elenco di servizi divisi. Basta scegliere cosa usare. – CodeToLife